Ataata o te Kaipupuri Ahanoa Kapua i runga i te Raspberry Pi

Prologue

Kei te huri haere tetahi ataata i runga i te Ipurangi e whakaatu ana me pehea te kite a te autopilot a Tesla i te huarahi.

Kua roa ahau e hikaka ana ki te whakapaoho i te riipene whakaata kua whakarangatirahia me te kaitahuri, me te waa tonu.

Ataata o te Kaipupuri Ahanoa Kapua i runga i te Raspberry Pi

Ko te raru ko te hiahia ahau ki te haapurorohia te ataata mai i te Raspberry, a ko te mahi a te kaitoi whatunga neural kei runga ka nui te hiahia.

Rakau Rorohiko Intel Neural

I whakaarohia e ahau etahi otinga rereke.

В Tuhinga whakamutunga i whakamatauria me Intel Neural Computer Stick. He kaha te taputapu, engari me hiahia tana ake whakatakotoranga whatunga.

Ahakoa e whakarato ana a Intel i nga kaitahuri mo nga anga nui, he maha nga mahanga.

Hei tauira, kaore pea i te hototahi te whakatakotoranga o te whatunga e hiahiatia ana, a, ki te mea he hototahi, ka kore pea e tautokohia etahi paparanga i runga i te taputapu, a, ki te tautokohia, ka puta he hapa i te wa o te huringa o te huringa, na reira. ka whiwhi tatou i etahi mea ke i te putanga.

I te nuinga o te waa, ki te hiahia koe ki tetahi momo whatunga neural noa, kare pea e mahi me te NCS. Na reira, i whakatau ahau ki te ngana ki te whakaoti rapanga ma te whakamahi i nga taputapu whanui me te waatea.

Te kapua

Ko te huarahi rereke ki te otinga taputapu o te rohe ko te haere ki te kapua.

Ko nga whiringa kua reri - e rere mohoao ana oku kanohi.

Kaihautū katoa:

... Me te maha o nga mea iti ake te mohio.

Ko te whiriwhiri i roto i tenei momo ehara i te mea ngawari.

Na ka whakatau ahau kia kaua e whiriwhiri, engari ki te takai i te kaupapa mahi tawhito pai i runga i OpenCV i Docker ka whakahaere i roto i te kapua.

Ko te painga o tenei huarahi ko te ngawari me te mana whakahaere - ka taea e koe te whakarereke i te whatunga neural, te manaaki, te tūmau - i te nuinga, ahakoa te hiahia.

Tūmau

Me timata ma te tauira o te rohe.

I nga wa o mua ka whakamahi ahau i te Flask mo te REST API, OpenCV me te whatunga MobileSSD.

I muri i te whakauru i nga putanga o naianei ki Docker, ka kitea e au kaore a OpenCV 4.1.2 e mahi me te Mobile SSD v1_coco_2018_01_28, a me hoki au ki te 11/06_2017 kua whakamatauria.

I te timatanga o te ratonga, ka utaina e matou nga ingoa akomanga me te whatunga:

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

I runga i te docker o te rohe (i runga i te pona iti rawa) e 0.3 hēkona, i runga i te Raspberry - 3.5.

Me timata te tatau:

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 hekona, Rahipere - 1.7.

Ko te huri i te paura tensor hei json ka taea te panui:

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

Ano kaweake tenei mahi ma te Flask(Ko te whakauru he pikitia, ko te putanga ko nga hua o te kaitirotiro i roto i te json).

He whiringa kee, he nui ake nga mahi ka nekehia ki te kaimau: ko ia ano ka porowhita i nga mea kua kitea ka whakahokia mai te ahua kua oti.

He pai tenei whiringa kaore matou e pai ki te toia te opencv ki te tūmau.

Docker

Ka kohia e matou te ahua.

Ka heru te waehere ka whakairia ki runga Github, ka haria totika mai i reira e docker.

Hei papaahi, ka mau tatou i te Debian Stretch rite i runga i te Raspberry - e kore tatou e kotiti ke i te puranga hangarau kua whakamatauria.

Me whakauru e koe te ipu, protobuf, tono, opencv_python, tango Mobile SSD, waehere tūmau mai i Github ka timata te tūmau.

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

Ngāwari kiritaki kaitirotiro i runga i nga tono.

Te whakaputa ki Docker Hub

Ko nga rehita Docker kei te piki haere i te tere kaore i te iti ake i nga kaitirotiro kapua.

Kia kore ai e whakararuraru, ka haere tonu tatou DockerHub.

  1. Rehita
  2. Takiuru:
    takiuru docker
  3. Kia puta mai he ingoa whai kiko:
    tohu docker opencv-kitea tprlab/opencv-detect-ssd
  4. Tukuake te atahanga ki te tūmau:
    pana te docker tprlab/opencv-detect-ssd

Ka whakarewahia e matou i te kapua

Ko te kowhiringa o te waahi hei whakahaere i te ipu he tino whanui ano.

Ko nga kaitakaro nui katoa (Google, Microsoft, Amazon) ka tuku he tauira moroiti mo te kore utu mo te tau tuatahi.
Whai muri i taku whakamatautau ki a Microsoft Azure me Google Cloud, ka whakatauhia e au nga mea o muri na te mea ka tere ake.

Kaore au i tuhi i nga tohutohu ki konei, na te mea he tino motuhake tenei waahanga mo te kaiwhakarato kua tohua.

I whakamatauria e au etahi momo taputapu taputapu,
Nga taumata iti (tiritiri me te whakatapua) - 0.4 - 0.5 hēkona.
Nga waka kaha ake - 0.25 - 0.3.
Ae, ahakoa i roto i nga ahuatanga kino rawa atu, ko nga toa e toru nga wa, ka taea e koe te whakamatau.

Ataata

Ka whakarewahia e matou he riipene ataata OpenCV ngawari i runga i te Raspberry, ka kitea ma te Google Cloud.
Mo te whakamatautau, i whakamahia he konae ataata i whakaahuahia i tetahi wa i te waahi matapōkere.


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

Ma te kairapu karekau e neke ake i te toru nga papa mo ia hekona, he tino puhoi nga mea katoa.
Mena ka tango koe i tetahi miihini kaha ki roto i te GCloud, ka taea e koe te kite i nga papa 4-5 mo ia hēkona, engari ko te rereketanga ka tata kore e kitea e te kanohi, he puhoi tonu.

Ataata o te Kaipupuri Ahanoa Kapua i runga i te Raspberry Pi

Ko nga utu o te kapua me te kawe waka kaore he mea e pa ana ki a ia; ka rere te kaitirotiro i runga i nga taputapu auau me te mahi i taua tere.

Rakau Rorohiko Neural

Kaore i taea e au te tu atu me te whakahaere i te tohu tohu mo NCS.

Ko te tere o te kaitirotiro he iti ake i te 0.1 hēkona, ahakoa he 2-3 nga wa tere atu i te kapua i runga i te miihini ngoikore, ara, 8-9 nga papa mo ia hekona.

Ataata o te Kaipupuri Ahanoa Kapua i runga i te Raspberry Pi

Ko te rereketanga o nga hua ka whakamaramahia e te NCS kei te whakahaere i te putanga SSD Mobile 2018_01_28.

P.S. I tua atu, kua whakaatuhia e nga whakamatautau he miihini papamahi tino kaha me te tukatuka I7 e whakaatu ana i nga hua pai ake ka puta ka taea te kohi i nga papa 10 mo ia hekona.

Kapu

I haere tonu te whakamatautau ka whakauruhia e ahau te kaitirotiro ki nga waahanga e rima i Google Kubernetes.
He ngoikore nga pona, a, kaore e taea e ia o ratou te tukatuka neke atu i te 2 papa mo ia hekona.
Engari ki te whakahaere koe i tetahi kapopu me nga pona N me te poroporo i nga papa ki roto i nga miro N, ka taea e koe te whakatutuki i nga papa 5 e hiahiatia ana mo ia hekona.

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

Anei te mea i tupu:

Ataata o te Kaipupuri Ahanoa Kapua i runga i te Raspberry Pi

He iti ake te tere atu i te NCS, engari he kaha ake i te awa kotahi.

Ko te hua, ko te tikanga, ehara i te raina - he whakakikorua mo te tukutahi me te kape hohonu o nga whakaahua opencv.

mutunga

I te katoa, ka taea e te whakamatautau te whakatau mena ka ngana koe, ka taea e koe te mawhiti me te kapua ngawari.

Engari he papamahi kaha, he taputapu rohe ranei ka taea e koe te whakatutuki i nga hua pai ake, me te kore he tinihanga.

tohutoro

Source: will.com

Tāpiri i te kōrero