Fiidiyowga Shayga Cloud Detector ee Raspberry Pi

Hordhac

Fiidiyow ayaa hadda ku wareegaya internetka oo muujinaya sida autopilot Tesla uu u arko wadada.

Muddo dheer ayaan cuncunayay si aan u baahiyo fiidiyoow lagu kobciyo qalabka wax sheegta, iyo wakhtiga dhabta ah.

Fiidiyowga Shayga Cloud Detector ee Raspberry Pi

Dhibaatadu waxay tahay in aan rabo in aan ka sii daayo fiidiyowga Raspberry, iyo waxqabadka shebekadaha neerfaha ee ku yaala wuxuu ka tagayaa wax badan oo la rabo.

Intel Neural Computer Stick

Waxaan tixgeliyey xalal kala duwan.

Π’ maqaalkii ugu dambeeyay wuxuu tijaabiyay Intel Neural Computer Stick. Qalabku waa xoog badan yahay, laakiin wuxuu u baahan yahay qaab shabakad u gaar ah.

In kasta oo Intel ay bixiso beddelayaasha qaab-dhismeedka waaweyn, haddana waxaa jira dhowr dariiqo.

Tusaale ahaan, qaabka shabakadda loo baahan yahay waxay noqon kartaa mid aan ku habboonayn, haddii ay ku habboon tahay, markaa lakabyada qaarkood ayaa laga yaabaa inaan lagu taageerin qalabka, iyo haddii la taageerayo, markaa khaladaad ayaa dhici kara inta lagu jiro habka beddelka, taas oo ka dhalatay Waxaan ka helnaa waxyaabo yaab leh marka la soo saaro.

Guud ahaan, haddii aad rabto nooc ka mid ah shabakada neerfaha ee aan sabab lahayn, markaa waxaa laga yaabaa inaanay la shaqayn NCS. Sidaa darteed, waxaan go'aansaday in aan isku dayo in aan xalliyo dhibaatada aniga oo isticmaalaya qalabka ugu baahsan oo la heli karo.

Daruuro

Beddelka muuqda ee xalka qalabka deegaanka waa in la aado daruuraha.

Ikhtiyaarada diyaarka ah - indhaheygu way ordaan.

Dhammaan madaxda:

... Iyo daraasiin ka yar oo la yaqaan.

Doorashada noocyadan kala duwan haba yaraatee ma fududa.

Oo waxaan go'aansaday inaanan dooran, laakiin inaan ku duubo nidaamkii hore ee shaqada ee wanaagsanaa ee OpenCV ee Docker oo aan ku socodsiiyo daruuraha.

Faa'iidada habkani waa dabacsanaan iyo xakameyn - waxaad bedeli kartaa shabakada neerfaha, martigelinta, server - guud ahaan, wax kasta oo rabitaan ah.

Server

Aan ku bilowno prototype maxali ah.

Dhaqan ahaan waxaan u isticmaalaa Flask REST API, OpenCV iyo MobileSSD network.

Markii aan ku rakibay noocyada hadda jira Docker, waxaan ogaaday in OpenCV 4.1.2 aanu la shaqayn Mobile SSD v1_coco_2018_01_28, waxaana ku khasbanaaday inaan dib ugu laabto 11/06_2017.

Bilawga adeegga, waxaanu ku shubnaa magacyada fasalka iyo shabakada:

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

Kumbuyuutar maxalli ah (laptop aan aad u da'yarayn) waxay qaadataa 0.3 sekan, Raspberry - 3.5.

Aan bilowno xisaabinta:

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

U beddelashada qiiqa tensor-ka json la akhriyi karo:

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

Ka sii fog ku dhoofinta hawshan iyada oo loo sii marayo Flask(Input is a picture, output is the results of detector in json).

Ikhtiyaar kale, kaas oo shaqo badan loo wareejiyo serverka: lafteedu waxay wareegtaa walxaha la helay oo soo celisa sawirka dhammeeyey.

Doorashadani way fiican tahay halka aynaan doonayn inaan opencv u jiido seerfarka.

Docker

Waxaan aruurineynaa sawirka.

Koodhka waa la shanley oo lagu dhejiyay Github, docker ayaa si toos ah uga qaadi doona halkaas.

Madal ahaan, waxaanu qaadan doonaa isla Debian Stretch sida Raspberry - kama leexan doono xidhmada tignoolajiyada ee la xaqiijiyay.

Waxaad u baahan tahay inaad ku rakibto flask, protobuf, codsiyada, opencv_python, ka soo dejiso Mobile SSD, code server ka Github oo bilaw serverka.

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

Profstoy macmiilka baaraha ku salaysan codsiyo.

Daabacaadda Docker Hub

Diiwaanada dockers waxay ku dhuftaan xawaare aan ka yarayn qalabka wax sheegta daruuraha.

Si aynaan u dhibin, si muxaafid ah ayaanu u mari doonaa DockerHub.

  1. Is diwaangeli
  2. Soo gal:
    docker login
  3. Aan la nimaadno magac macno leh:
    docker tag opencv-detect tprlab/opencv-detect-ssd
  4. U soo rar sawirka seerfarka:
    docker riix tprlab/opencv-detect-ssd

Waxaan ku duulnaa daruurta

Doorashada meesha weelka lagu shubayo ayaa sidoo kale aad u ballaaran.

Dhammaan ciyaartoyda waaweyn (Google, Microsoft, Amazon) waxay bixiyaan tusaale-yar oo bilaash ah sanadka ugu horreeya.
Ka dib markii aan tijaabiyey Microsoft Azure iyo Google Cloud, waxaan degay kan dambe sababtoo ah si dhakhso ah ayey u qaadatay.

Ma aanan ku qorin tilmaamo halkan, maadaama qaybtan ay aad u gaar tahay bixiyaha la doortay.

Waxaan isku dayay xulashooyin qalab kala duwan,
Heerarka hoose (la wadaago iyo go'an) - 0.4 - 0.5 ilbiriqsi.
Baabuur ka xoog badan - 0.25 - 0.3.
Hagaag, xitaa xaalada ugu xun, guushu waa saddex jeer, waxaad isku dayi kartaa.

Video

Waxaan bilownay fiidiyaha furan ee furan ee Raspberry, oo lagu ogaanayo Google Cloud.
Tijaabada, feyl fiidiyoow ah ayaa la isticmaalay oo mar lagu duubay isgoys aan toos ahayn.


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

Qalabka wax sheegta waxa aanu helaynaa wax aan ka badnayn saddex fareemood ilbiriqsikii, wax waliba si tartiib tartiib ah ayey u socdaan.
Haddii aad mashiin xoog leh u qaadato GCloud, waxaad ogaan kartaa 4-5 fiim ilbiriqsikii, laakiin kala duwanaanshuhu waa mid aan indhaha laga arki karin, wali waa gaabis.

Fiidiyowga Shayga Cloud Detector ee Raspberry Pi

Daruuraha iyo kharashaadka gaadiidku wax shaqo ah kuma laha, qalabka wax baadha waxa uu ku shaqeeyaa qalab caadi ah waxana uu ku shaqeeyaa xawaare intaa le’eg.

Usha Kumbiyuutarka Neural

Ma adkeysan karin oo waxaan ku ordayay bartilmaameedka NCS.

Xawaaraha qalabka wax baadha waxa uu ka yara yara gaabiyey 0.1 ilbiriqsi, si kastaba 2-3 jeer ayuu ka dheereeyaa daruurta mishiinka daciifka ah, tusaale ahaan 8-9 fiim ilbiriqsikii.

Fiidiyowga Shayga Cloud Detector ee Raspberry Pi

Farqiga natiijooyinka waxaa lagu sharaxay xaqiiqda ah in NCS ay waday nooca Mobile SSD 2018_01_28.

PS Intaa waxaa dheer, tijaabooyinku waxay muujiyeen in mashiinka desktop-ka si caddaalad ah u awood badan oo leh processor-ka I7 uu muujinayo natiijooyin waxyar ka wanaagsan waxayna u muuqatay inay suurtagal tahay in lagu tuujiyo 10 fareemo ilbiriqsi kasta.

Kooxda

Tijaabadu way sii socotay, waxaanan ku rakibay qalabka wax baadha shan nodes gudaha Google Kubernetes.
Qaybaha laftoodu way daciifeen mid walbana ma farsamayn karo wax ka badan 2 fareemood ilbiriqsikii.
Laakin haddii aad ku shaqeysid cluster leh N nodes oo aad ku kala saartid xargaha N, ka dib tiro kugu filan oo nood ah (5) waxaad ku gaari kartaa 10 xaraf oo la rabo ilbiriqsi kasta.

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

Waa kan waxa dhacay:

Fiidiyowga Shayga Cloud Detector ee Raspberry Pi

In yar oo ka dhaqso yar kan NCS, laakiin ka xoog badan hal durdur.

Faa'iidada, dabcan, maaha mid toosan - waxaa jira dulsaaryo isku-dubbarid iyo koobiyeyn qoto dheer oo sawirro opencv ah.

gunaanad

Guud ahaan, tijaabadu waxay noo ogolaanaysaa inaan ku soo gabagabeyno in haddii aad isku daydo, aad ka bixi karto daruur fudud.

Laakin kombuyuutar awood leh ama qalab maxalli ah ayaa kuu ogolaanaya inaad gaarto natiijooyin wanaagsan, oo aan lahayn wax khiyaamo ah.

tixraacyada

Source: www.habr.com

Add a comment