树莓派实时人脸识别全流程指南:从硬件到模型训练
项目简介
本教程手把手教你在树莓派上搭建基于 OpenCV 与 Pi Camera 的实时人脸识别系统,涵盖硬件选型、OpenCV 安装、摄像头测试、人脸检测、数据采集、模型训练与实时识别全链路,代码片段详尽、实用技巧丰富。
项目基于开源 OpenCV 库,针对实时性能优化。虽以树莓派 Raspbian 为主,代码在 macOS/Windows 仅需微调即可运行。
三大核心阶段
完整人脸识别工作流分三阶段:
- 人脸检测与数据采集
- 训练识别器
- 实时人脸识别
步骤 1:物料清单 (BOM)
- 树莓派 3 – $32
- 500万像素 1080p OV5647 摄像头模块 – $13
步骤 2:安装 OpenCV 3
推荐遵循 Adrian Rosebrock 指南 在 Raspbian Stretch 上编译安装 OpenCV 3。完成后激活虚拟环境:
source ~/.profile
workon cv
验证安装:
python
>>> import cv2
>>> cv2.__version__
应显示 3.3.0 或更高版本。
步骤 3:测试摄像头
若摄像头未识别,加载驱动:
sudo modprobe bcm2835-v4l2
测试脚本(含垂直翻转,按摄像头朝向调整):
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:
ret, frame = cap.read()
frame = cv2.flip(frame, -1)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', frame)
cv2.imshow('gray', gray)
if cv2.waitKey(30) & 0xff == 27:
break
cap.release()
cv2.destroyAllWindows()
运行 python simpleCamTest.py,按 ESC 退出。
步骤 4:人脸检测
OpenCV Haar 级联分类器是轻量级机器学习人脸检测方案。下载预训练 XML (haarcascade_frontalface_default.xml) 放入 Cascades 文件夹。实时检测并绘制边界框:
import cv2
faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:
ret, img = cap.read()
img = cv2.flip(img, -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray, scaleFactor=1.2, minNeighbors=5, minSize=(20, 20)
)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow('video', img)
if cv2.waitKey(30) & 0xff == 27:
break
cap.release()
cv2.destroyAllWindows()
detectMultiScale 参数:scaleFactor 逐次缩放比例,minNeighbors 抑制误检,minSize 最小人脸尺寸。
扩展示例
GitHub 仓库提供更多检测示例:
- faceEyeDetection.py
- faceSmileDetection.py
- faceSmileEyeDetection.py
步骤 5:数据采集
训练需标注数据集。创建项目目录与 dataset 子目录:
mkdir FacialRecognitionProject
cd FacialRecognitionProject
mkdir dataset
将 Haar XML 放入项目根目录。运行 01_face_dataset.py 采集每人 30 张人脸:
import cv2
import os
cam = cv2.VideoCapture(0)
cam.set(3, 640)
cam.set(4, 480)
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face_id = input('\n输入用户数字 ID 并回车 → ')
print('\n[INFO] 初始化人脸采集,请看向摄像头…')
count = 0
while True:
ret, img = cam.read()
img = cv2.flip(img, -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_detector.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
count += 1
cv2.imwrite(f'dataset/User.{face_id}.{count}.jpg', gray[y:y+h, x:x+w])
cv2.imshow('image', img)
if cv2.waitKey(100) & 0xff == 27 or count >= 30:
break
if count >= 30:
break
cam.release()
cv2.destroyAllWindows()
print('\n[INFO] 采集完成,清理资源。')
文件命名格式 User.{id}.{count}.jpg(如 User.1.4.jpg),可按需调整采集数量。
步骤 6:模型训练
使用采集图像训练 OpenCV 人脸识别器,模型保存为 trainer 目录下的 .yml 文件。完整训练脚本请见项目仓库。
项目完整代码与进阶资源:Real-Time Face Recognition – End-to-End Project
制造工艺
- 在 MATRIX Voice 树莓派上安装 Google Assistant:分步指南
- Speathe:为瘫痪用户设计的呼吸驱动通讯系统
- Windows IoT + 树莓派打造人脸识别智能门锁
- 树莓派 OpenCV 自动视觉跟踪:云台舵机实时锁定彩色目标
- 树莓派手写数字识别:TensorFlow 与 OpenCV 实战部署
- 树莓派 2 运行 Windows IoT Core 打造 Rover 机器人:从入门到进阶指南
- 在树莓派 3 上扩展 GoPiGo v2 的 Windows 10 IoT Core 应用
- 精通Python运算符:全面指南
- Python 列表操作:创建、访问、修改与进阶技巧
- 精通 Python 元组:创建、访问与进阶操作
- 精通 Python 字典:创建、操作与进阶技巧
- 高性能ReS₂电荷陷阱突触器件实现100%人脸识别准确率