Vitio o le Cloud Object Detector i luga ole Raspberry Pi

Folasaga

O loʻo faʻasalalau nei se vitio i luga o le Initaneti o loʻo faʻaalia ai le vaʻaia e le autopilot a Tesla le auala.

Ua leva ona ou maʻi e faʻasalalau vitio faʻatamaoaigaina i se mea e iloa ai, ma i le taimi moni.

Vitio o le Cloud Object Detector i luga ole Raspberry Pi

O le faʻafitauli o loʻo ou manaʻo e faʻasalalau vitio mai Raspberry, ma o le faʻatinoga o le neural network detector i luga e tele mea e manaʻomia.

Intel Neural Computer Stick

Sa ou mafaufau i ni fofo eseese.

В mataupu mulimuli fa'ata'ita'i ile Intel Neural Computer Stick. O meafaigaluega e mamana, ae manaʻomia lona lava faʻapipiʻi fesoʻotaʻiga.

E ui lava ina saunia e Intel tagata liliu mai mo faʻavae tetele, e iai le tele o faʻalavelave.

Mo se faʻataʻitaʻiga, o le faatulagaga o le fesoʻotaʻiga manaʻomia e ono le fetaui, ma afai e fetaui, ona le mafai lea ona lagolagoina nisi o laupepa i luga o le masini, ma afai e lagolagoina, ona tupu ai lea o mea sese i le faagasologa o le liua, o se taunuuga o lea. matou te maua ni mea uiga ese i le gaosiga.

I se tulaga lautele, afai e te manaʻo i se ituaiga o fesoʻotaʻiga neural, atonu e le aoga i le NCS. O le mea lea, na ou filifili ai e taumafai e foia le faʻafitauli e faʻaaoga ai meafaigaluega sili ona lautele ma avanoa.

Lagi

O le suiga manino i se fofo meafaigaluega faʻapitonuʻu o le alu i le ao.

Filifiliga ua uma ona fai - e taufetuli ou mata.

Taitai uma:

... Ma le tele o i latou e le o lauiloa.

O le filifilia o lenei ituaiga e le faigofie.

Ma na ou filifili e aua le filifili, ae ia afifi le polokalame galue tuai i OpenCV i Docker ma taʻavale i le ao.

O le lelei o lenei faiga o le fetuutuunai ma le pulea - e mafai ona e suia le neural network, talimalo, server - i se tulaga lautele, soʻo se manaʻoga.

Saini

Tatou amata i se fa'ata'ita'iga fa'alotoifale.

I le masani ai, ou te faʻaaogaina le Flask mo REST API, OpenCV ma MobileSSD network.

I le faʻapipiʻiina o lomiga o loʻo i ai nei i luga o Docker, na ou iloa ai e le aoga le OpenCV 4.1.2 ma Mobile SSD v1_coco_2018_01_28, ma e tatau ona ou toe foʻi i tua i le faʻamaonia 11/06_2017.

I le amataga o le auaunaga, matou te utaina igoa o vasega ma fesoʻotaʻiga:

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

I luga o se faʻaoga faʻapitonuʻu (i luga o se komepiuta laʻititi) e manaʻomia le 0.3 sekone, i luga ole Raspberry - 3.5.

Tatou amata le fa'atatauga:

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 sec, Rasipi - 1.7.

Su'e le fa'avevela tensor i le json e mafai ona faitau:

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

E le gata i lea auina atu i fafo lenei gaioiga e ala i Flask(o le faʻaogaina o se ata, o le gaioiga o taunuʻuga o le suʻesuʻe i le json).

O se isi filifiliga, lea e sili atu galuega e faʻafeiloaʻi i le 'auʻaunaga: na te faʻataʻamilomilo mea na maua ma toe faʻafoʻi le ata maeʻa.

O lenei filifiliga e lelei pe a tatou le manaʻo e toso opencv i le 'auʻaunaga.

Docker

Matou te aoina le ata.

O le code ua selu ma faapipii i luga Github, o le a ave sa'o mai e Docker mai iina.

I le avea ai o se faʻavae, matou te faʻaaogaina le Debian Stretch e pei o luga ole Raspberry - matou te le o ese mai le faʻaputuga tekonolosi faʻamaonia.

E te manaʻomia le faʻapipiʻiina o fagu, protobuf, talosaga, opencv_python, download Mobile SSD, code server mai Github ma amata le server.

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"]

Faigofie tagata su'esu'e e faavae i luga o talosaga.

Fa'asalalau ile Docker Hub

O lo'o fa'ateleina tusi resitala a Docker i se saoasaoa e le itiiti ifo nai lo fa'amatalaga ao.

Ina ia aua neʻi faʻalavelave, o le a tatou faia ma le le mautonu DockerHub.

  1. Resitala
  2. Ulufale mai:
    saini a le au fai fale
  3. Sei o tatou maua se igoa anoa:
    docker tag opencv-tetetee tprlab/opencv-detect-ssd
  4. Tu'u le ata ile server:
    docker tulei tprlab/opencv-detect-ssd

Matou te tatalaina i le ao

E fai lava si lautele le filifiliga o le mea e ta'i ai le atigipusa.

O taʻaloga tetele uma (Google, Microsoft, Amazon) e ofoina atu se micro-faʻataʻitaʻiga mo le leai o se totogi mo le tausaga muamua.
Ina ua uma ona ou faataitai ma Microsoft Azure ma Google Cloud, na ou nofo i luga o le mea mulimuli aua na alu ese vave.

Ou te leʻi tusia ni faʻatonuga iinei, talu ai o lenei vaega e matua faʻapitoa i le kamupani filifilia.

Sa ou taumafai i meafaigaluega eseese,
La'asaga maualalo (fa'asoa ma tuuto) - 0.4 - 0.5 sekone.
Ta'avale sili atu le malosi - 0.25 - 0.3.
Ia, e oo lava i le tulaga sili ona leaga, o le manumalo e tolu taimi, e mafai ona e taumafai.

Видео

Matou te faʻalauiloaina se faʻasalalauga faigofie OpenCV vitio i luga o le Raspberry, e maua mai i Google Cloud.
Mo le faʻataʻitaʻiga, na faʻaaogaina se faila vitio na puʻeina muamua i se vaʻaiga faʻafuaseʻi.


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")

Faatasi ai ma le mea e iloa ai e le sili atu ma le tolu faavaa i le sekone tatou te maua, o mea uma e alu lemu.
Afai e te ave se masini mamana i totonu o le GCloud, e mafai ona e iloa 4-5 faʻavaa i le sekone, ae o le eseesega e toetoe lava a le iloa e mata, e telegese lava.

Vitio o le Cloud Object Detector i luga ole Raspberry Pi

O le ao ma le tau o felauaiga e leai se mea e fai i ai; o le detector e tamoe i luga o meafaigaluega masani ma galue i se saoasaoa.

Neural Computer Stick

Sa le mafai ona ou tetee ma tamoe i le faʻailoga ile NCS.

O le saoasaoa o le mea e iloa ai na sili atu lemu nai lo le 0.1 sekone, i soo se tulaga 2-3 taimi sili atu nai lo le ao i luga o se masini vaivai, o lona uiga 8-9 faʻavaa i le sekone.

Vitio o le Cloud Object Detector i luga ole Raspberry Pi

O le eseesega i taunuuga o loʻo faʻamatalaina e le mea moni o le NCS o loʻo faʻatautaia le Mobile SSD version 2018_01_28.

PS E le gata i lea, o faʻataʻitaʻiga ua faʻaalia ai o se masini komepiuta mamana ma le I7 processor o loʻo faʻaalia teisi sili atu iʻuga ma faʻaalia e mafai ona oomi 10 faʻavaa i le sekone i luga.

Fuifui

Na alu atili le faʻataʻitaʻiga ma na ou faʻapipiʻi le suʻesuʻe i luga ole lima nodes ile Google Kubernetes.
O pusa lava ia na vaivai ma e le mafai e i latou taʻitasi ona faʻagaoioia le sili atu i le 2 faʻavaa i le sekone.
Ae afai e te faʻataʻitaʻiina se fuifui ma N nodes ma faʻapipiʻi faʻavaa i N filo, ona lava lea o le numera o nodes (5) e mafai ona e ausia le manaʻomia 10 faʻavaa i le sekone.

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

O le mea lenei na tupu:

Vitio o le Cloud Object Detector i luga ole Raspberry Pi

E itiiti ifo le vave nai lo le NCS, ae sili atu le malosi nai lo le tasi vaitafe.

O le tupe maua, ioe, e le o laina - o loʻo i ai faʻapipiʻi mo le faʻamaopoopoina ma le kopi loloto o ata opencv.

iʻuga

I le aotelega, o le faʻataʻitaʻiga e mafai ai ona matou faʻamaonia afai e te taumafai, e mafai ona e alu ese ma se ao faigofie.

Ae o se komepiuta mamana poʻo se meafaigaluega faʻapitonuʻu e mafai ai ona e ausia ni taunuuga sili atu, ma e aunoa ma ni togafiti.

mau

puna: www.habr.com

Faaopoopo i ai se faamatalaga