Bhidio de Lorgaire Rud Cloud air Raspberry Pi

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.

Bhidio de Lorgaire Rud Cloud air Raspberry Pi

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.

В an artaigil mu dheireadh deuchainn le Intel Neural Computer Stick. Tha am bathar-cruaidh cumhachdach, ach tha feum air a chruth lìonra fhèin.

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 às-mhalairt seo tro Flask(is e dealbh a th’ ann an cuir a-steach, is e toradh toraidhean an lorgaire ann an json).

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 Github, bheir docker e gu dìreach às an sin.

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í neach-dèiligidh lorgaire stèidhichte air iarrtasan.

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 DockerHub.

  1. Clàr
  2. Log a-steach:
    logadh a-steach docker
  3. Thig sinn suas le ainm ciallach:
    tag docker opencv-lorg tprlab/opencv-detect-ssd
  4. 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.

Bhidio de Lorgaire Rud Cloud air Raspberry Pi

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.

Bhidio de Lorgaire Rud Cloud air Raspberry Pi

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:

Bhidio de Lorgaire Rud Cloud air Raspberry Pi

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

Cuir beachd ann