前言
前几天拿到了老师的神经棒,花了一天多的时间终于配置好了,期间踩了很多坑,遇到了很多困难的问题,后来翻了很多国内外的论坛,尝试了多个版本后才解决,成功用opencv运行了摄像头实时检测识别等功能。这篇博客用来给自己做个备忘录,也帮助有需要的人。作者水平不高,如有纰漏,烦请多多包涵,指出错误!
事先准备
- 树莓派4B
国内各大论坛里都是树莓派3B的配置教程,虽说和4B配置过程大同小异,但还是有一些小小的变化。
本文所用的树莓派硬件及系统版本如下(其实只要大版本一致即可)
重点信息如下:
系统版本:Raspbian 10 Buster(据我所知,2019版本以前的opvino不适配该系统)
CPU型号:BCM2711-v7l
- openivo_raspbian_2020.1.023版
这是部署神经棒的必备程序,建议与笔者版本一致,英特尔官方对其更新速度还是挺快的,而且每次更新都会有变化。
下面是我上传的地址,只需要一个币,大家有币的支持下吧,我确实缺😭
链接: openivo_raspbian_2020.1.023版.
也可以在这里下载免费的版本:
https://download.01.org/opencv/2020/openvinotoolkit/2020.1/
开始配置
- 安装Camke
如果你是使用C或者C++调用神经棒计算的,这一步是必须的,如果你和笔者一样使用python编译,那么这一步可以跳过。
打开终端,执行:
apt install cmake
- 配置openvino
下载好安装包后,移动到树莓派里,放到一个文件夹下,笔者放在了/Downloads/下,大家可以根据自己的路径进行修改。
//打开终端,输入
cd ~/Downloads/
解压包:
tar -xf l_openvino_toolkit_runtime_raspbian_p_2020.1.023.tgz
解压后将文件夹重命名为 openvino_2020
进入到/bin/目录下,输入一下命令打开setupvars.sh文件
sudo mousepad setupvars.sh
大概在第17行,将
INSTALLDIR="${INTEL_OPENVINO_DIR:-<INSTALLDIR>}"
替换为
INSTALLDIR=/home/pi/Downloads/openvino_2020/
然后再命令行中输入
source /home/pi/Downloads/openvino_2020/bin/setupvars.sh
这是临时启动,即仅本次有效,建议执行下面的命令使其永久有效:
echo "source /home/pi/Downloads/openvino_2020/bin/setupvars.sh" >> ~/.bashrc
执行完成后,打开一个新的终端,看到如下命令,则成功:
[setupvars.sh] OpenVINO environment initialized
如果报错,建议检查一下前面的步骤,看有没有遗漏,尤其是setupvars.sh里路径的修改
- 添加USB规则
将当前Linux用户添加到users组:
sudo usermod -a -G users "$(whoami)"
然后运行这个脚本:
sh openvino_2020/install_dependencies/install_NCS_udev_rules.sh
同样,如果报错请认真查看前文的setupvars.sh修改路径是否正确,这是报错的主要原因。
到这里就完成了。
- 测试
其实这一步非必要,这是给用C或者C++用户测试用的,Python用户可以直接跳到下一步。
在当前目录下新建build文件夹并进入
mkdir build && cd build
生成物体检测样本:
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=armv7-a" /home/pi/Downloads/openvino_2020/deployment_tools/inference_engine/samples/cpp
make -j2 object_detection_sample_ssd
从英特尔官方地址下载.bin和.xml文
wget --no-check-certificate https://download.01.org/opencv/2020/openvinotoolkit/2020.1/open_model_zoo/models_bin/1/face-detection-adas-0001/FP16/face-detection-adas-0001.bin
wget --no-check-certificate https://download.01.org/opencv/2020/openvinotoolkit/2020.1/open_model_zoo/models_bin/1/face-detection-adas-0001/FP16/face-detection-adas-0001.xml
用以下的命令执行测试:
./armv7l/Release/object_detection_sample_ssd -m face-detection-adas-0001.xml -d MYRIAD -i "这里填入待检测人像的图片路径"
- 用python测试
用python调用神经棒就非常简单了,首先需要安装opencv-python
然后复制如下代码:
import cv2 as cv
print('开始检测人脸')
net = cv.dnn.readNet('face-detection-retail-0004.xml', 'face-detection-retail-0004.bin')
net.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
frame = cv.imread('./1.jpg')
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.imwrite('./out.png', frame)//输出图像名及路径可以自行修改
print('人脸检测完成,已保存检测结果图像')
以上代码借鉴了B站UP主"同济自豪兄"的代码,如有侵权,请联系我立即删除,这是视频连接:https://www.bilibili.com/video/BV1UJ411q7du?p=15