【LattePanda Mu 开发套件】AI 视觉应用开发——人脸检测
本文介绍了 LattePanda Mu 开发套件实现 AI 视觉识别类的相关应用,包括环境搭建、模型训练、板端推理、摄像头实时检测和推理识别等,为该产品在 AI 视觉领域的快速开发和应用提供了参考。
【LattePanda Mu 开发套件】AI 视觉应用开发——人脸检测
本文介绍了 LattePanda Mu 开发套件实现 AI 视觉应用开发——人脸检测,包括项目介绍、环境部署、板端推理、动态识别等。
项目介绍
- 环境部署:包括 Python 安装、OpenCV 库安装、工具链安装等;
- 模型训练:包括预训练 ONNX 模型、YuNet 模型、置信度显示等;
- 板端推理:包括流程图、关键代码、本地人脸图片的板端推理等;
- 实时监测:连接 USB 摄像头捕捉实时画面,并实现人脸动态检测。
环境搭建
包括 Python 安装、OpenCV 库安装、工具链安装等。
Python 安装
-
下载并安装最新版 Python 软件,勾选添加路径至系统环境变量选项;
-
安装完成后,Win + R 输入 CMD 回车,进入终端命令行界面;
-
执行
python --version
指令,获取当前版本信息,验证安装是否完成; -
终端执行
pip --version
获取相应的版本号;
OpenCV 部署
- 终端执行
pip install opencv-python
安装 OpenCV 库;
YuNet 模型
YuNet 是一种轻量级、高效且准确的人脸检测模型,专为边缘设备设计,能够在毫秒级完成推理。该模型采用无锚点(Anchor-free)机制,并优化了损失函数和样本匹配策略,显著提升了检测性能,同时保持了极小的参数量。
YuNet 广泛应用于人脸识别、表情分析、视频监控等领域,尤其适合资源受限的边缘设备。其高效性还可用于服务器端批量处理,节省计算资源。
详见:YuNet: A Tiny Millisecond-level Face Detector .
板端推理
介绍了基于 OpenCV 的人脸检测项目的实现。
调用训练好的模型实现人脸检测,并标注相应的置信度。
使用 ONNX 模型,下载 并将模型文件置于 model 文件夹路径下;
YuNet 是 Anchor-Free 人脸检测器。
详见开源项目:face_detection_yunet | GitHub .
流程图
代码
新建 face_detection_confidence.py
文件,添加如下代码
import cv2
def detect_faces_yunet(image_path: str,
conf_threshold: float = 0.8,
model_path: str = "models/face_detection_yunet_2023mar.onnx") -> None:
img = cv2.imread(image_path)
if img is None:
raise FileNotFoundError(image_path)
h, w = img.shape[:2]
# 初始化 YuNet
detector = cv2.FaceDetectorYN_create(
model=model_path,
config="",
input_size=(w, h),
score_threshold=conf_threshold,
nms_threshold=0.4,
top_k=5000
)
detector.setInputSize((w, h))
faces = detector.detect(img)[1] # shape: (N, 15) x,y,w,h,x_reye,...,score
if faces is None:
faces = []
for face in faces:
x, y, w, h, *_ = face[:4]
score = face[-1]
x, y, w, h = map(int, (x, y, w, h))
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
label = f"{score:.2f}"
label_size, _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)
cv2.rectangle(img, (x, y - label_size[1] - 4),
(x + label_size[0], y), (0, 255, 0), -1)
cv2.putText(img, label, (x, y - 2), cv2.FONT_HERSHEY_SIMPLEX,
0.5, (0, 0, 0), 1, cv2.LINE_AA)
# ========== 显示部分开始 ==========
window_name = "YuNet Face Detection"
h_img, w_img = img.shape[:2] # 原图尺寸
max_h = 500 # 限制最大高度
if h_img > max_h: # 缩放
scale = max_h / h_img
new_w = int(w_img * scale)
show_img = cv2.resize(img, (new_w, max_h))
else: # 无需缩放
show_img = img
cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE) # no resize frame
cv2.imshow("YuNet Face Detection", show_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == "__main__":
detect_faces_yunet(r".\img\friends.jpg")
- 右键该文件,选择使用 IDLE 编辑;
- 菜单栏选择 Run - Run Module 选项,运行程序;
或终端执行指令
python E:\Code\fd\face_detection_confidence.py
、双击*.py
文件运行也可;
效果
运行程序后弹出人脸检测结果,并标注人脸置信度
- 调用 ONNX 模型实现人脸检测的方案相对于 Haar 特征识别方案具有更高的精度和置信度,同时提供更多可调控的信息;
- 可见该方案在整体识别效果方面有显著提升;
- 对于图像分辨率较为一般的场景,也能准确识别人脸;
动态检测
调用本地 USB 摄像头资源,实时跑 YuNet 模型;
- 人脸框 + 置信度;
- 按
q
键退出; - 首次运行自动下载 YuNet 权重文件;
流程图
代码
新建 face_detection_CamUSB.py
并添加如下代码
import cv2
from pathlib import Path
import urllib.request
import sys
# ---------- 1. 模型路径 & 下载 ----------
MODEL_URL = (
"https://github.com/opencv/opencv_zoo/raw/main/models/face_detection_yunet/"
"face_detection_yunet_2023mar.onnx"
)
MODEL_PATH = Path("models/face_detection_yunet_2023mar.onnx")
if not MODEL_PATH.exists():
print("首次使用,正在下载 YuNet 权重...")
urllib.request.urlretrieve(MODEL_URL, MODEL_PATH)
print("下载完成.")
# ---------- 2. 初始化摄像头 ----------
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # CAP_DSHOW 仅 Windows 可删
if not cap.isOpened():
sys.exit("无法打开摄像头")
# 读取一帧拿到分辨率
ret, frame = cap.read()
if not ret:
sys.exit("无法读取画面")
h, w = frame.shape[:2]
# ---------- 3. 初始化 YuNet ----------
detector = cv2.FaceDetectorYN_create(
model=str(MODEL_PATH),
config="",
input_size=(w, h),
score_threshold=0.7,
nms_threshold=0.4,
top_k=5000
)
# ---------- 4. 主循环 ----------
print("按 q 退出")
while True:
ret, frame = cap.read()
if not ret:
break
# 检测
detector.setInputSize((w, h))
faces = detector.detect(frame)[1] # shape: (N, 15)
if faces is None:
faces = []
for face in faces:
x, y, w_box, h_box = map(int, face[:4])
score = float(face[-1])
# 画框
cv2.rectangle(frame, (x, y), (x + w_box, y + h_box), (0, 255, 0), 2)
# 写置信度
label = f"{score:.2f}"
cv2.putText(frame, label, (x, y - 5),
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
# 显示
cv2.imshow("YuNet USB Camera", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# ---------- 5. 清理 ----------
cap.release()
cv2.destroyAllWindows()
- 右键该文件,选择使用 IDLE 编辑;
- 菜单栏选择 Run - Run Module 选项,运行程序;
或双击
*.py
文件运行。
效果
运行程序后弹出摄像头实时采集画面,自动标注人脸选框和置信度
动态演示
总结
本文介绍了 LattePanda Mu 开发套件实现 AI 视觉识别类的相关应用,包括环境搭建、模型训练、板端推理、摄像头实时检测和推理识别等,为该产品在 AI 视觉领域的快速开发和应用提供了参考。
更多推荐
所有评论(0)