回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【LattePanda Mu 开发套件】AI 视觉应用开发——人脸检测 简单

头像 无垠的广袤 2025.09.28 11 0

【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_model.jpg

YuNet 广泛应用于人脸识别、表情分析、视频监控等领域,尤其适合资源受限的边缘设备。其高效性还可用于服务器端批量处理,节省计算资源。

详见:YuNet: A Tiny Millisecond-level Face Detector .

板端推理

介绍了基于 OpenCV 的人脸检测项目的实现。

调用训练好的模型实现人脸检测,并标注相应的置信度。

使用 ONNX 模型,下载 并将模型文件置于 model 文件夹路径下;

YuNet 是 Anchor-Free 人脸检测器。

详见开源项目:face_detection_yunet | GitHub .

流程图

flowchart_YuNet.jpg

代码

新建 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 文件运行也可;

效果

运行程序后弹出人脸检测结果,并标注人脸置信度

friends.JPG

调用 ONNX 模型实现人脸检测的方案相对于 Haar 特征识别方案具有更高的精度和置信度,同时提供更多可调控的信息;

family.JPG

可见该方案在整体识别效果方面有显著提升;

TV.JPG

对于图像分辨率较为一般的场景,也能准确识别人脸;

TBB.JPG

动态检测

调用本地 USB 摄像头资源,实时跑 YuNet 模型;

人脸框 + 置信度;

按 q 键退出;

首次运行自动下载 YuNet 权重文件;

cam_usb.jpg

流程图

flowchart_fd-usb.jpg

代码

新建 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 文件运行。

效果

运行程序后弹出摄像头实时采集画面,自动标注人脸选框和置信度

动态演示

fd.gif

总结

本文介绍了 LattePanda Mu 开发套件实现 AI 视觉识别类的相关应用,包括环境搭建、模型训练、板端推理、摄像头实时检测和推理识别等,为该产品在 AI 视觉领域的快速开发和应用提供了参考。


评论

user-avatar