• 4
    回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【2025 DigiKey 杯】树莓派人脸识别智能门锁

一、项目概述

1.1 项目简介

本项目是基于树莓派5的人脸识别智能门锁,通过摄像头实时捕捉人脸图像,使用face_recognition库进行人脸识别,识别成功后控制SG90舵机模拟门锁开关动作。

1.2 系统组成

硬件组件:

树莓派5:主控单元

CAMERA V2:用于人脸图像采集

SG90舵机:模拟门锁开关

软件栈:

Python 3.13:主要编程语言

face_recognition:人脸识别核心库

picamera2:摄像头控制库

gpiozero:GPIO控制库

OpenCV:图像处理库

NumPy:数值计算库

1.3 系统特点

智能人脸识别:使用HOG算法检测,128维特征向量匹配

双重环境管理:系统Python处理摄像头,虚拟环境处理人脸识别

方向问题解决:通过反向脉冲技术解决舵机方向问题

防误触发机制:开门期间暂停检测,10秒冷却时间

模块化设计:人脸采集和识别控制分离

详细日志输出:实时监控系统状态

二、项目结构

├── src/
│   ├── main_simple_solution.py    # 系统入口(含反向脉冲解决方案)
│   ├── add_face_final.py          # 人脸录入程序
│   └── test_*.py                  # 测试程序
├── data/
│   └── faces/
│       ├── encodings.pkl         # 人脸特征编码数据库
│       └── user_sample_*.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20     # 用户人脸样本图片
├── venv/                          # Python虚拟环境(Python 3.13)

三、硬件连接

3.1 舵机连接(SG90)

SG90引脚说明:
- 棕色线(GND) → 树莓派GND(引脚6)
- 红色线(VCC) → 树莓派5V(引脚2)
- 黄色线(信号)→ 树莓派GPIO 18(引脚12)

3.2 摄像头连接

使用树莓派官方摄像头模块CAMERA V2,通过CSI接口连接

四、软件安装与配置

本项目采用双重Python环境策略:

系统Python环境:

处理摄像头控制(picamera2)

处理GPIO控制(gpiozero)

虚拟Python环境:

处理人脸识别(face_recognition)

处理OpenCV图像处理

五、核心程序说明

5.1 使用add_face_final.py录入人脸

cd /home/lospring/face_lock_system
python add_face_final.py

录入流程:

摄像头检测:自动测试摄像头可用性

用户输入:输入用户名

样本采集:采集5张不同角度的人脸照片

质量检查:自动验证人脸检测结果

数据保存:保存到encodings.pkl和样本图片

# 支持多种摄像头命令
commands = [
    ['rpicam-jpeg', '-o', 'test.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20', '--nopreview'],
    ['libcamera-jpeg', '-o', 'test.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20'],
    ['raspistill', '-o', 'test.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20']
]

# 智能人脸检测
face_locations = face_recognition.face_locations(rgb_image, model="hog")
if len(face_locations) == 1:  # 确保只检测到一个人脸
    face_encoding = face_recognition.face_encodings(rgb_image, face_locations)[0]

5.2 使用add_face_final.py录入人脸

# 每60帧(约2秒)检测一次,降低CPU使用率
if not detection_paused and frame_count % 60 == 0:
    # 1. 人脸检测(HOG算法)
    face_locations = face_recognition.face_locations(rgb_small, model="hog")
    
    if face_locations:
        # 2. 特征提取
        face_encodings = face_recognition.face_encodings(rgb_small, face_locations)
        
        for face_encoding in face_encodings:
            # 3. 数据库匹配
            matches = face_recognition.compare_faces(
                known_encodings, 
                face_encoding, 
                tolerance=0.65  # 匹配阈值
            )
            
            if True in matches:
                # 4. 计算最小距离
                face_distances = face_recognition.face_distance(known_encodings, face_encoding)
                best_match_index = np.argmin(face_distances)
                best_distance = face_distances[best_match_index]
                
                # 5. 验证识别结果
                if matches[best_match_index] and best_distance < 0.65:
                    name = known_names[best_match_index]
                    print(f"✅ 识别到: {name} (距离: {best_distance:.3f})")

5.3 门锁控制序列

def door_control_sequence():
    """完整的门锁控制流程"""
    
    # 1. 暂停人脸检测
    global detection_paused
    detection_paused = True
    
    # 2. 开门动作(0度 → 90度)
    print("🔓 开门:顺时针转90度")
    servo.angle = OPEN_ANGLE  # 90度
    time.sleep(0.5)
    servo.angle = None  # 停止PWM,避免舵机抖动
    
    # 3. 保持开门状态10秒
    door_status = "open"
    print("🚪 门已打开,保持10秒")
    for i in range(10, 0, -1):
        print(f"  剩余 {i} 秒")
        time.sleep(1)
    
    # 4. 关门动作(90度 → 0度)
    print("🔒 关门:逆时针转90度")
    servo.angle = INITIAL_ANGLE  # 0度
    time.sleep(0.5)
    servo.angle = None
    
    # 5. 恢复人脸检测
    door_status = "closed"
    detection_paused = False
    print("✅ 门已关闭,恢复人脸检测")

5.3 舵机初始化(反向脉冲技术)

# 传统配置(可能方向错误)
servo = AngularServo(
    pin=18,
    min_angle=0,
    max_angle=180,
    min_pulse_width=0.0005,  # 0.5ms对应0度
    max_pulse_width=0.0025   # 2.5ms对应180度
)

# 反向脉冲配置(解决方向问题)
servo = AngularServo(
    pin=18,
    min_angle=0,
    max_angle=180,
    min_pulse_width=0.0025,  # 2.5ms对应0度(反向!)
    max_pulse_width=0.0005,  # 0.5ms对应180度(反向!)
    frame_width=0.02
)

5.4 关键参数配置

# ===== 摄像头配置 =====
CAMERA_RESOLUTION = (640, 480)  # 分辨率
FRAME_FORMAT = "RGB888"         # 图像格式

# ===== 人脸识别配置 =====
DETECTION_INTERVAL = 60         # 每60帧检测一次(约2秒)
FACE_MATCH_TOLERANCE = 0.65     # 人脸匹配阈值
DETECTION_MODEL = "hog"         # 使用HOG算法(CPU友好)

# ===== 舵机控制配置 =====
SERVO_PIN = 18                  # GPIO引脚
INITIAL_ANGLE = 0               # 初始角度(关门)
OPEN_ANGLE = 90                 # 开门角度
PULSE_REVERSE = True            # 启用反向脉冲

# ===== 时间控制配置 =====
UNLOCK_COOLDOWN = 10            # 冷却时间(秒)
DOOR_OPEN_TIME = 10             # 开门保持时间(秒)

六、演示

6.1、人脸录入

6.2、人脸识别及门锁开关

七、核心代码

face_lock_system_final.zip

八、视频展示:

 

全部回复(4)
正序查看
倒序查看
2025-12-31 08:32

牛牛牛

0
回复
fzwwj95
LV.7
3
03-24 17:25

【DigiKey杯点评】这个方案的优点是实现路径清晰,摄像头采集、人脸识别、舵机执行,整套链路比较直观,展示效果也很好。作为智能门锁原型已经很完整了,后续如果再加强活体检测和异常场景处理,安全性会更上一层。

0
回复
only one
LV.8
4
03-26 23:55

本项目是基于树莓派5的人脸识别智能门锁,通过摄像头实时捕捉人脸图像,使用face_recognition库进行人脸识别,识别成功后控制SG90舵机模拟门锁开关动作,是集成在一起吗

0
回复
abc9981
LV.3
5
03-31 15:08

【DigiKey杯点评】

1.核心功能完整,技术路线适配性高

项目精准选取树莓派 5 作为主控,搭配官方 CAMERA V2 和 SG90 舵机构建核心硬件框架,软件层以 Python 为核心,结合 face_recognition、picamera2 等成熟库实现 “人脸采集 - 特征识别 - 舵机控锁” 的完整链路,技术选型贴合树莓派的生态特点,无冗余设计,完美适配智能门锁原型的开发需求;同时采用 HOG 人脸识别算法,兼顾识别效率与树莓派 CPU 的运算能力,让系统在轻量硬件上实现稳定的实时识别。

2.细节设计严谨,解决实际开发痛点

项目针对开发和使用中的实际问题做了精细化优化,体现了扎实的嵌入式开发功底:通过反向脉冲技术解决舵机方向偏差的硬件问题,避免机械动作失效;设计双重 Python 环境,分离摄像头 / GPIO 控制和人脸识别运算,规避库版本冲突的软件问题;设置防误触发机制,开门期间暂停检测并搭配 10 秒冷却时间,防止重复触发舵机造成硬件损耗;每 60 帧检测一次人脸的设计,有效降低 CPU 使用率,提升系统运行稳定性。

3.架构设计规范,模块化与可复用性强

系统采用模块化设计,将人脸录入、识别控制、舵机驱动等功能拆分为独立程序,项目目录结构清晰(src / 核心代码、data / 人脸数据、venv / 虚拟环境),便于后续功能迭代和代码维护;同时提供了完整的硬件连接说明、参数配置项和核心代码,关键参数(识别阈值、检测间隔、舵机角度等)均支持灵活调整,不仅能直接复刻,还可根据需求适配不同硬件,对嵌入式开发初学者具有极强的参考价值。

4.功能体验完善,贴近实际使用场景

人脸录入环节支持自动摄像头检测、多角度样本采集和质量验证,保证人脸特征的有效性;人脸识别环节通过 128 维特征向量匹配 + 最小距离验证,提升识别准确率;门锁控制环节设计了完整的 “开门 - 保持 - 关门 - 恢复检测” 流程,搭配详细的日志输出,能实时监控系统状态,让整个使用流程更贴合实际智能门锁的操作逻辑,原型的体验感和实用性拉满。

5.落地性待提升,安全与适配性需强化

一是安全防护存在短板,仅采用基础的人脸识别,未加入活体检测(如眨眼、摇头验证),易被照片、视频欺骗,存在解锁安全隐患;也无权限管理、异常识别报警等功能,无法应对陌生人多次尝试解锁的场景。

二是环境适配性不足,HOG 算法在光线昏暗、人脸遮挡(如戴口罩、帽子)的场景下识别准确率会大幅下降,项目未提及对应的图像增强、多特征识别优化方案。

三是硬件可靠性待验证,采用树莓派 5V 直驱 SG90 舵机,未设计稳压、限流电路,若舵机卡顿易造成电流过载,可能损坏树莓派 GPIO 口;且无机械锁体的联动设计,仅为舵机模拟动作,与实际门锁的硬件衔接存在差距。

四是无离线与容错机制,未考虑树莓派程序崩溃、摄像头故障等情况,缺乏应急解锁方式和系统自恢复功能。

整体而言,该项目是一款完成度极高的智能门锁原型设计,完整的功能链路、严谨的细节优化和规范的架构设计,使其成为嵌入式智能硬件开发的优秀范例。若后续能增加活体检测、异常报警等安全功能,优化暗光、遮挡场景下的识别算法,设计硬件保护电路并增加应急容错机制,同时完成与实际机械锁体的联动适配,该原型将能更接近商用智能门锁的落地标准,具备更高的实际应用价值。

1
回复
立
即
发
帖