Vidiyo nke ihe nchọta ihe igwe ojii na Raspberry Pi

Nkọwapụta

Vidiyo na-ekesa ugbu a na ịntanetị na-egosi ka autopilot Tesla si ahụ ụzọ.

Anọ m na-afụ ụfụ ogologo oge iji gbasaa vidiyo emejuputara na ihe nchọta, na ozugbo.

Vidiyo nke ihe nchọta ihe igwe ojii na Raspberry Pi

Nsogbu bụ na achọrọ m ịgbasa vidiyo sitere na Raspberry, na arụmọrụ nke ihe nchọta netwọkụ akwara na ya na-ahapụ ọtụtụ ihe achọrọ.

Intel Neural Computer Stick

M tụlere ihe ngwọta dị iche iche.

В ikpeazụ isiokwu nwalere ya na Intel Neural Computer Stick. Ngwaike dị ike, mana ọ chọrọ usoro netwọkụ nke ya.

Ọ bụ ezie na Intel na-enye ndị ntụgharị maka usoro isi, enwere ọtụtụ ọnyà.

Dịka ọmụmaatụ, usoro nke netwọk achọrọ nwere ike ọ gaghị ekwe omume, ma ọ bụrụ na ọ dakọtara, mgbe ahụ, ụfọdụ akwa akwa nwere ike ghara ịkwado na ngwaọrụ ahụ, ma ọ bụrụ na akwadoro ha, mgbe ahụ, njehie nwere ike ime n'oge usoro ntụgharị, n'ihi nke a. anyị na-enweta ụfọdụ iju ihe na mmepụta.

Na mkpokọta, ọ bụrụ na ịchọrọ ụfọdụ ụdị netwọkụ akwara ozi aka ike, mgbe ahụ ọ nwere ike ọ gaghị arụ ọrụ na NCS. Ya mere, ekpebiri m ịgbalị iji dozie nsogbu ahụ site na iji ngwá ọrụ ndị kachasị gbasaa na ịnweta.

Ígwé ojii

Nhọrọ doro anya na ngwọta ngwaike mpaghara bụ ịga igwe ojii.

Nhọrọ ndị a kwadoro - anya m na-agba ọsọ.

Ndị isi niile:

... Na ọtụtụ ndị a ma ama.

Ịhọrọ n'etiti ụdị dị iche iche a adịghị mfe ma ọlị.

M kpebiri na m agaghị ahọrọ, kama kechie ezi ochie na-arụ ọrụ atụmatụ na OpenCV na Docker na-agba ọsọ ya na ígwé ojii.

Uru nke usoro a bụ mgbanwe na njikwa - ị nwere ike ịgbanwe netwọk neural, nnabata, ihe nkesa - n'ozuzu, ihe ọ bụla.

Server

Ka anyị jiri ihe atụ mpaghara bido.

Omenala m na-eji Flask maka REST API, OpenCV na MobileSSD netwọk.

Mgbe etinyere ụdịdị dị ugbu a na Docker, achọpụtara m na OpenCV 4.1.2 anaghị arụ ọrụ na Mobile SSD v1_coco_2018_01_28, na m ga-atụgharị azụ na 11/06_2017 egosipụtara.

Na mmalite nke ọrụ ahụ, anyị na-ebunye aha klas na netwọkụ:

def init():
    tf_labels.initLabels(dnn_conf.DNN_LABELS_PATH)
    return cv.dnn.readNetFromTensorflow(dnn_conf.DNN_PATH, dnn_conf.DNN_TXT_PATH)

Na docker mpaghara (na laptọọpụ na-eto eto) ọ na-ewe 0.3 sekọnd, na Raspberry - 3.5.

Ka anyị malite ngụkọ:

def inference(img):
    net.setInput(cv.dnn.blobFromImage(img, 1.0/127.5, (300, 300), (127.5, 127.5, 127.5), swapRB=True, crop=False))
    return net.forward()

Docker - 0.2 sk, Raspberry - 1.7.

Na-atụgharị iyuzucha tensor ka ọ bụrụ json nwere ike ịgụ:

def build_detection(data, thr, rows, cols):
    ret = []
    for detection in data[0,0,:,:]:
        score = float(detection[2])
        if score > thr:
            cls = int(detection[1])
            a = {"class" : cls, "name" : tf_labels.getLabel(cls),  "score" : score}
            a["x"] = int(detection[3] * cols)
            a["y"] = int(detection[4] * rows)
            a["w"] = int(detection[5] * cols ) - a["x"]
            a["h"] = int(detection[6] * rows) - a["y"]
            ret.append(a)
    return ret

Ọzọkwa mbupụ ọrụ a site na Flask(ntinye bụ foto, mmepụta bụ nsonaazụ nke ihe nchọta na json).

Nhọrọ ọzọ, nke a na-agbanyekwu ọrụ na ihe nkesa: ya n'onwe ya na-agba gburugburu ihe ndị ahụ achọtara wee weghachi ihe oyiyi agwụla.

Nhọrọ a dị mma ebe anyị achọghị ịdọrọ opencv na sava ahụ.

Docker

Anyị na-anakọta onyonyo.

A na-agbanye koodu ahụ ma tinye ya Github, docker ga-ebu ya ozugbo ebe ahụ.

Dị ka ikpo okwu, anyị ga-ewere otu Debian Stretch dị ka ọ dị na Raspberry - anyị agaghị esi na teknụzụ teknụzụ egosipụtara.

Ịkwesịrị ịwụnye flask, protobuf, arịrịọ, opencv_python, budata Mobile SSD, koodu nkesa site na Github wee malite ihe nkesa ahụ.

FROM python:3.7-stretch

RUN pip3 install flask
RUN pip3 install protobuf
RUN pip3 install requests
RUN pip3 install opencv_python

ADD http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_11_06_2017.tar.gz /
RUN tar -xvf /ssd_mobilenet_v1_coco_11_06_2017.tar.gz

ADD https://github.com/tprlab/docker-detect/archive/master.zip /
RUN unzip /master.zip

EXPOSE 80

CMD ["python3", "/docker-detect-master/detect-app/app.py"]

Dị Mfe onye na-achọpụta ihe dabere na arịrịọ.

Na-ebi akwụkwọ na Docker Hub

Ndebanye aha Docker na-amụba n'ọsọ na-erughị ihe nchọpụta igwe ojii.

Ka ị ghara ichegbu onwe anyị, anyị ga-aga n'ihu na conservatively DockerHub.

  1. Debanye aha
  2. Banye:
    nbanye docker
  3. Ka anyị were aha nwere nghọta pụta:
    docker mkpado opencv-chọpụta tprlab/opencv-detect-ssd
  4. Bulite onyonyo na sava:
    docker push tprlab/opencv-detect-ssd

Anyị na-amalite na igwe ojii

Nhọrọ nke ebe a na-agbaba akpa ahụ dịkwa obosara.

Ndị egwuregwu niile (Google, Microsoft, Amazon) na-enye obere ihe n'efu maka afọ mbụ.
Mgbe m mechara Microsoft Azure na Google Cloud, ebidoro m na nke ikpeazụ n'ihi na ọ na-apụ ngwa ngwa.

Edeghị m ntụziaka ebe a, ebe ọ bụ na akụkụ a bụ kpọmkwem maka onye na-eweta ahọpụtara.

Agbalịrị m nhọrọ ngwaike dị iche iche,
Ọkwa dị ala (nkekọrịtara na nke raara onwe ya nye) - 0.4 - 0.5 sekọnd.
Ụgbọ ala ndị dị ike karịa - 0.25 - 0.3.
Ọfọn, ọbụlagodi n'ọnọdụ kachasị njọ, mmeri bụ ugboro atọ, ị nwere ike ịnwale.

Video

Anyị na-ebupụta iyi vidiyo OpenCV dị mfe na Raspberry, na-achọpụta site na Google Cloud.
Maka nnwale ahụ, a na-eji faịlụ vidiyo nke a na-esere n'otu oge n'otu ụzọ na-enweghị usoro.


def handle_frame(frame):
    return detect.detect_draw_img(frame)
       
def generate():
    while True:
        rc, frame = vs.read()
        outFrame = handle_frame(frame)
        if outFrame is None:
            (rc, outFrame) = cv.imencode(".jpg", frame)
        yield(b'--framern' b'Content-Type: image/jpegrnrn' + bytearray(outFrame) + b'rn')

@app.route("/stream")
def video_feed():
    return Response(generate(), mimetype = "multipart/x-mixed-replace; boundary=frame")

Site na onye nchọta anyị na-enweta ihe karịrị okpokolo agba atọ kwa nkeji, ihe niile na-aga nwayọ nwayọ.
Ọ bụrụ na ị buru igwe dị ike n'ime GCloud, ị nwere ike ịchọpụta okpokolo agba 4-5 kwa nkeji, mana ọ fọrọ nke nta ka anya ghara ịhụ ọdịiche ahụ, ọ ka na-eji nwayọ.

Vidiyo nke ihe nchọta ihe igwe ojii na Raspberry Pi

Igwe ojii na ụgwọ njem enweghị ihe jikọrọ ya na ya; onye nchọta na-eji ngwaike nkịtị na-arụ ọrụ n'ụdị ọsọ ahụ.

Kọmputa akwara akwara

Enweghị m ike iguzogide wee gbaa akara ngosi na NCS.

Ọsọ nke ihe nchọta dị ntakịrị nwayọ karịa 0.1 sekọnd, n'ọnọdụ ọ bụla 2-3 ugboro ọsọ ọsọ karịa igwe ojii na igwe adịghị ike, ya bụ 8-9 okpokolo agba kwa nkeji.

Vidiyo nke ihe nchọta ihe igwe ojii na Raspberry Pi

A kọwara ihe dị iche na nsonaazụ ya bụ na NCS nọ na-agba ụdị SSD Mobile 2018_01_28.

P.S. Na mgbakwunye, nnwale egosila na igwe desktọpụ dị ike nke nwere ihe nrụpụta I7 na-egosi nsonaazụ kacha mma ma ọ bụrụ na ọ ga-ekwe omume iwepu okpokolo agba 10 kwa nkeji.

Yọkọ

Nnwale ahụ gara n'ihu ma etinyere m ihe nchọpụta ahụ na ọnụ ise na Google Kubernetes.
pọọsụ ndị ahụ n'onwe ha adịghị ike, nke ọ bụla n'ime ha enweghị ike ịhazi ihe karịrị okpomoku abụọ kwa nkeji.
Mana ọ bụrụ na ị na-agba ụyọkọ nwere ọnụ ọnụ N wee tụgharịa okpokolo agba na eriri N, yabụ na ọnụọgụ ọnụ zuru oke (5) ị nwere ike nweta okpokolo agba 10 achọrọ kwa sekọnd.

def generate():
    while True:
        rc, frame = vs.read()
        if frame is not None:
            future = executor.submit(handle_frame, (frame.copy()))
            Q.append(future)

        keep_polling = len(Q) > 0
        while(keep_polling):            
            top = Q[0]
            if top.done():
                outFrame = top.result()
                Q.popleft()
                if outFrame:
                    yield(b'--framern' b'Content-Type: image/jpegrnrn' + bytearray(outFrame) + b'rn')
                keep_polling = len(Q) > 0
            else:
                keep_polling = len(Q) >= M

Nke a bụ ihe mere:

Vidiyo nke ihe nchọta ihe igwe ojii na Raspberry Pi

Obere obere ngwa ngwa karịa na NCS, mana ike karịa n'otu iyi.

Uru, n'ezie, abụghị ahịrị - enwere ihe mkpuchi maka mmekọrịta yana nṅomi miri emi nke ihe oyiyi opencv.

nkwubi

N'ozuzu, nnwale ahụ na-enye anyị ohere ikwubi na ọ bụrụ na ị gbalịa, ị nwere ike ịpụ na igwe ojii dị mfe.

Mana desktọpụ dị ike ma ọ bụ ngwaike mpaghara na-enye gị ohere ị nweta nsonaazụ ka mma, na-enweghị aghụghọ ọ bụla.

zoro

isi: www.habr.com

Tinye a comment