Bidiyo na Mai gano Abun Cloud akan Rasberi Pi

Gabatarwa

Wani faifan bidiyo yana yawo a Intanet yanzu yana nuna yadda matukin jirgin Tesla ke ganin hanya.

Na dade ina yin ƙaiƙayi don watsa bidiyon da aka wadatar da na'urar ganowa, kuma a ainihin lokacin.

Bidiyo na Mai gano Abun Cloud akan Rasberi Pi

Matsalar ita ce ina so in watsa bidiyo daga Rasberi, kuma aikin mai gano hanyar sadarwa na jijiyoyi akan shi ya bar abin da ake so.

Intel Neural Computer Stick

Na yi la'akari daban-daban mafita.

В labarin karshe An yi gwaji da Intel Neural Computer Stick. Kayan aikin yana da ƙarfi, amma yana buƙatar tsarin hanyar sadarwar sa.

Ko da yake Intel yana ba da masu canzawa don manyan tsare-tsare, akwai matsaloli masu yawa.

Misali tsarin hanyar sadarwar da ake bukata na iya zama da rashin jituwa, idan kuma ta dace, to, wasu yadudduka ba za a iya tallafawa a kan na'urar ba, idan kuma an goyi bayansu, to za a iya samun kurakurai a lokacin da ake canja wurin, sakamakon haka. muna samun wasu ban mamaki abubuwa a fitarwa.

Gabaɗaya, idan kuna son wani nau'in hanyar sadarwa na jijiyoyi na sabani, to yana iya yin aiki tare da NCS. Sabili da haka, na yanke shawarar ƙoƙarin magance matsalar ta amfani da mafi yadu da kayan aiki masu sauƙi.

Girgije

Madaidaicin madadin mafita na kayan aikin gida shine zuwa ga gajimare.

Zaɓuɓɓukan da aka shirya - idanuwana suna gudu.

Duk shugabanni:

... Da kuma wasu da dama da ba a san su ba.

Zaba tsakanin wannan iri-iri ba abu ne mai sauƙi ko kaɗan ba.

Kuma na yanke shawarar kada in zaɓi, amma don kunsa kyakkyawan tsarin aiki na zamani akan OpenCV a Docker kuma in gudanar da shi a cikin gajimare.

Amfanin wannan tsarin shine sassauci da sarrafawa - zaka iya canza hanyar sadarwa na jijiyoyi, hosting, uwar garke - gaba ɗaya, kowane sha'awa.

Server

Bari mu fara da samfurin gida.

A al'ada ina amfani da Flask don REST API, OpenCV da MobileSSD cibiyar sadarwa.

Bayan shigar da nau'ikan na yanzu akan Docker, na gano cewa OpenCV 4.1.2 baya aiki tare da Wayar hannu SSD v1_coco_2018_01_28, kuma dole ne in sake komawa zuwa tabbataccen 11/06_2017.

A farkon sabis ɗin, muna loda sunayen ajin da cibiyar sadarwa:

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

A kan docker na gida (a kan kwamfutar tafi-da-gidanka ba matashi ba) yana ɗaukar 0.3 seconds, akan Rasberi - 3.5.

Bari mu fara lissafin:

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 seconds, Rasberi - 1.7.

Juya shayarwar tensor zuwa json mai karantawa:

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

Nisa fitar da wannan aiki ta hanyar Flask(shigarwar hoto ne, fitarwa shine sakamakon ganowa a json).

Wani zaɓi, wanda a cikinsa ake ƙara ƙarin aiki zuwa uwar garken: shi da kansa yana kewaya abubuwan da aka samo kuma ya dawo da hoton da aka gama.

Wannan zaɓin yana da kyau inda ba ma son ja opencv zuwa uwar garken.

Docker

Muna tattara hoton.

Ana tsefe lambar kuma an buga shi Github, docker zai dauke shi kai tsaye daga can.

A matsayin dandali, za mu ɗauki Debian Stretch iri ɗaya kamar akan Rasberi - ba za mu rabu da ingantattun tarin fasaha ba.

Kuna buƙatar shigar da flask, protobuf, buƙatun, opencv_python, zazzage Mobile SSD, lambar uwar garken daga Github kuma fara sabar.

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

M abokin aikin ganowa bisa buƙatun.

Bugawa zuwa Docker Hub

Rijistar Docker suna haɓaka cikin sauri da bai gaza na gano gajimare ba.

Don kada mu damu, za mu ci gaba da ra'ayin mazan jiya DockerHub.

  1. Yi rijista
  2. Shiga:
    docker login
  3. Mu fito da suna mai ma'ana:
    docker tag opencv-detect tprlab/opencv-detect-ssd
  4. Loda hoton zuwa uwar garken:
    docker tura tprlab/opencv-detect-ssd

Mun kaddamar a cikin gajimare

Zaɓin inda za a gudanar da kwandon kuma yana da faɗi sosai.

Duk manyan 'yan wasa (Google, Microsoft, Amazon) suna ba da ƙaramin misali kyauta a cikin shekara ta farko.
Bayan gwaji tare da Microsoft Azure da Google Cloud, na zauna a kan karshen saboda ya tashi da sauri.

Ban rubuta umarni a nan ba, tunda wannan ɓangaren ya keɓanta da wanda aka zaɓa.

Na gwada zaɓuɓɓukan hardware daban-daban,
Ƙananan matakan (raba da sadaukarwa) - 0.4 - 0.5 seconds.
Motoci masu ƙarfi - 0.25 - 0.3.
To, ko da a cikin mafi munin yanayi, cin nasara sau uku ne, zaka iya gwadawa.

Video

Mun ƙaddamar da sauƙi mai sauƙi na OpenCV akan Rasberi, ganowa ta Google Cloud.
Don gwajin, an yi amfani da fayil ɗin bidiyo wanda aka taɓa yin fim ɗin a wata mahadar bazuwar.


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

Tare da ganowa ba mu sami fiye da firam uku a sakan daya ba, komai yana tafiya a hankali.
Idan ka ɗauki na'ura mai ƙarfi cikin GCloud, za ka iya gano firam 4-5 a cikin daƙiƙa guda, amma bambancin kusan ba zai iya gani ga ido ba, har yanzu yana jinkiri.

Bidiyo na Mai gano Abun Cloud akan Rasberi Pi

Gajimare da farashin sufuri ba su da alaƙa da shi; mai ganowa yana aiki akan kayan aiki na yau da kullun kuma yana aiki da irin wannan saurin.

Kwamfuta Neural Stick

Ba zan iya yin tsayayya ba kuma na gudanar da maƙasudin akan NCS.

Gudun na'urar ganowa ya ɗan yi hankali fiye da daƙiƙa 0.1, a kowane hali sau 2-3 cikin sauri fiye da gajimare akan na'ura mai rauni, watau firam 8-9 a sakan daya.

Bidiyo na Mai gano Abun Cloud akan Rasberi Pi

An bayyana bambancin sakamako ta gaskiyar cewa NCS tana gudanar da sigar SSD ta Wayar hannu 2018_01_28.

PS Bugu da kari, gwaje-gwajen sun nuna cewa ingantacciyar injin tebur mai ƙarfi tare da na'ura mai sarrafa I7 tana nuna kyakkyawan sakamako kaɗan kuma ya zama mai yiwuwa a matse firam 10 a sakan daya akan sa.

Gungu

Gwajin ya ci gaba kuma na shigar da mai ganowa akan nodes biyar a cikin Google Kubernetes.
Kwayoyin da kansu sun yi rauni kuma kowannensu ba zai iya aiwatar da fiye da firam 2 a sakan daya ba.
Amma idan kuna gudanar da gungu tare da nodes N kuma kuna rarraba firam a cikin zaren N, to tare da isassun adadin nodes (5) zaku iya cimma firam 10 da ake so a cikin daƙiƙa guda.

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

Ga abin da ya faru:

Bidiyo na Mai gano Abun Cloud akan Rasberi Pi

Kadan kaɗan da sauri fiye da na NCS, amma mafi kuzari fiye da rafi ɗaya.

Ribar, ba shakka, ba ta layi ba ce - akwai overlays don aiki tare da zurfafa kwafin hotunan opencv.

ƙarshe

Gabaɗaya, gwajin yana ba mu damar kammala cewa idan kun gwada, zaku iya tserewa tare da girgije mai sauƙi.

Amma tebur mai ƙarfi ko kayan aiki na gida yana ba ku damar cimma sakamako mafi kyau, kuma ba tare da wata dabara ba.

nassoshi

source: www.habr.com

Add a comment