嵌入式
返回首页

OpenMV4人脸识别门禁系统设计与实现

2026-04-10 来源:EEWorld 论坛

人脸识别门禁系统设计与实现

作者:Juggernaut

一、作品简介

随着科技的不断发展,人们的生活水平得到了极大的提升,与此同时人们对安全的要求也越来越高。门锁一直是一个家庭安全保障的关键性物件,门锁的发展更是经历了从普通物理门锁到密码锁、指纹锁到其它更高级利用生物特征识别技术的门锁,其中人脸识别技术为主的多功能的智能门锁成为智慧家居领域发展中极为重要一环。

本项目主要设计一个人脸识别门禁系统,采用星瞳科技的OpenMV4 H7 R2既承担主控功能,也承担摄像头主体,同时外接MG90S舵机用于模拟门锁打开和关闭。通过OpenMV4摄像头进行人脸识别,并检查是否为特定人员,如果是则打开门禁并亮绿灯,相反则红灯闪烁,提示非法用户。

二、系统设计

OpenMV4摄像头承担2个功能:主控和摄像头。首先循环采集图像,比对OpenMV4中已经保存的人脸特征,找出最匹配的人脸。如果是则通知舵机运转,同时打开绿色LED提示开门;否则打开红色LED告警。具体业务流程为:图像采集、人脸检测、特征比对、控制输出。

三、项目硬件

  1. OpenMV4摄像头
    OpenMV4摄像头是一款小巧,低功耗,低成本的电路板,可以很轻松的完成机器视觉应用。可以通过高级语言Python脚本(准确的说是MicroPython)进行编程。OpenMV4搭载STM32H743VI ARM Cortex M7 处理器,480 MHz,内置1MB RAM和2 MB flash。
  2. MG90S舵机
    MG90S是一个360度舵机,通过输出PWM波来控制。舵机会根据信号的占空比来计算需要转动的速度和方向,用于模拟门锁的开关。

四、具体实现

  1. 本地样本图像库
    在OpenMV4摄像头的TF卡中新建singtown文件夹,其中再新建10个人员文件夹,按照序号,第一个人的图片保存到s1文件夹,第二个人的图片保存到s2文件夹,以此类推,用于人脸检测比对。
  2. 人脸检测
    由于OpenMV4性能有限,使用LBP特征进行人脸识别。具体源码如下:
    import sensor, time, image
    from pyb import Servo
    from pyb import LED
    sensor.reset() # Initialize the camera sensor.
    s1 = Servo(1) # P7
    red_led = LED(1)
    green_led = LED(2)
    sensor.set_pixformat(sensor.GRAYSCALE)
    sensor.set_framesize(sensor.HQVGA)
    sensor.set_windowing((92,112))
    sensor.skip_frames(10) # Let new settings take affect.
    sensor.skip_frames(time = 5000) #等待5s
    NUM_SUBJECTS = 2
    NUM_SUBJECTS_IMGS = 20
    img = sensor.snapshot()
    d0 = img.find_lbp((0, 0, img.width(), img.height()))
    #d0为当前人脸的lbp特征
    img = None
    pmin = 999999
    num=0
    def min(pmin, a, s):
        global num
        if a<pmin:
            pmin=a
            num=s
        return pmin
    for s in range(1, NUM_SUBJECTS+1):
        dist = 0
        for i in range(2, NUM_SUBJECTS_IMGS+1):
            img = image.Image("singtown/s%d/%d.pgm"%(s, i))
            d1 = img.find_lbp((0, 0, img.width(), img.height()))
            #d1为第s文件夹中的第i张图片的lbp特征
            dist += image.match_descriptor(d0, d1)
        pmin = min(pmin, dist/NUM_SUBJECTS_IMGS, s)
    print(pmin)
    print(num)
    if num == 2:
        img.draw_rectangle(r)
        s1.angle(100) # 控制舵机旋转到100度
        green_led.on()
        time.sleep(3) # 等待3秒钟
        s1.angle(0) # 将舵机归位到0度
        green_led.off()
    else:
        red_led.on()
        time.sleep(3) # 等待3秒钟
        red_led.off()
  3. 舵机控制
    使用OpenMV的Servo库,人脸识别准确时旋转100度,等待3秒后归位。
    s1.angle(100) # 控制舵机旋转到100度
    time.sleep(3) # 等待3秒钟
    s1.angle(0) # 将舵机归位到0度
  4. LED控制
    使用OpenMV的LED库,人脸识别准确时绿灯亮3秒,错误时红灯亮3秒。
    red_led.on()
    time.sleep(3) # 等待3秒钟
    red_led.off()

五、运行测试

系统进行了实际测试,通过OpenMV4摄像头识别特定人脸,并控制舵机模拟门锁开关,同时LED指示灯相应变化。测试结果表明,系统能够准确识别人脸并执行相应操作。

更多详细测试内容和视频,请查看原帖子。

最后,感谢DigiKey和eeworld组织的活动。

本文基于原帖子整理,如需查看完整内容、图片和视频,请访问:【2024 DigiKey 创意大赛】人脸识别门禁系统设计与实现

原帖子内容来源:https://bbs.eeworld.com.cn/thread-1298155-1-1.html



进入嵌入式查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • FollowMe 第二季:3 - EK_RA6M5 开发板入门

  • FollowMe 第二季: 1 Adafruit Circuit Playground Express及任务讲解

  • Azure RTOS step by step workshop

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • 从0到1:树莓派与物联网教程(英文)

精选电路图
  • PCM2707 USB音频数模转换芯片声卡

  • TDA2050立体声音频功率放大器

  • 基于LM317和TIP42的40V 2A电源

  • 序列式刹车/转向灯

  • 使用 PMIC 延长便携式应用中的电池寿命

  • 智能工厂的智能电源设计

    相关电子头条文章