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.
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.
В
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
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
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
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
- Resitala
- Ulufale mai:
saini a le au fai fale - Sei o tatou maua se igoa anoa:
docker tag opencv-tetetee tprlab/opencv-detect-ssd - 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.
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.
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:
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