【VisionFive 2 Lite 单板计算机】边缘AI视觉部署方案:人脸检测

【VisionFive 2 Lite 单板计算机】边缘AI视觉应用部署:人脸检测

本文介绍了昉·星光 VisionFive2 Lite 单板计算机结合 OpenCV 实现人脸检测的项目设计。

项目介绍

VisionFive 2 Lite 结合 OpenCV 与 Haar 级联分类、DNN 模型实现人脸检测。

  • 准备工作:硬件连接、系统安装、OpenCV 的板端部署、相关补充等;

  • Haar 级联分类:使用 OpenCV 自带的 Haar 级联分类器实现人脸检测;

  • DNN 模型:使用 OpenCV 自带的 DNN 算法工具实现模型调用和人脸检测,给出高精度人脸检测解决方案。

准备工作

包括硬件连接、OpenCV 部署及测试等。

硬件连接

包括供电、联网、显示、鼠标键盘输入等。

系统安装

安装和烧录 VisionFive2 Lite 官方 Ubuntu 操作系统。

详见:VF2 Lite 系统安装 .

软件更新

更新软件包

wget https://github.com/starfive-tech/Debian/releases/download/v0.15.0-engineering-release-wayland/install_full.sh
sudo chmod +x install_full.sh
sudo ./install_full.sh

详见: StarFive-Tech | Debian .

OpenCV

更新操作系统后,检查 OpenCV 是否已正确安装

python3 -c "import cv2,sys;print(cv2.__version__,sys.version)"

若未输出版本号,如 4.6.0,则需根据报错信息添加缺失的库或更改为匹配的版本。

  • 安装 OpenCV 包
 sudo apt update
 sudo apt install -y libopencv-dev python3-opencv
  • 验证安装结果
 pkg-config --modversion opencv4
 python3 -c "import cv2,sys;print(cv2.__version__,sys.version)"
  • 输出 OpenCV 版本号

opencv_install

至此,完成 OpenCV 的板端本地部署。

Haar CasCade

使用 Haar 级联分类器快速实现人脸检测。

  • 使用已安装的 haarcascade_frontalface_default.xml 模型文件检测人脸;

  • 加载模型 ./model/*.xml 和目标图片 ./img/test.jpg

  • 检测结果弹窗显示。

代码

终端执行指令 touch fd_xml.py 新建文件,并添加如下代码

 import numpy as np
 import cv2
 # 加载分类器
 face_cascade = cv2.CascadeClassifier('/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml')
 # 读取图片
 img = cv2.imread('./img/westfour.jpg',cv2.IMREAD_COLOR)
 # 转换灰度图
 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 # 检测人脸,输出外框
 faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=1)
 # 遍历人脸检测结果
 for (x,y,w,h) in faces:
     # 画框
     cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
 # 显示结果
 cv2.namedWindow('faces', cv2.WINDOW_AUTOSIZE)
 cv2.imshow('faces',img)
 # 退出
 cv2.waitKey(0)
 # 关闭窗口
 cv2.destroyAllWindows()
 ​

保存代码。

效果

  • 终端执行 python3 fd_xml.py 弹窗显示识别结果,按任意键关闭窗口。

  • 检测效果如下

使用 Haar 级联分类的方案可以获得较为可信的人脸检测结果,准确度有进一步提升的空间。

DNN 模型

下载预训练模型

使用 OpenCV 自带的 DNN 工具读取模型文件,加载本地模型 ./model/*.* 和目标图片 ./img/test.jpg,将检测结果弹窗显示。

代码

终端执行 touch fd_dnn.py 新建程序文件,添加如下代码

 #!/usr/bin/env python3
 import cv2
 import numpy as np
 ​
 # 1. 加载模型
 prototxt = "./model/deploy.prototxt"
 caffemodel = "./model/res10_300x300_ssd_iter_140000.caffemodel"
 net = cv2.dnn.readNetFromCaffe(prototxt, caffemodel)
 ​
 # 2. 读取本地图片
 img = cv2.imread("./img/bean.jpg")
 if img is None:
     raise FileNotFoundError("请确认 ./img/*.jpg 存在")
 h, w = img.shape[:2]
 ​
 # 3. 构造 blob 并推理
 blob = cv2.dnn.blobFromImage(cv2.resize(img, (300, 300)), 1.0,
                              (300, 300), (104.0, 177.0, 123.0))
 net.setInput(blob)
 detections = net.forward()
 ​
 # 4. 画框 + 置信度
 for i in range(detections.shape[2]):
     confidence = detections[0, 0, i, 2]
     if confidence < 0.5:
         continue
     # 映射回原图坐标
     box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
     (x1, y1, x2, y2) = box.astype("int")
     cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
     cv2.putText(img, f"{confidence * 100:.1f}%", (x1, y1 - 5),
                 cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
 ​
 # 5. 弹窗显示
 cv2.imshow("Face Detection", img)
 cv2.waitKey(0)            # 按任意键关闭
 cv2.destroyAllWindows()
 ​

保存代码。

效果

  • 终端运行指令 python3 fd_dnn.py 弹窗显示识别结果,按任意键关闭窗口。

  • 识别效果如下

总结

本文介绍了昉·星光 VisionFive2 Lite 单板计算机结合 OpenCV 与 Haar 级联分类、DNN 模型实现人脸检测,包括OpenCV 部署、Haar 级联分类方案、DNN 算法等方案实现模型调用,给出高精度人脸检测解决方案,为相关产品在边缘 AI 视觉应用的快速开发设计提供了参考。