Isingeniso
Ividiyo ngoku ijikeleza kwi-Intanethi ebonisa indlela i-autopilot kaTesla ebona ngayo indlela.
Kudala ndirhawuzelelwa ukusasaza ividiyo etyetyisiweyo ngesixhobo, kwaye ngexesha lokwenyani.
Ingxaki kukuba ndifuna ukusasaza ividiyo kwiRaspberry, kwaye ukusebenza kwe-neural network detector kuyo kushiya okuninzi okufunwayo.
Intel Neural Computer Stick
Ndaqwalasela izicombululo ezahlukahlukeneyo.
Π
Nangona i-Intel ibonelela ngabaguquli bezakhelo eziphambili, kukho inani lemigibe.
Ngokomzekelo, ifomathi yenethiwekhi efunekayo isenokungahambelani, kwaye ukuba iyahambelana, ke ezinye iileyile azinakuxhaswa kwisixhobo, kwaye ukuba zixhaswa, iimpazamo zinokuthi zenzeke ngexesha lokuguqulwa kwenkqubo, ngenxa yoko. sifumana izinto ezingaqhelekanga kwimveliso.
Ngokubanzi, ukuba ufuna uhlobo oluthile lwenethiwekhi ye-neural engafanelekanga, ngoko ayinakusebenza kunye ne-NCS. Ngoko ke, ndagqiba ekubeni ndizame ukusombulula ingxaki ngokusebenzisa izixhobo ezixhaphake kakhulu kwaye zifikeleleke.
Ilifu
Enye indlela ecacileyo kwisisombululo se-hardware sasekhaya kukuya kwilifu.
Iinketho esele zenziwe - amehlo am abaleka.
Zonke iinkokeli:
... Kwaye uninzi lwabaziwayo kancinci.
Ukukhetha phakathi kwezi ndidi akulula kwaphela.
Kwaye ndaye ndagqiba kwelokuba ndingakhethi, kodwa ndisonge iskimu esihle sokusebenza esidala kwi-OpenCV eDocker kwaye ndiyiqhube efini.
Inzuzo yale ndlela iguquguqukayo kunye nokulawula - unokutshintsha inethiwekhi ye-neural, i-hosting, iseva - ngokubanzi, nayiphi na i-whim.
UmSebenzi
Masiqale ngeprototype yasekhaya.
Ngokwesiko ndisebenzisa iFlask ye-REST API, i-OpenCV kunye nenethiwekhi ye-MobileSSD.
Emva kokufaka iinguqulelo zangoku kwi-Docker, ndafumanisa ukuba i-OpenCV 4.1.2 ayisebenzi nge-Mobile SSD v1_coco_2018_01_28, kwaye kwafuneka ndibuyele kwi-11/06_2017 eqinisekisiweyo.
Ekuqaleni kwenkonzo, silayisha amagama eklasi kunye nenethiwekhi:
def init():
tf_labels.initLabels(dnn_conf.DNN_LABELS_PATH)
return cv.dnn.readNetFromTensorflow(dnn_conf.DNN_PATH, dnn_conf.DNN_TXT_PATH)
Kwi-docker yendawo (kwi-laptop engekho kakhulu) kuthatha imizuzwana eyi-0.3, kwi-Raspberry - 3.5.
Masiqale 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 - i-0.2 sec, i-Raspberry - 1.7.
Ukuguqula i-tensor exhaust ibe yi-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
Ngapha koko
Olunye ukhetho, apho umsebenzi omninzi utshintshelwa kumncedisi: yona ngokwayo isangqa izinto ezifunyenweyo kwaye ibuyisela umfanekiso ogqityiweyo.
Olu khetho lulungile apho singafuni ukutsala i-opencv kumncedisi.
Docker
Siqokelela umfanekiso.
Ikhowudi ikanwe kwaye iposwe
Njengeqonga, siya kuthabatha iDebian Stretch efanayo njengakwiRaspberry - asiyi kuphambuka kwisitaki setekhnoloji esiqinisekisiweyo.
Kufuneka ufake i-flask, i-protobuf, izicelo, i-opencv_python, khuphela i-Mobile SSD, ikhowudi yomncedisi kwi-Github kwaye uqale 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"]
Elula
Ukupapasha kwi-Docker Hub
Iirejistri zeDocker ziyaphindaphindeka ngesantya esingekho ngaphantsi kwee-detectors zamafu.
Ukuze singazikhathazi, siya kudlula ngokungqongqo
- Bhalisa
- Ngema:
ukungena kwidocker - Makhe size negama elinentsingiselo:
docker tag opencv-bona i-tprlab/opencv-detect-ssd - Layisha umfanekiso kwiseva:
docker push tprlab/opencv-detect-ssd
Siqalisa efini
Ukhetho lwendawo yokuqhuba isikhongozeli nalo lubanzi kakhulu.
Bonke abadlali abakhulu (uGoogle, iMicrosoft, iAmazon) banikezela nge-micro-instance simahla kunyaka wokuqala.
Emva kokuzama iMicrosoft Azure kunye neLifu likaGoogle, ndazinza kokugqibela kuba yasuka ngokukhawuleza.
Andiyibhalanga imiyalelo apha, kuba le nxalenye igxile kakhulu kumnikezeli okhethiweyo.
Ndizame iinketho ezahlukeneyo zehardware,
Amanqanaba aphantsi (kwabelwana kwaye anikezelwe) - 0.4 - 0.5 imizuzwana.
Iimoto ezinamandla ngakumbi - 0.25 - 0.3.
Ewe, nakwimeko embi kakhulu, impumelelo iphindwe kathathu, ungazama.
ΠΠΈΠ΄Π΅ΠΎ
Siphehlelela ividiyo elula ye-OpenCV kwiRaspberry, sibona ngeLifu likaGoogle.
Kuvavanyo, kwasetyenziswa ifayile yevidiyo eyayikhe yafotwa kwindawo engacwangciswanga.
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")
Ngesixhobo asifumani ngaphezu kwezakhelo ezintathu ngomzuzwana, yonke into ihamba ngokucotha kakhulu.
Ukuba uthatha umatshini onamandla kwi-GCloud, unokubona iifreyimu ezi-4-5 ngomzuzwana, kodwa umahluko uphantse ungabonakali emehlweni, usacotha.
Ilifu kunye neendleko zothutho azinanto yakwenza nayo; umtshini uqhuba kwi-hardware eqhelekileyo kwaye usebenza ngeso santya.
Intonga yeKhompyutha yeNeural
Andikwazanga ukuxhathisa kwaye ndiqhube i-benchmark kwi-NCS.
Isantya somtshini sasicotha kancinci kunemizuzwana eyi-0.1, kuyo nayiphi na imeko amaxesha angama-2-3 ngokukhawuleza kunelifu kumatshini obuthathaka, oko kukuthi iifreyimu eziyi-8-9 ngesekhondi.
Umahluko kwiziphumo uchazwa yinyaniso yokuba i-NCS yayiqhuba i-Mobile SSD version 2018_01_28.
P.S. Ukongeza, iimvavanyo zibonise ukuba umatshini wedesktop onamandla ngokufanelekileyo oneprosesa ye-I7 ubonisa iziphumo ezingcono kancinci kwaye kuye kwenzeka ukuba ucinezele iifreyimu ezili-10 ngomzuzwana.
Iqela
Uvavanyo luye lwaya phambili kwaye ndafaka umtshina kwiindawo ezintlanu zikaGoogle Kubernetes.
Iipods ngokwazo zazibuthathaka kwaye ngamnye kubo wayengenakukwazi ukucubungula ngaphezu kweefreyimu ezi-2 ngomzuzwana.
Kodwa ukuba uqhuba iqela elinamaqhuqhuva e-N kwaye ucazulule izakhelo kwimisonto engu-N, emva koko ngenani elaneleyo leenodi (5) ungafezekisa iifreyimu ezili-10 ezifunwayo 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
Nantsi into eyenzekayo:
Ukukhawuleza okuncinci kune-NCS, kodwa yomelele ngakumbi kunomlambo omnye.
Inzuzo, ngokuqinisekileyo, ayikho imigca - kukho ukugqithiswa kongqamaniso kunye nokukopa okunzulu kwemifanekiso ye-opencv.
isiphelo
Ngokubanzi, uvavanyo lusivumela ukuba sigqibe kwelokuba ukuba uyazama, ungabaleka ngelifu elilula.
Kodwa i-desktop enamandla okanye i-hardware yendawo ikuvumela ukuba ufezekise iziphumo ezingcono, kwaye ngaphandle kwamaqhinga.
iimbekiselo
umthombo: www.habr.com