【Arduino UNO Q】 边缘 AI 视觉部署方案:人脸检测
本文介绍了 Arduino UNO Q 开发板结合 OpenCV 与 Haar 级联分类、DNN 模型实现人脸检测,包括OpenCV 部署、Haar 级联分类方案、DNN 算法等方案实现模型调用,给出高精度人脸检测解决方案,为相关产品在边缘 AI 视觉应用的快速开发设计提供了参考。
【Arduino UNO Q】 边缘 AI 视觉部署方案:人脸检测
本文介绍了 Arduino UNO Q 开发板结合 OpenCV 实现人脸检测的项目设计。
项目介绍
Arduino UNO Q 开发板结合 OpenCV 与 HaarCascade 算法实现快速人脸检测。
- 准备工作:硬件连接、软件更新等;
- 环境搭建:安装 OpenCV 库、所需软件包等;
- Haar级联分类:使用 OpenCV 自带的 Haar Cascade 算法实现人脸检测,包括流程图、代码、效果演示等;
- DNN 模型:使用预训练模型,结合 OpenCV 自带的 DNN 算法,实现高精度人脸检测。
准备工作
包括硬件连接、系统安装、软件更新等。
详见:Arduino UNO Q 介绍、环境搭建、工程测试 .
硬件连接
这里采用 SSH 远程控制,使用 Type-C 数据线供电并 WiFi 联网即可。

软件更新
更新软件包
sudo apt update
sudo apt upgrade
环境搭建
-
安装 OpenCV 和 opencv-data 软件包;
sudo apt install python3-opencv sudo apt install opencv-data -
执行如下指令验证
python3 -c "import cv2,sys;print(cv2.__version__,sys.version)"
终端打印 opencv 版本号

Haar CasCade
使用 Haar 级联分类器快速实现人脸检测。
-
使用 opencv-data 软件包的
haarcascade_frontalface_default.xml权重模型检测人脸; -
加载模型
./model/*.xml和目标图片./img/*.jpg; -
弹窗显示人脸检测结果。
代码
终端执行指令 touch fd_xml.py 新建文件,并添加如下代码
import numpy as np
import cv2
import argparse
# input image path
parser = argparse.ArgumentParser()
parser.add_argument('--image_path', default='./img/friends.jpg', help='输入指令 python3 fd_xml.py --image_path ./img/friends.jpg')
args = parser.parse_args()
# 实例化人脸分类器
face_cascade = cv2.CascadeClassifier('/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml')
# 读取图片
img = cv2.imread(args.image_path, 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_NORMAL)
cv2.imshow('faces',img)
# 退出键
cv2.waitKey(0)
# 关闭窗口
cv2.destroyAllWindows()
保存代码。
效果
- 终端执行
python3 fd_xml.py --image_path ./img/friends.jpg - 弹窗显示识别结果,按任意键关闭窗口。
- 识别效果如下


使用 Haar 级联分类的方案可以获得较为可信的人脸检测结果,准确度有进一步提升的空间。
DNN
下载预训练模型
wget https://github.com/opencv/opencv/blob/master/samples/dnn/face_detector/deploy.prototxt
wget https://github.com/opencv/opencv_3rdparty/blob/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000.caffemodel
使用 OpenCV 自带的 DNN 工具读取模型文件,加载本地模型和目标图片并弹窗显示检测结果。
流程图
代码
终端执行 touch fd_dnn.py 新建程序文件,添加如下代码
#!/usr/bin/env python3
import cv2
import numpy as np
import argparse
# input image path
parser = argparse.ArgumentParser()
parser.add_argument('--image_path', default='./img/friends.jpg', help='输入指令 python3 fd_dnn.py --image_path ./img/friends.jpg')
args = parser.parse_args()
# 加载模型
prototxt = "./model/deploy.prototxt"
caffemodel = "./model/res10_300x300_ssd_iter_140000.caffemodel"
net = cv2.dnn.readNetFromCaffe(prototxt, caffemodel)
# 读取本地图片
img = cv2.imread(args.image_path)
if img is None:
raise FileNotFoundError("请确认图片路径是否正确")
h, w = img.shape[:2]
# 推理
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()
# 画框
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)
# 弹窗显示
cv2.namedWindow('Face Detection', cv2.WINDOW_NORMAL)
cv2.imshow("Face Detection", img)
cv2.waitKey(0) # 按任意键关闭
cv2.destroyAllWindows()
保存代码。
效果
-
终端运行指令
python3 fd_dnn.py --image_path ./img/friends.jpg弹窗显示识别结果,按任意键关闭窗口;效果如下





总结
本文介绍了 Arduino UNO Q 开发板结合 OpenCV 与 Haar 级联分类、DNN 模型实现人脸检测,包括OpenCV 部署、Haar 级联分类方案、DNN 算法等方案实现模型调用,给出高精度人脸检测解决方案,为相关产品在边缘 AI 视觉应用的快速开发设计提供了参考。
更多推荐
所有评论(0)