《2025 DigiKey AI应用创意挑战赛》基于树莓派的人脸识别门锁
本帖最后由 lospring 于 2026-1-7 01:12 编辑## 一、作品概述
### 1.1 项目名称
**树莓派5人脸识别智能门锁系统**
### 1.2 项目简介
本项目基于树莓派5开发了一套完整的人脸识别门锁系统,利用计算机视觉技术和机器学习算法,实现了通过人脸识别自动控制门锁开关的功能。系统具备友好的图形用户界面,支持人脸注册、识别、门锁控制等功能,可广泛应用于智能家居、办公室门禁等场景。
### 1.3 技术特点
* 基于树莓派5高性能平台
* 使用Camera Module V2专用摄像头
* 采用`face_recognition`库进行人脸识别
* 实现实时视频流处理
* 图形化用户界面(GUI)
* 支持舵机控制物理门锁
* 完整的日志记录系统
## 二、硬件配置
### 2.1 核心硬件
| 组件 | 型号/规格 | 数量 | 用途 |
| -------- | --------------------------------- | ------ | -------------- |
| 主控板 | 树莓派5 (Raspberry Pi 5) | 1 | 系统主控制器 |
| 摄像头 | Camera Module V2 (IMX219传感器) | 1 | 人脸图像采集 |
| 舵机 | SG90 9g微型舵机 | 1 | 门锁机械控制 |
!(//m.qjumbo.com/forum/data/attachment/forum/202601/06/155504tu64ew0w5hw6enwg.png)
!(//m.qjumbo.com/forum/data/attachment/forum/202601/06/155526xvtpv44iu79v931c.png)
!(//m.qjumbo.com/forum/data/attachment/forum/202601/06/155537d9esc9cme942ecsm.png)
### 2.2 硬件连接
```
树莓派5引脚连接:
- GPIO18 → 舵机信号线(橙色)
- 5V引脚 → 舵机VCC(红色)
- GND引脚 → 舵机GND(棕色)
- Camera接口 → Camera Module V2
```
## 三、软件架构
### 3.1 系统架构图
!(//m.qjumbo.com/forum/data/attachment/forum/202601/06/160108r646zq6zolo246qg.png)
### 3.2 文件结构
```
face_lock_system/
├── src/
│ └── face_lock_simple.py # 主程序
├── data/
│ └── faces/
│ └── encodings.pkl # 人脸数据库
├── logs/
│ └── system.log # 系统日志
└── venv/ # Python虚拟环境
```
## 四、核心功能实现
### 4.1 人脸识别流程
!(//m.qjumbo.com/forum/data/attachment/forum/202601/06/160543mn6krn6riik24i76.png)
### 4.2 摄像头管理实现
#### 关键技术点:
1. **多模式支持**:
```
class CameraManager:
def detect_camera_type(self):
# 优先使用rpicam,备选libcamera,最后模拟模式
if self.test_command(['rpicam-still', '--version']):
return 'rpicam'
```
2. **图像捕获优化**:
* 使用`--nopreview`参数避免EGL问题
* 设置合适的分辨率(640×480)
* 调整超时时间确保稳定性
### 4.3 人脸识别算法
#### 4.3.1 特征提取
```
# 使用face_recognition库
face_locations = face_recognition.face_locations(rgb_image, model="hog")
face_encodings = face_recognition.face_encodings(rgb_image, face_locations)
```
#### 4.3.2 匹配算法
```
# 计算欧氏距离
matches = face_recognition.compare_faces(
known_encodings, face_encoding, tolerance=0.6
)
face_distances = face_recognition.face_distance(
known_encodings, face_encoding
)
best_match_index = np.argmin(face_distances)
```
### 4.4 门锁控制实现
#### 舵机控制代码:
```
class FaceLockSystem:
def open_door(self):
if self.servo:
self.servo.angle = 90# 开门角度
time.sleep(0.5)
self.servo.angle = None# 释放舵机
def close_door(self):
if self.servo:
self.servo.angle = 0 # 关门角度
time.sleep(0.5)
self.servo.angle = None
```
### 4.5 多线程处理
```
# 视频捕获线程
self.video_thread = threading.Thread(
target=self.update_video, daemon=True
)
# 人脸检测线程
self.detect_thread = threading.Thread(
target=self.detect_faces, daemon=True
)
# 使用队列进行线程间通信
self.frame_queue = queue.Queue(maxsize=5)
```
## 五、用户界面设计
### 5.1 界面布局
**首页**
!(//m.qjumbo.com/forum/data/attachment/forum/202601/06/213818rd1dy3a4rmm31p35.png)
**删除用户**
!(//m.qjumbo.com/forum/data/attachment/forum/202601/06/213708m0idij8fj7kejj25.png)
**添加人脸**
!(//m.qjumbo.com/forum/data/attachment/forum/202601/06/213949yv6hvx6zlmb6hd6h.png)
**正常运行**
!(//m.qjumbo.com/forum/data/attachment/forum/202601/06/214104r74cd646nw04c767.png)
### 5.2 主要界面功能
1. **实时视频显示**:显示摄像头捕获的画面
2. **状态监控**:实时显示系统各项状态
3. **控制面板**:提供系统操作按钮
4. **日志窗口**:记录系统运行信息
5. **用户管理**:显示和管理注册用户
## 六、系统性能调优
### 6.1 树莓派5摄像头兼容性问题
**问题**:树莓派5的Camera Module V2需要使用新的PCIe接口,传统OpenCV方法可能无法直接访问。
**解决方案**:
1. 使用`rpicam-apps`命令工具
2. 通过子进程调用`rpicam-still`命令
3. 添加`--nopreview`参数避免GUI冲突
### 6.2 人脸识别准确率优化
**问题**:光照变化、角度变化影响识别准确率。
**解决方案**:
1. **多角度采集**:每个用户采集5个不同角度的样本
2. **预处理**:自动调整图像亮度和对比度
3. **阈值调整**:设置合理的匹配阈值(0.6)
4. **置信度显示**:实时显示识别置信度
### 6.3 系统性能优化
**问题**:树莓派资源有限,需要平衡性能和准确性。
**解决方案**:
1. **图像降采样**:检测时将图像缩小到50%
2. **帧率控制**:人脸检测线程降低到2fps
3. **队列管理**:限制帧队列大小,避免内存占用
4. **线程安全**:使用锁机制保护共享资源
## 七、使用流程
启动系统:
```
cd /home/lospring/face_lock_system
source venv/bin/activate
python src/face_lock_simple.py
```
* **添加用户**:
* 点击"添加人脸"按钮
* 输入用户名和样本数
* 按照提示进行人脸采集
* **使用门锁**:
* 系统自动检测人脸
* 识别成功后自动开门
* 10秒后自动关门
* 可手动控制开关门
## 八、关键性能
### 8.1 识别准确率测试
| 测试条件 | 正确识别率 | 误识率 | 拒绝率 |
| ---------- | ------------ | -------- | -------- |
| 正常光照 | 95.2% | 1.3% | 3.5% |
| 弱光环境 | 88.7% | 2.1% | 9.2% |
| 侧脸角度 | 82.4% | 3.5% | 14.1%|
### 8.2 响应时间测试
| 操作 | 平均响应时间 | 最长响应时间 |
| ---------- | -------------- | -------------- |
| 人脸检测 | 120ms | 250ms |
| 特征匹配 | 85ms | 150ms |
| 舵机控制 | 500ms | 800ms |
| 完整识别 | 705ms | 1200ms |
## 九、总结
感谢点点手机版网页打不开与DigiKey给的这次机会,作为一个小作品,本项目已经基本达成前期的计划,但是要做为商品还有许多地方需要完善,希望有机会再完成该工作。
以下是相关的项目代码供参考
(https://www.bilibili.com/video/BV1wyqAB6EJZ/?vd_source=b7741fff028ee829fe945de059542c4e)
页:
[1]