Intel OpenVINO auf Raspberry Pi: Ernte 2018


Sie können über das Programmieren nicht nur in Prosa, sondern auch in Gedichten schreiben. Letzteres kommt natürlich nicht oft vor - sagen wir, im Intel-Blog ist dies etwas weniger passiert als nie zuvor. Als Experiment haben wir uns heute jedoch entschlossen, es uns zu erlauben; Wie es passiert ist, liegt bei Ihnen. Also ...


Im letzten Quartal des Jahres
Und um genau zu sein, letzte Woche,
Intel-Entwickler stellten eine neue vor
OpenVINO Toolkit Release auf Software .


Was neu ist, ist erledigt - Kontakt Changelogs
Ich werde nicht die genauen Details erhalten
In diesem Beitrag werde ich nur wenig erzählen:
Über Sicht, Intel und Himbeerwein.


***.


OpenVINO ist im Wesentlichen eine Reihe von Tools,
Bibliotheken und Lösungsbeispiele
Mit spezieller Beschleunigung auf Intel-Hardware
Die beliebten Aufgaben des Computer Vision.


Wer hat noch nichts von Computer Vision gehört -
Dies ist ein Bereich der Informatik,
Lässt Sie das Auto verstehen
Wie ein Mann ist die Welt um uns herum.


Die Informationsquelle, hauptsächlich Bilder,
Und das Problem ist, einen Algorithmus zu erstellen
So extrahieren Sie nützliche Funktionen
Und Entscheidungen über sie treffen.


***.


Der erste in unserem Mini-Review ist die OpenCV-Bibliothek.
Was oft als traditionell bezeichnet wird
Bildverarbeitung und Lernen,
Von der Kamera lesen und auf dem Bildschirm zeichnen,
Plattformübergreifend und auf Github Living
Zum Zeitpunkt des Schreibens 30502 Sterne erzielt.


Im Paket für Himbeere finden wir auch
Public OpenCV und damit
NEON-Optimierungen, Wrapper in Python,
GStreamer für Kameras und für GTK-Fenster.



***.


Seit sieben Jahren
Um unsere Probleme zu lösen
Wenden Sie tiefe neuronale Netze an,
Diejenigen mit einem Lehrer müssen geschult werden.


Caffe, PyTorch - es geht nur um Training,
Manchmal dauert es ein paar Wochen.
OpenVINO löst das zweite Problem:
Starten Sie trainierte Grids so schnell wie möglich.


Von den besten Lösungen für viele Plattformen,
Für bekannte Szenarien, Bedürfnisse und Ressourcen,
In OpenVINO Deep Learning - eine separate Engine,
Mit einer Schnittstelle auf verschiedenen Geräten.


***.


Sie haben die Werkzeuge, um zu arbeiten
Installieren Sie Raspbian 9 auf dem Raspberry Pi.
Stecker Movidius Stick, Netzteil,
Überprüfen Sie, ob die CPU-Version mindestens sieben ist.


Lesen Sie mehr in der entsprechenden Anleitung ,
Und als Demo schlage ich den Code vor,
Mit der Kamera arbeiten und ausschalten
In Blickrichtung die LED.


Laden Sie zwei Netzwerke herunter: für Personen, die etwas finden
Und die Vorhersagen der Kopfposition ,
Verwenden Sie eine USB-Kamera und beachten Sie
Was ist die Standard-PIN Nummer 2 im Code?


***.


Allen gewidmet, die leidenschaftlich sind
Er hat das ganze Jahr an unserem Projekt gearbeitet.
Lass alles im Kommen beschleunigen,
OpenVINO auf Himbeere - das gleiche IoT!


import cv2 as cv from gpiozero import LED from math import cos, sin, pi winName = 'OpenVINO on Raspberry Pi' cv.namedWindow(winName, cv.WINDOW_NORMAL) faceDetectionNet = cv.dnn.readNet('face-detection-retail-0004.xml', 'face-detection-retail-0004.bin') headPoseNet = cv.dnn.readNet('head-pose-estimation-adas-0001.xml', 'head-pose-estimation-adas-0001.bin') faceDetectionNet.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD) headPoseNet.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD) cap = cv.VideoCapture(0) led = LED(2) led.on() while cv.waitKey(1) != 27: hasFrame, frame = cap.read() if not hasFrame: break frameHeight, frameWidth = frame.shape[0], frame.shape[1] # Detect faces on the image. blob = cv.dnn.blobFromImage(frame, size=(300, 300), ddepth=cv.CV_8U) faceDetectionNet.setInput(blob) detections = faceDetectionNet.forward() for detection in detections.reshape(-1, 7): confidence = float(detection[2]) if confidence > 0.5: xmin = int(detection[3] * frameWidth) ymin = int(detection[4] * frameHeight) xmax = int(detection[5] * frameWidth) ymax = int(detection[6] * frameHeight) xmax = max(1, min(xmax, frameWidth - 1)) ymax = max(1, min(ymax, frameHeight - 1)) xmin = max(0, min(xmin, xmax - 1)) ymin = max(0, min(ymin, ymax - 1)) # Run head pose estimation network. face = frame[ymin:ymax+1, xmin:xmax+1] blob = cv.dnn.blobFromImage(face, size=(60, 60), ddepth=cv.CV_8U) headPoseNet.setInput(blob) headPose = headPoseNet.forward(['angle_p_fc', 'angle_r_fc', 'angle_y_fc']) p, r, y = headPose[0][0], headPose[1][0], headPose[2][0] cos_r = cos(r * pi / 180) sin_r = sin(r * pi / 180) sin_y = sin(y * pi / 180) cos_y = cos(y * pi / 180) sin_p = sin(p * pi / 180) cos_p = cos(p * pi / 180) x = int((xmin + xmax) / 2) y = int((ymin + ymax) / 2) # center to right cv.line(frame, (x,y), (x+int(50*(cos_r*cos_y+sin_y*sin_p*sin_r)), y+int(50*cos_p*sin_r)), (0, 0, 255), thickness=3) # center to top cv.line(frame, (x, y), (x+int(50*(cos_r*sin_y*sin_p+cos_y*sin_r)), y-int(50*cos_p*cos_r)), (0, 255, 0), thickness=3) # center to forward cv.line(frame, (x, y), (x + int(50*sin_y*cos_p), y + int(50*sin_p)), (255, 0, 0), thickness=3) cv.rectangle(frame, (xmin, ymin), (xmax, ymax), (0, 255, 255)) if abs(cos_y * cos_p) > 0.9: cv.putText(frame, 'FORWARD', (0, 30), cv.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), thickness=2) led.off() else: led.on() cv.imshow(winName, frame) 


Source: https://habr.com/ru/post/de434238/


All Articles