lospring 发表于 2026-1-6 17:08:07

《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]
查看完整版本: 《2025 DigiKey AI应用创意挑战赛》基于树莓派的人脸识别门锁

Baidu
map