Prologue
Tha bhidio a-nis a ’cuairteachadh air an eadar-lìn a’ sealltainn mar a tha autopilot Tesla a ’faicinn an rathad.
Tha mi air a bhith tachais airson ùine mhòr a bhith a’ craoladh bhidio beairteach le lorgaire, agus ann an àm fìor.
Is e an duilgheadas a th’ ann gu bheil mi airson bhidio a chraoladh bho Raspberry, agus tha coileanadh an lorgaire lìonra neural air a’ fàgail mòran ri bhith air a mhiannachadh.
Bata coimpiutair Intel neural
Bheachdaich mi air fuasglaidhean eadar-dhealaichte.
В
Eadhon ged a tha Intel a’ toirt seachad luchd-tionndaidh airson prìomh fhrèaman, tha grunn chnapan-starra ann.
Mar eisimpleir, is dòcha nach bi cruth an lìonraidh a tha a dhìth co-chòrdail, agus ma tha e co-chòrdail, is dòcha nach bi cuid de shreathan a ’faighinn taic air an inneal, agus ma tha iad a’ faighinn taic, faodaidh mearachdan tachairt tron phròiseas tionndaidh, agus mar thoradh air an sin gheibh sinn rudan neònach aig an toradh.
San fharsaingeachd, ma tha thu ag iarraidh seòrsa de lìonra neoral neo-riaghailteach, is dòcha nach obraich e le NCS. Mar sin, cho-dhùin mi feuchainn ris an duilgheadas fhuasgladh le bhith a’ cleachdadh na h-innealan as fharsainge agus ruigsinneach.
Sgòthan geala
Is e an roghainn eile a tha follaiseach an àite fuasgladh bathar-cruaidh ionadail a dhol chun sgòth.
Roghainnean deiseil - tha mo shùilean a 'ruith fiadhaich.
Ceannardan uile:
... Agus dusanan de dhaoine nach eil cho aithnichte.
Chan eil e furasta a bhith a 'taghadh am measg a' mheasgachadh seo idir.
Agus chuir mi romham gun a bhith a’ taghadh, ach an seann sgeama obrach math a phasgadh air OpenCV ann an Docker agus a ruith san sgòth.
Is e buannachd an dòigh-obrach seo sùbailteachd agus smachd - faodaidh tu an lìonra neural, aoigheachd, frithealaiche atharrachadh - san fharsaingeachd, whim sam bith.
Freiceadan
Feuch an tòisich sinn le prototype ionadail.
Gu traidiseanta bidh mi a’ cleachdadh Flask airson lìonra REST API, OpenCV agus MobileSSD.
An dèidh na dreachan gnàthach a chuir a-steach air Docker, fhuair mi a-mach nach eil OpenCV 4.1.2 ag obair le Mobile SSD v1_coco_2018_01_28, agus bha agam ri gluasad air ais chun 11/06_2017 dearbhte.
Aig toiseach na seirbheis, bidh sinn a’ luchdachadh ainmean nan clasaichean agus an lìonra:
def init():
tf_labels.initLabels(dnn_conf.DNN_LABELS_PATH)
return cv.dnn.readNetFromTensorflow(dnn_conf.DNN_PATH, dnn_conf.DNN_TXT_PATH)
Air docker ionadail (air laptop nach eil glè òg) bheir e 0.3 diogan, air Raspberry - 3.5.
Feuch an tòisich sinn air an àireamhachadh:
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 diog, sùbh-craoibhe - 1.7.
A’ tionndadh inneal tensor gu json a ghabhas leughadh:
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
Nas fhaide
Roghainn eile, anns a bheil barrachd obrach air a ghluasad chun an fhrithealaiche: bidh e fhèin a 'cuairteachadh nan nithean a chaidh a lorg agus a' tilleadh an ìomhaigh chrìochnaichte.
Tha an roghainn seo math far nach eil sinn airson opencv a shlaodadh chun an fhrithealaiche.
Docair
Bidh sinn a 'tional an ìomhaigh.
Tha an còd air a chìreadh agus air a phostadh air
Mar àrd-ùrlar, gabhaidh sinn an aon Debian Stretch agus a tha air Raspberry - cha bhith sinn a’ falbh bhon chruach tech dearbhte.
Feumaidh tu flasg, protobuf, iarrtasan, opencv_python, luchdachadh sìos Mobile SSD, còd frithealaiche bho Github agus tòiseachadh air an fhrithealaiche.
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"]
Simplí
Foillseachadh gu Docker Hub
Tha clàran docker ag iomadachadh aig astar nach eil nas lugha na lorgairean sgòthan.
Gus nach cuir sinn dragh oirnn, thèid sinn troimhe gu glèidhidh
- Clàr
- Log a-steach:
logadh a-steach docker - Thig sinn suas le ainm ciallach:
tag docker opencv-lorg tprlab/opencv-detect-ssd - Luchdaich suas an dealbh chun an fhrithealaiche:
putadh docker tprlab/opencv-detect-ssd
Bidh sinn a 'cur air bhog san sgòth
Tha an roghainn càite an ruith an soitheach cuideachd gu math farsaing.
Bidh na cluicheadairean mòra uile (Google, Microsoft, Amazon) a’ tabhann meanbh-aithris an-asgaidh airson a’ chiad bhliadhna.
Às deidh dhomh feuchainn le Microsoft Azure agus Google Cloud, shocraich mi air an fhear mu dheireadh oir dh’ fhalbh e nas luaithe.
Cha do sgrìobh mi stiùireadh an seo, leis gu bheil am pàirt seo gu math sònraichte don t-solaraiche taghte.
Dh'fheuch mi diofar roghainnean bathar-cruaidh,
Ìrean ìosal (co-roinnte agus coisrigte) - 0.4 - 0.5 diogan.
Càraichean nas cumhachdaiche - 0.25 - 0.3.
Uill, eadhon anns an t-suidheachadh as miosa, tha na buannachdan trì tursan, faodaidh tu feuchainn.
Видео
Bidh sinn a’ cur air bhog sruthan bhidio OpenCV sìmplidh air Raspberry, a’ lorg tro Google Cloud.
Airson an deuchainn, chaidh faidhle bhidio a chleachdadh a chaidh fhilmeadh uaireigin aig crois-rathaid air thuaiream.
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")
Leis an lorgaire chan fhaigh sinn barrachd air trì frèamaichean san diog, bidh a h-uile càil a’ dol gu math slaodach.
Ma bheir thu inneal cumhachdach a-steach do GCloud, lorgaidh tu 4-5 frèamaichean gach diog, ach cha mhòr nach eil an eadar-dhealachadh ri fhaicinn don t-sùil, tha e fhathast slaodach.
Chan eil gnothach aig an sgòth agus cosgaisean còmhdhail ris; bidh an lorgaire a’ ruith air bathar-cruaidh àbhaisteach agus ag obair aig astar cho luath.
Bata coimpiutair neural
Cha b’ urrainn dhomh seasamh an aghaidh agus ruith an slat-tomhais air NCS.
Bha astar an lorgaire beagan nas slaodaiche na 0.1 diogan, co-dhiù 2-3 tursan nas luaithe na an sgòth air inneal lag, ie 8-9 frèamaichean san diog.
Tha an eadar-dhealachadh ann an toraidhean air a mhìneachadh leis gu robh NCS a’ ruith dreach Mobile SSD 2018_01_28.
P.S. A bharrachd air an sin, tha deuchainnean air sealltainn gu bheil inneal deasg gu math cumhachdach le pròiseasar I7 a ’nochdadh toraidhean beagan nas fheàrr agus thionndaidh e a-mach gu robh e comasach frèamaichean 10 gach diog a bhrùthadh.
Braisle
Chaidh an deuchainn nas fhaide agus chuir mi a-steach an lorgaire air còig nodan ann an Google Kubernetes.
Bha na pods fhèin lag agus cha b 'urrainn do gach fear dhiubh barrachd air 2 frèamaichean gach diog a phròiseasadh.
Ach ma ruitheas tu cruinneachadh le nodan N agus frèaman parse ann an snàithleanan N, an uairsin le àireamh gu leòr de nodan (5) faodaidh tu na 10 frèamaichean a tha thu ag iarraidh gach diog a choileanadh.
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
Seo na thachair:
Beagan nas luaithe na le NCS, ach nas làidire na ann an aon sruth.
Chan eil am buannachd, gu dearbh, sreathach - tha ath-chòmhdach ann airson sioncronadh agus leth-bhreac domhainn de dhealbhan opencv.
co-dhùnadh
Gu h-iomlan, leigidh an deuchainn leinn co-dhùnadh ma dh'fheuchas tu, faodaidh tu faighinn air falbh le sgòth sìmplidh.
Ach leigidh deasg cumhachdach no bathar-cruaidh ionadail dhut toraidhean nas fheàrr fhaighinn, agus às aonais cleasan sam bith.
iomraidhean
Source: www.habr.com