Ividiyo ye-Cloud Object Detector ku-Raspberry Pi

Isandulela

Ividiyo manje isizungeza ku-inthanethi ekhombisa ukuthi umshayeli we-autopilot kaTesla uwubona kanjani umgwaqo.

Bengilokhu ngilunywa isikhathi eside ukusakaza ividiyo enothiswe ngomtshina, futhi ngesikhathi sangempela.

Ividiyo ye-Cloud Object Detector ku-Raspberry Pi

Inkinga ukuthi ngifuna ukusakaza ividiyo kusuka ku-Raspberry, futhi ukusebenza komtshina wenethiwekhi ye-neural kuyo kushiya okuningi okufanele ukwenze.

I-Intel Neural Computer Stick

Ngicabangele izixazululo ezahlukene.

Π’ isihloko sokugcina izame nge-Intel Neural Computer Stick. Ihadiwe inamandla, kodwa idinga ifomethi yayo yenethiwekhi.

Noma i-Intel ihlinzeka ngeziguquli zezinhlaka ezinkulu, kunenqwaba yezingibe.

Isibonelo, ifomethi yenethiwekhi edingekayo ingase ingahambisani, futhi uma ihambisana, khona-ke ezinye izendlalelo zingase zingasekelwa kudivayisi, futhi uma zisekelwa, khona-ke amaphutha angase enzeka phakathi nenqubo yokuguqulwa, ngenxa yalokho sithola izinto ezingajwayelekile ekuphumeni.

Ngokuvamile, uma ufuna uhlobo oluthile lwenethiwekhi ye-neural engafanele, khona-ke ingase ingasebenzi ne-NCS. Ngakho-ke, nginqume ukuzama ukuxazulula inkinga ngokusebenzisa amathuluzi asakazeke kakhulu futhi afinyeleleka kalula.

Lifu

Okuhlukile okusobala kwesixazululo sehadiwe yendawo ukuya efwini.

Izinketho ezenziwe ngomumo - amehlo ami ayagijima.

Bonke abaholi:

... Nenqwaba yabangaziwa kancane.

Ukukhetha phakathi kwalezi zinhlobonhlobo akulula neze.

Futhi nginqume ukungakhethi, kodwa ukugoqa uhlelo oluhle lokusebenza oludala ku-OpenCV ku-Docker futhi ngiluqhube efwini.

Inzuzo yale ndlela ukuguquguquka nokulawula - ungashintsha inethiwekhi ye-neural, ukusingathwa, iseva - ngokuvamile, noma yikuphi ukufisa.

Iseva

Ake siqale nge-prototype yendawo.

Ngokwesiko ngisebenzisa i-Flask ye-REST API, i-OpenCV nenethiwekhi ye-MobileSSD.

Ngemva kokufaka izinguqulo zamanje ku-Docker, ngathola ukuthi i-OpenCV 4.1.2 ayisebenzi ne-Mobile SSD v1_coco_2018_01_28, futhi kwadingeka ngibuyele emuva ku-11/06_2017 efakazelwe.

Ekuqaleni kwesevisi, silayisha amagama ekilasi nenethiwekhi:

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

Ku-docker yendawo (kwi-laptop engencane kakhulu) kuthatha imizuzwana engu-0.3, ku-Raspberry - 3.5.

Ake siqale ukubala:

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

I-Docker - 0.2 isekhondi, okusajingijolo - 1.7.

Ukuguqula i-tensor exhaust ibe i-json efundekayo:

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

Ngaphezu kwalokho Khipha lo msebenzi ngeFlask(okufakwayo isithombe, okukhiphayo yimiphumela yomtshina ku-json).

Enye inketho, lapho umsebenzi owengeziwe ushintshelwa kuseva: yona ngokwayo izungeza izinto ezitholakele bese ibuyisela isithombe esiqediwe.

Le nketho yinhle lapho singafuni khona ukuhudulela i-opencv kuseva.

I-Docker

Siqoqa isithombe.

Ikhodi ihlanganiswe futhi ithunyelwe I-Github, i-docker izoyithatha ngqo ukusuka lapho.

Njengengxenyekazi, sizothatha i-Debian Stretch efanayo njengakuRaspberry - ngeke siphambuke kusitaki sobuchwepheshe esiqinisekisiwe.

Udinga ukufaka i-flask, i-protobuf, izicelo, i-opencv_python, landa i-Mobile SSD, ikhodi yeseva evela ku-Github bese uqala iseva.

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

Okulula iklayenti lomtshina ngokusekelwe ezicelweni.

Ishicilelwa ku-Docker Hub

Ukubhaliswa kwe-Docker kuphindaphindeka ngesivinini esingekho ngaphansi kwezitholi zamafu.

Ukuze singahlukumezi, sizodlula ngokuqapha I-DockerHub.

  1. Bhalisa
  2. Ngena ngemvume:
    ukungena kwe-docker
  3. Ake siqhamuke negama eliphusile:
    ithegi ye-docker i-opencv-bona i-tprlab/opencv-detect-ssd
  4. Layisha isithombe kuseva:
    i-docker push tprlab/opencv-detect-ssd

Sethula emafini

Ukukhetha ukuthi isitsha uzosiqhuba kuphi nakho kubanzi kakhulu.

Bonke abadlali abakhulu (i-Google, iMicrosoft, i-Amazon) banikela nge-micro-instance mahhala ngonyaka wokuqala.
Ngemuva kokuzama iMicrosoft Azure neGoogle Cloud, ngahlala kokugcina ngoba yasuka ngokushesha.

Angibhalanga imiyalo lapha, njengoba le ngxenye iqonde kakhulu kumhlinzeki okhethiwe.

Ngazama izinketho ezahlukene zehadiwe,
Amazinga aphansi (kwabiwe futhi anikezelwe) - 0.4 - 0.5 imizuzwana.
Izimoto ezinamandla kakhulu - 0.25 - 0.3.
Nokho, ngisho esimweni esibi kakhulu, ukuwina kuphindwe kathathu, ungazama.

Isiqophi

Sethula i-OpenCV video streamer elula ku-Raspberry, esiyithola nge-Google Cloud.
Ocwaningweni, kusetshenziswe ifayela levidiyo elake lashuthwa ezimpambanweni zomgwaqo ezingahleliwe.


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

Ngomtshina asitholi ngaphezu kwamafreyimu amathathu ngomzuzwana, yonke into ihamba kancane kakhulu.
Uma ufaka umshini onamandla ku-GCloud, ungathola ozimele abangu-4-5 ngomzuzwana, kodwa umehluko ucishe ungabonakali ngeso, usahamba kancane.

Ividiyo ye-Cloud Object Detector ku-Raspberry Pi

Izindleko zefu nezokuthutha azihlangene nakancane nakho; umtshina usebenza nge-hardware evamile futhi usebenza ngesivinini esinjalo.

I-Neural Computer Stick

Angikwazanga ukumelana futhi ngasebenzisa ibhentshimakhi ku-NCS.

Isivinini somtshina besihamba kancane kunemizuzwana engu-0.1, kunoma yikuphi izikhathi ezi-2-3 ngokushesha kunefu emshinini obuthakathaka, okungukuthi amafreyimu angu-8-9 ngomzuzwana.

Ividiyo ye-Cloud Object Detector ku-Raspberry Pi

Umehluko emiphumeleni uchazwa ukuthi i-NCS ibisebenzisa inguqulo ye-Mobile SSD 2018_01_28.

PS Ngaphezu kwalokho, ucwaningo luye lwabonisa ukuthi umshini wedeskithophu onamandla onephrosesa ye-I7 ubonisa imiphumela engcono kakhulu futhi kungenzeka ukuthi ucindezele amafreyimu angu-10 ngomzuzwana kuwo.

Iqoqo

Ukuhlola kuqhubekele phambili futhi ngafaka umtshina kumanodi amahlanu ku-Google Kubernetes.
Ama-pods ngokwawo ayebuthakathaka futhi ngayinye yawo ayikwazanga ukucubungula amafreyimu angaphezu kwama-2 ngomzuzwana.
Kodwa uma usebenzisa iqoqo elinamanodi angu-N futhi uhlaziya ozimele emiculweni engu-N, lapho-ke ngenani elanele lamanodi (5) ungakwazi ukuzuza ozimele abayi-10 abayifunayo ngomzuzwana.

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

Nakhu okwenzekile:

Ividiyo ye-Cloud Object Detector ku-Raspberry Pi

Ishesha kancane kune-NCS, kodwa inamandla kakhulu kunokusakaza okukodwa.

Inzuzo, vele, ayikona umugqa - kukhona izimbondela zokuvumelanisa nokukopishwa okujulile kwezithombe ze-opencv.

isiphetho

Sekukonke, ukuhlolwa kusivumela ukuthi siphethe ngokuthi uma uzama, ungaphunyuka ngefu elilula.

Kodwa ideskithophu enamandla noma ihadiwe yendawo ikuvumela ukuthi uzuze imiphumela engcono, futhi ngaphandle kwamaqhinga.

izithenjwa

Source: www.habr.com

Engeza amazwana