Vhidhiyo ye Cloud Object Detector paRaspberry Pi

Nhungamidzo

Vhidhiyo ikozvino iri kutenderera paInternet inoratidza kuti Tesla's autopilot anoona sei mugwagwa.

Ndanga ndichikwenya kwenguva yakareba kutepfenyura vhidhiyo yakafumiswa ne detector, uye munguva chaiyo.

Vhidhiyo ye Cloud Object Detector paRaspberry Pi

Dambudziko nderekuti ini ndinoda kutepfenyura vhidhiyo kubva kuRaspberry, uye kuita kweiyo neural network detector pairi inosiya zvakanyanya kudiwa.

Intel Neural Computer Stick

Ndakafunga mhinduro dzakasiyana.

Π’ chinyorwa chekupedzisira akaedza neIntel Neural Computer Stick. Iyo hardware ine simba, asi inoda yayo yega network fomati.

Kunyangwe Intel ichipa vashanduri vezvimiro zvakakura, kune akati wandei makomba.

Semuenzaniso, chimiro chetiweki chinodiwa chinogona kunge chisingaenderane, uye kana ichienderana, saka mamwe matinji anogona kunge asina kutsigirwa pachigadzirwa, uye kana akatsigirwa, ipapo kukanganisa kunogona kuitika panguva yekutendeuka, semhedzisiro tinowana zvimwe zvinhu zvinoshamisa pakubuda.

Kazhinji, kana iwe uchida imwe mhando yekupokana neural network, saka inogona kusashanda neNCS. Nokudaro, ndakasarudza kuedza kugadzirisa dambudziko racho uchishandisa zvishandiso zvakapararira uye zvinowanikwa.

Cloud

Iyo iri pachena imwe nzira kune yemunharaunda hardware mhinduro ndeye kuenda kune gore.

Yakagadzirira-yakagadzirwa sarudzo - maziso angu anomhanya.

Vatungamiri vese:

... Uye gumi nevaviri vasingazivikanwe.

Kusarudza pakati peizvi zvakasiyana-siyana hazvisi nyore zvachose.

Uye ndakafunga kusasarudza, asi kuputira yakanaka yekare yekushanda chirongwa paOpenCV muDocker uye nekuimhanyisa mugore.

Kubatsira kweiyi nzira ndeyekuchinjika uye kutonga - unogona kushandura neural network, hosting, server - kazhinji, chero whim.

Server

Ngatitangei neiyo yemuno prototype.

Nechinyakare ini ndinoshandisa Flask yeREST API, OpenCV uye MobileSSD network.

Zvandakaisa shanduro dzazvino paDocker, ndakaona kuti OpenCV 4.1.2 haishande neMobile SSD v1_coco_2018_01_28, uye ndaifanira kukungurutsira kumashure kune yakasimbiswa 11/06_2017.

Pakutanga kwesevhisi, tinotakura mazita ekirasi uye network:

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

Pane docker yemunharaunda (pane isiri mudiki laptop) zvinotora 0.3 masekondi, paRaspberry - 3.5.

Ngatitange kuverenga:

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, Raspberry - 1.7.

Kushandura tensor exhaust kuita inoverengwa json:

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

Uyezve kunze kunze kwekuita uku kuburikidza neFlask(kupinza mufananidzo, kuburitsa ndiwo mhedzisiro ye detector mujson).

Imwe sarudzo, umo basa rakawanda rinochinjirwa kune sevha: iyo pachayo inotenderedza zvinhu zvakawanikwa uye inodzosera mufananidzo wapera.

Iyi sarudzo yakanaka kwatisingade kudhonza opencv kune server.

Docker

Tinounganidza mufananidzo.

Iyo kodhi inosanganiswa uye inotumirwa pairi Github, docker achaitora kubva ipapo.

Sepuratifomu, isu tichatora yakafanana Debian Stretch sepaRaspberry - isu hatizotsauka kubva kune yakasimbiswa tech stack.

Iwe unofanirwa kuisa flask, protobuf, zvikumbiro, opencv_python, tora Mobile SSD, server kodhi kubva kuGithub uye tanga sevha.

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

Zviri nyore detector mutengi zvichibva pakukumbira.

Kushambadzira kuDocker Hub

Docker registries iri kuwanda nekumhanya kwete isingasviki makore ma detectors.

Kuti tisazvinetse, isu tichaita conservatively kupfuura DockerHub.

  1. Register
  2. Log in:
    docker login
  3. Ngatiuye nezita rine zvarinoreva:
    docker tag opencv-ona tprlab/opencv-detect-ssd
  4. Isa mufananidzo kune server:
    docker push tprlab/opencv-detect-ssd

Tinovhura mugore

Sarudzo yenzvimbo yekumhanyisa mudziyo zvakare yakakura.

Vese vatambi vakuru (Google, Microsoft, Amazon) vanopa micro-chiitiko chemahara kwegore rekutanga.
Mushure mekuyedza neMicrosoft Azure neGoogle Cloud, ndakagara pane yekupedzisira nekuti yakasimuka nekukurumidza.

Ini handina kunyora mirairo pano, sezvo chikamu ichi chakanangana nemupi akasarudzwa.

Ndakaedza dzakasiyana hardware sarudzo,
Mwero yakaderera (yakagovaniswa uye yakatsaurirwa) - 0.4 - 0.5 masekondi.
Dzimwe mota dzine simba - 0.25 - 0.3.
Zvakanaka, kunyangwe mumamiriro ezvinhu akaipisisa, kuhwina kuri katatu, unogona kuedza.

Π’ΠΈΠ΄Π΅ΠΎ

Isu tinotangisa yakapfava OpenCV vhidhiyo inoyerera paRaspberry, kuona kuburikidza neGoogle Cloud.
Pakuedza, faira revhidhiyo rakashandiswa iro rakambotorwa firimu pane zvisina tsarukano mharadzano.


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

Ne detector hatiwane mafuremu anopfuura matatu pasekondi, zvese zvinofamba zvishoma nezvishoma.
Kana iwe ukatora muchina une simba muGCloud, unogona kuona 4-5 mafuremu pasekondi, asi mutsauko unenge usingaonekwe neziso, uchiri kunonoka.

Vhidhiyo ye Cloud Object Detector paRaspberry Pi

Gore uye mari yekufambisa haina chekuita nazvo; iyo detector inomhanya pane yakajairwa hardware uye inoshanda nekumhanya ikoko.

Neural Computer Stick

Handina kukwanisa kuramba uye ndakamhanyisa bhenji paNCS.

Kumhanya kwe detector kwaive kunonoka zvishoma pane 0.1 seconds, chero zvakadaro 2-3 times nekukurumidza kupfuura gore pamushini usina simba, kureva 8-9 mafuremu pasekondi.

Vhidhiyo ye Cloud Object Detector paRaspberry Pi

Musiyano mumhedzisiro unotsanangurwa nenyaya yekuti NCS yaive ichimhanyisa Mobile SSD vhezheni 2018_01_28.

PS Pamusoro pezvo, zviedzo zvakaratidza kuti mushini wedesktop une simba une I7 processor unoratidza mhedzisiro iri nani zvishoma uye zvakazokwanisika kudzvanya mafiramu gumi pasekondi pairi.

Sumbu

Kuedza kwakaenda mberi uye ndakaisa detector pane shanu node muGoogle Kubernetes.
Iwo mapodhi pachawo aive asina kusimba uye imwe neimwe yadzo yaisakwanisa kugadzira anopfuura 2 mafuremu pasekondi.
Asi kana iwe uchimhanyisa sumbu rine N node uye kupatsanura mafuremu muN shinda, saka nenhamba yakakwana yemanodhi (5) unogona kuwana anodiwa gumi mafaremu pasekondi.

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

Hezvino zvakaitika:

Vhidhiyo ye Cloud Object Detector paRaspberry Pi

Kukurumidza kushoma pane neNCS, asi yakasimba kupfuura murukova rumwe.

Iko bhenefiti, hongu, haina mutsara - kune akafukidzira kuwiriranisa uye kwakadzama kutevedzera yeOpencv mifananidzo.

mhedziso

Pakazere, kuyedza kunotibvumira kugumisa kuti kana ukaedza, unogona kutiza negore rakareruka.

Asi ine simba desktop kana yemunharaunda hardware inobvumira iwe kuti uwane mhedzisiro iri nani, uye pasina chero matipi.

nezvakanyorwa

Source: www.habr.com

Voeg