树莓派+计算棒2完成实时人脸识别项目
不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我!
我是同济子豪兄,接达尔闻邀约做树莓派项目的时候,刚好在美国,有幸去到英特尔总部更深入的了解了NCS2,于是决定将二者结合起来做人工智能应用。
总结一些关键操作步骤给大家,如果想要完整的一步步学习,点击阅读原文查看。
材料准备
- 一台电脑
配置树莓派系统
sudo nano /etc/apt/sources.list
debhttp://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contribnon-free rpi
deb-srchttp://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contribnon-free rpi
sudo apt-get update
这个步骤是无数树莓派玩家多年总结的必由之路,凝聚了无数前人趟坑的血泪和汗水,特别适合新手阅读。
检查
uname -m
输出armv7l说明正常。
换源
sudo nano /etc/apt/sources.list
debhttp://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contribnon-free rpi
deb-srchttp://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contribnon-free rpi
sudo nano /etc/apt/sources.list.d/raspi.list
debhttp://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
deb-srchttp://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
保存,退出。使用sudo apt-get update命令更新软件源列表。
安装cmake
sudo apt install cmake
下载OpenVINO toolkit for Raspbian
cd ~/Downloads/
tar -xf l_openvino_toolkit_runtime_raspbian_p_2019.3.334.tgz
source inference_engine_vpu_arm/bin/setupvars.sh
sh inference_engine_vpu_arm/install_dependencies/install_NCS_udev_rules.sh
sed-i "s|<INSTALLDIR>|$(pwd)/inference_engine_vpu_arm|" inference_engine_vpu_arm/bin/setupvars.sh
设置环境变量
sudo nano /home/pi/.bashrc
为英特尔神经棒2代配置USB规则
sudo usermod -a -G users"$(whoami)"
shinference_engine_vpu_arm/install_dependencies/install_NCS_udev_rules.sh
Updating udev rules...
Udev rules have been successfullyinstalled.
cd inference_engine_vpu_arm/deployment_tools/inference_engine/samples
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release-DCMAKE_CXX_FLAGS="-march=armv7-a"
make -j2 object_detection_sample_ssd
下载神经棒模型的模型文件和权重文件
wget --no-check-certificatehttps://download.01.org/openvinotoolkit/2018_R4/open_model_zoo/face-detection-adas-0001/FP16/face-detection-adas-0001.bin
wget --no-check-certificatehttps://download.01.org/openvinotoolkit/2018_R4/open_model_zoo/face-detection-adas-0001/FP16/face-detection-adas-0001.xml
人脸检测
<path_to_image>换成你的人脸图片的绝对路径
pi@raspberrypi:~/Downloads/inference_engine_vpu_arm/deployment_tools/inference_engine/samples/build$ ./armv7l/Release/object_detection_sample_ssd -m face-detection-adas-0001.xml-d MYRIAD -i /home/pi/Downloads/face/1.jpg
Python中调用OpenCV进行人脸检测
import cv2 as cv
print('开始人脸检测')
# 载入模型和权重文件
net =cv.dnn.readNet('face-detection-adas-0001.xml', 'face-detection-adas-0001.bin')
# Specify target device
net.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
# 读入图片,将图片路径更换为自己的人脸图片
frame = cv.imread('./6.jpg')
# Prepare input blob and perform aninference
blob = cv.dnn.blobFromImage(frame,size=(672, 384), ddepth=cv.CV_8U)
net.setInput(blob)
out = net.forward()
# Draw detected faces on the frame
for detection in out.reshape(-1, 7):
confidence = float(detection[2])
# xmin,ymin-框的左上角点坐标
xmin = int(detection[3] * frame.shape[1])
ymin = int(detection[4] * frame.shape[0])
#xmax,ymax-框的右下角点坐标
xmax = int(detection[5] * frame.shape[1])
ymax= int(detection[6] * frame.shape[0])
if confidence > 0.5:
cv.rectangle(frame, (xmin, ymin), (xmax, ymax), color=(0, 255, 0))
# 存储检测后画框的人脸图片
cv.imwrite('./out.png', frame)
print('人脸检测完成,已保存检测结果图像')
配置树莓派摄像头
sudo apt-get install python-opencv
sudo apt-get install fswebcam
sudo nano /etc/modules
bcm2835-v4l2
重启树莓派
vcgencmd get_camera
raspistill -o image.jpg
ls /dev
fswebcam 10 test.jpg
执行后会 延时10帧 拍摄 (给个准备时间)产生 一张 名称为 test 的图片,存储在/home/pi目录中。
配置展示窗口
打开VNC Viewer,在树莓派命令行中运行这条命令
export DISPLAY=:0.0
树莓派摄像头实时人脸检测
# coding=utf-8
# face-detection-camera.py
import cv2 as cv
import numpy as np
print('开始人脸摄像头实时检测')
# 载入模型文件和权重文件
net = cv.dnn.readNet('face-detection-adas-0001.xml','face-detection-adas-0001.bin')
# Specify target device
net.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
# 从摄像头中读取图像帧
cap=cv.VideoCapture(0)
while(1):
#获取一帧图像
ret,frame=cap.read()
#Prepare input blob and perform an inference
frame=cv.resize(frame,(480,320),interpolation=cv.INTER_CUBIC)
blob = cv.dnn.blobFromImage(frame, size=(672, 384), ddepth=cv.CV_8U)
net.setInput(blob)
out = net.forward()
#绘制人脸框
for detection in out.reshape(-1, 7):
confidence = float(detection[2])
# 获取左上角图片的坐标
xmin = int(detection[3] * frame.shape[1])
ymin = int(detection[4] * frame.shape[0])
# 获取右下角图片的坐标
xmax = int(detection[5] * frame.shape[1])
ymax = int(detection[6] * frame.shape[0])
if confidence > 0.5:
cv.rectangle(frame, (xmin, ymin), (xmax, ymax), color=(0, 255, 0))
#展示图像
cv.imshow("capture",frame)
if cv.waitKey(1)&0xFF==ord('q'):
# 每1毫秒监听一次键盘的动作,按q键结束,并保存图片
cv.imwrite('out.png', frame)
print("save one image done!")
break
# 关闭摄像头及显示窗口
cap.release()
cv.destroyAllWindows()
print('人脸摄像头实时检测完成')
运行这个脚本文件
python3 face-detection-camera.py
树莓派有了NCS2,就如虎添翼,可以尽情的跑你想要的计算机算法应用。当然,前提是你已经学会了最基础的应用。以下是子豪兄为新手准备的详细的课程,可点击阅读原文查看。
毕设课程共17讲:从“选题——基础知识点补足——项目拆分讲解——优秀作品分享”逐个帮你解决从开题到最终答辩过程中的各个问题。
得捷-毕业设计17节免费课程高能回顾:
毕设第7课:用Tensorflow搭建神经网络(阅读原文,进毕设第7课查看)
毕设第12课:常用数据总线分析(阅读原文,进毕设第12课查看)