亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

树莓派实时人脸识别全流程指南:从硬件到模型训练

项目简介

本教程手把手教你在树莓派上搭建基于 OpenCV 与 Pi Camera 的实时人脸识别系统,涵盖硬件选型、OpenCV 安装、摄像头测试、人脸检测、数据采集、模型训练与实时识别全链路,代码片段详尽、实用技巧丰富。

项目基于开源 OpenCV 库,针对实时性能优化。虽以树莓派 Raspbian 为主,代码在 macOS/Windows 仅需微调即可运行。

三大核心阶段

完整人脸识别工作流分三阶段:

步骤 1:物料清单 (BOM)

步骤 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 仓库提供更多检测示例:

参考:Haar 级联物体检测 – 人脸与眼睛教程

步骤 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

制造工艺

  1. 在 MATRIX Voice 树莓派上安装 Google Assistant:分步指南
  2. Speathe:为瘫痪用户设计的呼吸驱动通讯系统
  3. Windows IoT + 树莓派打造人脸识别智能门锁
  4. 树莓派 OpenCV 自动视觉跟踪:云台舵机实时锁定彩色目标
  5. 树莓派手写数字识别:TensorFlow 与 OpenCV 实战部署
  6. 树莓派 2 运行 Windows IoT Core 打造 Rover 机器人:从入门到进阶指南
  7. 在树莓派 3 上扩展 GoPiGo v2 的 Windows 10 IoT Core 应用
  8. 精通Python运算符:全面指南
  9. Python 列表操作:创建、访问、修改与进阶技巧
  10. 精通 Python 元组:创建、访问与进阶操作
  11. 精通 Python 字典:创建、操作与进阶技巧
  12. 高性能ReS₂电荷陷阱突触器件实现100%人脸识别准确率