Lahatsary momba ny Cloud Object Detector amin'ny Raspberry Pi

Sasin-teny

Misy horonan-tsary mandehandeha amin'ny Internet izao mampiseho ny fomba fijerin'ny autopilot an'i Tesla ny lalana.

Efa ela aho no nangidihidy handefa horonan-tsarimihetsika miaraka amin'ny mpitsikilo, ary amin'ny fotoana tena izy.

Lahatsary momba ny Cloud Object Detector amin'ny Raspberry Pi

Ny olana dia te handefa horonantsary avy amin'ny Raspberry aho, ary ny fahombiazan'ny mpitsikilo tambajotra neural eo aminy dia mamela be dia be.

Intel Neural Computer Stick

Nihevitra vahaolana samihafa aho.

Π’ lahatsoratra farany nanandrana tamin'ny Intel Neural Computer Stick. Mahery ny fitaovana, saingy mila endrika tambajotra manokana.

Na dia manome converters ho an'ny rafitra lehibe aza i Intel, dia misy fandrika maromaro.

Ohatra, ny endriky ny tambajotra ilaina dia mety tsy mifanaraka, ary raha mifanaraka izany, dia mety tsy ho tohanana amin'ny fitaovana ny sosona sasany, ary raha tohanana izy ireo, dia mety hitranga ny fahadisoana mandritra ny fizotran'ny fiovam-po, vokatr'izany. mahazo zavatra hafahafa isika amin'ny vokatra.

Amin'ny ankapobeny, raha mila karazana tambajotra neural tsy misy dikany ianao, dia mety tsy hiasa amin'ny NCS izany. Noho izany, nanapa-kevitra aho fa hiezaka hamaha ny olana amin'ny fampiasana fitaovana miparitaka sy azo idirana indrindra.

rahona

Ny safidy mazava kokoa amin'ny vahaolana amin'ny fitaovana eo an-toerana dia ny mankany amin'ny rahona.

Safidy efa vita - ny masoko dia mihazakazaka.

Ny mpitarika rehetra:

... Ary am-polony maro tsy dia fantatra loatra.

Tsy mora mihitsy ny misafidy amin'ireo karazany ireo.

Ary nanapa-kevitra ny tsy hisafidy aho, fa hametaka ny rafitra miasa tsara taloha amin'ny OpenCV ao Docker ary hampandeha azy ao amin'ny rahona.

Ny tombony amin'ity fomba ity dia ny fahaiza-manao sy ny fanaraha-maso - azonao atao ny manova ny tambajotra neural, fampiantranoana, mpizara - amin'ny ankapobeny, na inona na inona.

mpizara

Andeha isika hanomboka amin'ny prototype eo an-toerana.

Amin'ny ankapobeny dia mampiasa Flask aho ho an'ny REST API, OpenCV ary tambajotra MobileSSD.

Rehefa nametraka ny dikan-teny amin'izao fotoana izao amin'ny Docker aho, dia hitako fa ny OpenCV 4.1.2 dia tsy miasa amin'ny Mobile SSD v1_coco_2018_01_28, ary tsy maintsy niverina tany amin'ny voaporofo 11/06_2017 aho.

Amin'ny fanombohan'ny serivisy dia mameno ny anaran'ny kilasy sy ny tambajotra izahay:

def init():
    tf_labels.initLabels(dnn_conf.DNN_LABELS_PATH)
    return cv.dnn.readNetFromTensorflow(dnn_conf.DNN_PATH, dnn_conf.DNN_TXT_PATH)

Amin'ny docker eo an-toerana (amin'ny solosaina finday tsy dia tanora loatra) dia mila 0.3 segondra, amin'ny Raspberry - 3.5.

Andao hanomboka ny kajy:

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 seg, Raspberry - 1.7.

Manova ny setroka tensor ho json azo vakiana:

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

bebe kokoa manondrana ity asa ity amin'ny alΓ lan'ny Flask(sary ny fampidirana, ny vokatra dia vokatry ny mpitsikilo ao amin'ny json).

Safidy hafa, izay afindra any amin'ny mpizara ny asa bebe kokoa: izy io mihitsy no manodina ireo zavatra hita ary mamerina ny sary vita.

Ity safidy ity dia tsara raha tsy tiantsika ny hisintona opencv mankany amin'ny mpizara.

Docker

Manangona ny sary izahay.

Ny kaody dia mibontsina ary apetraka eo Github, Docker dia haka azy mivantana avy eo.

Amin'ny maha-sehatra azy dia haka ny Debian Stretch mitovy amin'ny amin'ny Raspberry izahay - tsy hivily amin'ny stack teknolojia voaporofo izahay.

Mila mametraka tavoara, protobuf, fangatahana, opencv_python, misintona Mobile SSD, kaody mpizara avy amin'ny Github ary manomboka ny mpizara.

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"]

tsotra mpanjifa mpitsikilo mifototra amin'ny fangatahana.

Famoahana amin'ny Docker Hub

Ny rejistra Docker dia mihamaro amin'ny hafainganam-pandeha tsy latsaky ny mpitsikilo rahona.

Mba tsy hanahirana dia handeha amin'ny fomba nentim-paharazana izahay DockerHub.

  1. hisoratra anarana
  2. Hiditra:
    fidirana docker
  3. Andeha isika hamorona anarana misy dikany:
    docker tag opencv-detect tprlab/opencv-detect-ssd
  4. Alefaso any amin'ny mpizara ny sary:
    docker manosika tprlab/opencv-detect-ssd

Manomboka amin'ny rahona izahay

Malalaka ihany koa ny safidy amin'ny toerana hampandehanana ny kaontenera.

Ny mpilalao lehibe rehetra (Google, Microsoft, Amazon) dia manolotra micro-instance maimaim-poana mandritra ny taona voalohany.
Taorian'ny nanandramako tamin'ny Microsoft Azure sy Google Cloud, dia nanorim-ponenana tamin'ny farany aho satria nandeha haingana kokoa.

Tsy nanoratra toromarika teto aho, satria ity ampahany ity dia tena manokana ho an'ny mpamatsy voafantina.

Nanandrana safidy hardware samihafa aho,
Ambaratonga ambany (mizara sy voatokana) - 0.4 - 0.5 segondra.
Fiara matanjaka kokoa - 0.25 - 0.3.
Eny, na dia amin'ny tranga ratsy indrindra aza, ny fandresena dia in-telo, azonao atao ny manandrana.

Π’ΠΈΠ΄Π΅ΠΎ

Manangana horonan-tsarimihetsika OpenCV tsotra amin'ny Raspberry izahay, mamantatra amin'ny alΓ lan'ny Google Cloud.
Ho an'ny fanandramana dia nisy rakitra video iray izay nalaina sary teo amin'ny fihaonan-dalana kisendrasendra.


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")

Miaraka amin'ny detector dia tsy mahazo mihoatra ny telo isan-tsegondra isika, mandeha miadana ny zava-drehetra.
Raha maka milina matanjaka ao amin'ny GCloud ianao dia afaka mahita sary 4-5 isan-tsegondra, saingy saika tsy hitan'ny maso ny fahasamihafana, mbola miadana.

Lahatsary momba ny Cloud Object Detector amin'ny Raspberry Pi

Ny rahona sy ny saran'ny fitaterana dia tsy misy ifandraisany amin'izany; ny mpitsikilo dia mandeha amin'ny fitaovana mahazatra ary miasa amin'ny hafainganam-pandeha toy izany.

Neural Computer Stick

Tsy afaka nanohitra aho ary nihazakazaka ny benchmark tamin'ny NCS.

Ny hafainganam-pandehan'ny detector dia somary miadana kokoa noho ny 0.1 segondra, na ahoana na ahoana 2-3 heny haingana noho ny rahona amin'ny milina malemy, izany hoe 8-9 frames isan-tsegondra.

Lahatsary momba ny Cloud Object Detector amin'ny Raspberry Pi

Ny fahasamihafan'ny valiny dia hazavaina amin'ny hoe NCS dia nihazakazaka Mobile SSD version 2018_01_28.

PS Ho fanampin'izany, ny andrana dia naneho fa ny milina desktop mahery vaika miaraka amin'ny processeur I7 dia mampiseho vokatra tsara kokoa ary hita fa azo atao ny manindry sary 10 isan-tsegondra eo aminy.

sampahom-boaloboka

Nandeha lavidavitra kokoa ny andrana ary nametraka ilay mpitsikilo tamin'ny node dimy tao amin'ny Google Kubernetes aho.
Ny pods dia malemy ary ny tsirairay amin'izy ireo dia tsy afaka manodina mihoatra ny 2 frame isan-tsegondra.
Fa raha mitantana kluster misy N nodes ianao ary manara-maso ny frame amin'ny kofehy N, dia afaka mahatratra ny frame 5 isan-tsegondra ianao miaraka amin'ny isa ampy (10).

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

Izao no nitranga:

Lahatsary momba ny Cloud Object Detector amin'ny Raspberry Pi

Kely haingana kokoa noho ny NCS, fa mahery kokoa noho ny amin'ny renirano iray.

Ny tombony, mazava ho azy, dia tsy linear - misy overlay ho an'ny synchronization sy fakana sary lalina ny opencv sary.

famaranana

Amin'ny ankapobeny, ny fanandramana dia mamela antsika hanatsoaka hevitra fa raha manandrana ianao dia afaka miala amin'ny rahona tsotra.

Saingy ny birao matanjaka na fitaovana eo an-toerana dia ahafahanao mahazo vokatra tsara kokoa, ary tsy misy fitaka.

soratra masina

Source: www.habr.com

Add a comment