基于ESP32-CAM和Python的实时人脸识别系统,支持人脸录入、训练和识别功能。
本项目实现了一个完整的人脸识别解决方案,包括:
- ESP32-CAM端的图像采集和传输
- Python端的人脸检测、识别和训练
- 多种通信方式(UDP网络通信、串口通信)
- 实时视频流处理和可视化界面
ESP32-CAM (图像采集)
↓ UDP传输
Python服务器 (人脸识别)
↓ 识别成功
串口设备 + UDP通知
├── esp32-cam/
│ └── camera.py # ESP32摄像头控制程序
├── python/
│ ├── ESP32-cam摄像头识别.py # 主要人脸识别程序
│ ├── ESP32摄像头人脸录入.py # 人脸数据录入程序
│ ├── 数据训练.py # 模型训练程序
│ ├── img/ # 人脸图像存储目录
│ └── trainer/
│ └── trainer.yml # 训练好的模型文件
└── test.py # 测试文件
- ✅ 实时视频流传输
- ✅ 人脸检测与识别
- ✅ 人脸数据录入
- ✅ 模型训练
- ✅ 置信度评估
- ✅ 多种通信方式
- ✅ 可视化界面
- ESP32-CAM开发板
- USB转串口模块(用于ESP32编程)
- 串口设备(可选,用于控制外部设备)
- MicroPython固件
- 支持camera、network、socket模块
pip install opencv-python
pip install pillow
pip install numpy
pip install pyserial
- 烧录MicroPython固件到ESP32-CAM
- 修改
esp32-cam/camera.py
中的WiFi配置:
wlan.connect('YOUR_WIFI_NAME', 'YOUR_WIFI_PASSWORD')
- 修改目标服务器IP地址:
s.sendto(buf,("YOUR_SERVER_IP",9090))
- 安装依赖包:
pip install -r requirements.txt
-
修改
python/ESP32-cam摄像头识别.py
中的配置:- 串口配置:
port = "COM7"
(Windows)或port = "/dev/ttyUSB0"
(Linux) - 目标设备IP:
s.sendto(b'3', ("TARGET_IP", 9090))
- 串口配置:
-
确保Haar级联分类器路径正确:
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')
cd python
python ESP32摄像头人脸录入.py
- 启动ESP32-CAM
- 在显示窗口中按
s
键保存人脸图像 - 按空格键退出程序
- 图像将保存在
img/
目录中,格式为数字.jpg
python 数据训练.py
- 程序会自动读取
img/
目录中的图像 - 使用LBPH算法训练人脸识别模型
- 生成的模型保存为
trainer/trainer.yml
python ESP32-cam摄像头识别.py
- 启动ESP32-CAM
- 程序会实时显示识别结果
- 识别成功时会:
- 发送串口控制信号(十六进制:ffabcdfe)
- 发送UDP通知到目标设备
- 按空格键退出程序
camera.framesize(camera.FRAME_VGA) # 图像分辨率
camera.quality(10) # 图像质量 (0-63)
camera.brightness(0) # 亮度调节
camera.contrast(0) # 对比度调节
confidence_threshold = 50 # 置信度阈值
face_detector.detectMultiScale(
gray, 1.1, 5, # 缩放因子和最小邻居数
cv2.CASCADE_SCALE_IMAGE,
(100,100), (300,300) # 最小和最大人脸尺寸
)
- ESP32-CAM发送端口:9090
- Python接收端口:9090
- 通信协议:UDP
- 数据格式:JPEG图像流
-
ESP32-CAM连接失败
- 检查WiFi名称和密码
- 确认网络连接状态
- 检查IP地址配置
-
Python程序无法接收图像
- 检查防火墙设置
- 确认端口9090未被占用
- 验证网络连通性
-
人脸识别准确率低
- 增加训练样本数量
- 调整置信度阈值
- 改善光照条件
-
串口通信失败
- 检查串口号配置
- 确认波特率设置
- 验证串口设备连接
- 人脸检测:Haar级联分类器
- 人脸检测:Haar级联分类器
- 人脸识别:LBPH (Local Binary Patterns Histograms)
- 图像处理:OpenCV库
- 图像传输:UDP协议,实时性好
- 控制信号:串口通信,可靠性高
- 状态通知:UDP广播