426|0

109

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【2024 DigiKey 创意大赛】人脸识别门禁系统设计与实现 [复制链接]

 

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

作者:Juggernaut

 

一、作品简介

随着科技的不断发展,人们的生活水平得到了极大的提升,与此同时人们对安全的要求也越来越高,门锁一直是一个家庭安全保障的关键性物件,门锁的发展更是经历了从普通物理门锁到密码锁、指纹锁到其它更高级利用生物特征识别技术的门锁,其中人脸识别技术为主的多功能的智能门锁成为智慧家居领域发展中极为重要一环。
本项目主要设计一个人脸识别门禁系统系统,采用星瞳科技的OpenMV4 H7 R2既承担主控功能,也承担摄像头主体,同时外接MG90S舵机用于模拟门锁打开和关闭,通过OpenMV4摄像头进行人脸识别,并检查是否为特定人员,如果是则打开门禁并亮绿灯,相反则红灯闪烁,提示非法用户。

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

三、项目硬件

  1. OpenMV4摄像头
    OpenMV4摄像头是一款小巧,低功耗,低成本的电路板,可以很轻松的完成机器视觉(machine vision)应用。可以通过高级语言Python脚本(准确的说是MicroPython),而不是C/C++。Python的高级数据结构使得很容易在机器视觉算法中处理复杂的输出。

    OpenMV4搭载STM32H743VI ARM Cortex M7 处理器,480 MHz,内置1MB RAM和2 MB flash。
  2. MG90S舵机
MG90S是一个360度舵机,本质上都是通过输出pwm波来控制的,舵机的工作原理非常简单,就是通过单片机输出的pwm波来控制,舵机会根据信号的占空比来计算需要转动的角度,而MG90S是不能控制转动的角度,因此它的占空比是用来控制舵机转动的速度和方向。

四、具体实现

  1. 本地样本图像库
    在OpenMV4摄像头的TF卡中新建singtown文件夹,其中再新建10个人员文件夹,按照序号,第一个人的图片保存到s1文件夹,第二个人的图片保存到s2文件夹…,即可,用于人脸检测比对。
  2. 人脸检测

    因为OpenMV4性能有限,没法通过nn库使用mobilenet库进行推理,只能使用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()
五、运行测试
先来张全家福,因为M90S需要单独5V供电,只能外接电源,PWM控制线接OPENMV4即可。
来个人脸测试,可以看出已经识别特定人脸,同时舵机控制门开,具体看视频。
视频在此:
OPENMV

 
附件(word+源码):
smartDoor.py (1.48 KB, 下载次数: 0)
人脸识别门禁系统设计与实现.docx (903.85 KB, 下载次数: 2)
 
最后,感谢DigiKey&eeworld组织的活动。

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表