Raspberry Pi上的Intel OpenVINO:2018年收获


您不仅可以散文形式写作,还可以诗歌形式写作。 当然,后者并不经常发生-例如,在Intel博客上,这种情况发生得比以往任何时候都少。 但是,作为今天的实验,我们决定允许自己。 如何发生取决于您。 所以...


在一年的最后一个季度,
确切地说,上周,
英特尔开发人员推出了新的
OpenVINO工具包在软件上发布。


新功能完成-联系人更改日志
我不会得到确切的细节
在这篇文章中,我只会讲一点:
关于视觉,英特尔和覆盆子酒。


***


OpenVINO本质上是一套工具,
库和解决方案示例
借助英特尔硬件的特殊加速
计算机视觉的流行任务。


谁还没有听说过计算机视觉-
这是计算机科学领域,
让您了解汽车
就像一个人,世界在周围。


信息来源,主要是图像
问题是创建一个算法
提取有用的功能
并对其做出决定。


***


我们迷你审查中的第一个是OpenCV库,
通常称为传统
机器视觉和学习
从相机读取并在屏幕上绘图,
跨平台和github上的生活
在撰写本文时已获得30502颗星。


在Raspberry的包装中,我们还会找到
公开的OpenCV,以及它
NEON优化,Python中的包装器,
用于相机和GTK窗口的GStreamer。



***


至今已有七年
解决我们的问题
应用深度神经网络
那些有老师的人需要培训。


Caffe,PyTorch-全部与培训有关,
有时需要几个星期。
OpenVINO解决了第二个问题:
尽快启动训练有素的网格。


在许多平台的最佳解决方案中,
对于知名的场景,需求和资源,
在OpenVINO深度学习中-一个单独的引擎,
在不同设备上具有一个接口。


***


您有工作工具
在Raspberry Pi上安装Raspbian 9,
插入Movidius棒,电源,
检查CPU版本是否至少为7。


在相应的指南中阅读更多内容,
作为演示,我建议代码,
使用相机并关闭
从方向看,LED。


下载两个网络:供人们查找
以及头部位置的预测
使用USB相机并注意
代码中默认的2号插针是什么?


***


献给所有热情的人
他一年四季都致力于我们的项目。
让一切在未来加速
Raspberry上的OpenVINO-相同的物联网!


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/zh-CN434238/


All Articles