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.
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.
Π
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
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
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
Ishicilelwa ku-Docker Hub
Ukubhaliswa kwe-Docker kuphindaphindeka ngesivinini esingekho ngaphansi kwezitholi zamafu.
Ukuze singahlukumezi, sizodlula ngokuqapha
- Bhalisa
- Ngena ngemvume:
ukungena kwe-docker - Ake siqhamuke negama eliphusile:
ithegi ye-docker i-opencv-bona i-tprlab/opencv-detect-ssd - 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.
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.
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:
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