Intel OpenVINO sur Raspberry Pi: récolte 2018


Vous pouvez écrire sur la programmation non seulement en prose, mais aussi en poésie. Ce dernier, bien sûr, ne se produit pas souvent - disons, sur le blog Intel, cela s'est produit un peu moins que jamais auparavant. Cependant, comme une expérience aujourd'hui, nous avons décidé de nous permettre; comment cela s'est passé dépend de vous. Alors ...


Au dernier trimestre de l'année,
Et pour être précis, la semaine dernière,
Les développeurs Intel ont présenté un nouveau
Version de la boîte à outils OpenVINO sur le logiciel .


Quoi de neuf est fait - contactez changelogs
Je ne recevrai pas les détails exacts
Dans cet article, je ne dirai qu'un peu:
A propos de la vue, Intel et le vin de framboise.


***


OpenVINO est essentiellement un ensemble d'outils,
Bibliothèques et exemples de solutions
Avec une accélération spéciale sur le matériel Intel
Les tâches populaires de la vision par ordinateur.


Qui n'a pas entendu parler de la vision par ordinateur -
C'est un domaine de l'informatique,
Vous fait comprendre la voiture
Comme un homme, le monde est autour.


La source d'information, principalement des images,
Et le problème est de créer un algorithme
Pour extraire des fonctionnalités utiles
Et prendre des décisions à leur sujet.


***


La première de notre mini-revue est la bibliothèque OpenCV,
Ce qu'on appelle souvent traditionnel
Vision et apprentissage machine,
Lecture à partir de la caméra et dessin à l'écran,
Multiplateforme et sur github living
Ayant marqué 30502 étoiles au moment de la rédaction.


Dans le paquet pour la framboise, nous trouverons également
OpenCV public, et avec lui
Optimisations NEON, wrappers en Python,
GStreamer pour les caméras et pour les fenêtres GTK.



***


Depuis sept ans maintenant
Pour résoudre nos problèmes
Appliquer des réseaux de neurones profonds,
Ceux qui ont un enseignant doivent être formés.


Caffe, PyTorch - c'est une question de formation,
Prenant parfois quelques semaines.
OpenVINO résout le deuxième problème:
Lancez les grilles entraînées le plus rapidement possible.


Parmi les meilleures solutions pour de nombreuses plateformes,
Pour des scénarios, besoins et ressources bien connus,
Dans le Deep Learning OpenVINO - un moteur séparé,
Avec une interface sur différents appareils.


***


Vous avez les outils pour travailler
Installez Raspbian 9 sur le Raspberry Pi,
Prise Movidius stick, alimentation,
Vérifiez que la version du processeur est au moins sept.


En savoir plus dans le guide correspondant,
Et en démo, je suggère le code,
Travailler avec l'appareil photo et éteindre
Dans le sens de la vue, la LED.


Téléchargez deux réseaux: pour les personnes qui trouvent
Et les prédictions de la position de la tête ,
Utilisez une caméra USB et notez
Quelle est la broche 2 par défaut dans le code?


***


Dédié à tous ceux qui sont passionnément
Il a travaillé sur notre projet toute l'année.
Que tout s'accélère dans le futur,
OpenVINO sur Raspberry - le même 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/fr434238/


All Articles