【EsDA应用】10分钟快速实现人脸识别

原创 ZLG致远电子 2023-06-01 11:36
人脸识别是一种高安全性的生物识别技术,在安防、身份验证等领域被广泛应用。本文主要介绍如何基于EsDA设计的人脸特征值提取节点和特征值比对节点,快速实现人脸识别功能。


  简介

人脸识别是一种高安全性的生物识别技术,在安防、身份验证等领域被广泛应用。本文在【EsDA应用】5分钟快速实现图像人脸检测的基础上,使用M6G2C核心板,简单介绍如何基于EsDA设计的人脸特征值提取节点和特征值比对节点,快速实现人脸特征值提取和比对识别。


  前期准备

若是刚开始接触EsDA,可先阅读EsDA其他系列文章,从零开始搭建环境和掌握基本开发流程,已有基础的可以跳过:

  • EsDA MPC-ZC1 入门(一)—— 软件安装

  • EsDA MPC-ZC1入门(二)—— LED控制

  • 【EsDA应用】5分钟快速实现摄像头图像采集

  • 【EsDA应用】5分钟快速实现图像人脸检测

1. 硬件准备

1.1 准备一个摄像头,这里我们以OV7725摄像头为例,搭配转接板使用。
1.2 准备一块LCD显示屏(非必须)。
1.3 准备一张SD卡,用于存放人脸模型。
1.4 准备一块M6G2C核心板和EPC-6G2C-L评估板,并按照下图所示连接好硬件。其中,eth0网口用于下载流图,并连接LCD显示屏接口、电源,以及将OV7725摄像头通过转接板连接到开发板背面的CSI接口上。

2. 其它准备

将人脸检测和特征值提取相关的模型参数文件存放到SD卡中。


  节点介绍

这里我们需要使用到摄像头、图像格式转换以及人脸检测、特征值提取、特征值比对相关的AWFlow节点,包括在《【EsDA应用】5分钟快速实现摄像头图像采集》中介绍的camera_video节点、camera配置节点、lcd_display节点,在《【EsDA应用】5分钟快速实现图像人脸检测》中介绍的image_format_convert转换节点、face_detection人脸检测节点,以及本文介绍的用于人脸特征值提取的face_character_extract节点和用于特征值比对的face_character_compare节点。

1. face_character_extract节点

face_character_extract是人脸的特征值提取节点,该节点对输入的人脸图像数据进行特征值提取,并输出提取的特征值信息。后级节点可以将这个特征值进行存储,也可以与已有的特征值信息进行比对和匹配识别。

1.1 属性

  • 名称:节点的名称;
  • 显示名称:节点在画布中显示的名称;
  • 模型和参数路径:特征值提取相关的模型和参数文件的路径。
1.2 输入
  • image:需要进行特征值提取的人脸图像数据缓冲区,一般由face_detection检测节点提供输入,face_detection检测到图像中存在人脸时,才将数据输入到这里进行特征值提取(通常这正是我们想要的)。

1.3 输出
  • character:人脸的特征值。人脸信息一般都会提取成一段特定大小的特征值,方便我们进行存储(录入)和比对(识别)。
2. face_character_compare节点
face_character_compare是人脸的特征值比对节点,该节点一般由face_character_extract节点提供特征值输入,并从文件/数据库中获取已经录入信息的特征值集合。

2.1 属性

  • 比对阈值:比对阈值是一个0.1~0.9范围内的数字,数字越大,对特征值的匹配程度要求就越高,识别的准确度也越高;

2.2 输入
  • character:待比对的人脸特征值,一般由face_character_extract节点提供特征值输入;

  • character_target:比对的目标特征值集合,一般是由我们已经录入/注册的特征值文件/数据库提供;

  • target_num:目标特征值集合的特征值数量。

2.3 输出

  • result:比对结果,如果输入中的character与character_target中的某一个匹配成功的话,输出1;都不匹配则输出0;

  • id:匹配成功的话,输出第一个匹配的特征值在特征值集合character_target中的序号,匹配失败输出-1。


  业务处理

本应用主要实现如下功能:

  1. 采集摄像头图像,并在LCD显示屏上进行显示(显示可选);

  2. 将摄像头输出的原始数据进行格式转换后,输入到face_detection节点中进行人脸检测;

  3. 将检测结果输入到face_character_extract节点提取特征值;

  4. 通过face_character_compare节点进行特征值比对识别;

  5. 注册特征值,这里我们为了方便演示,只是简单地通过face_data_write节点将特征值保存到文件中;

  6. 通过GPIO输入来控制特征值录入。

具体实现如下:

1. 添加节点并连线

首先,我们添加流图左上角的部分,主要完成图像的输入和人脸的检测;左下部分我们简单地通过一个IO输入来控制是否将特征值进行注册;然后,添加一个特征值提取节点;右下部分主要完成两个功能,分别是特征值的注册,以及特征值的比对识别。

2. 配置节点
2.1 图像输入和人脸检测
本应用左上部分的六个节点主要完成图像采集输入和人脸的检测部分,其配置方式与【EsDA应用】5分钟快速实现图像人脸检测 4.2 配置节点 部分完全相同,请参考之。

2.2 配置face_character_extract节点

使用人脸特征值提取节点需要将相关的模型文件存放到文件系统中,并在节点中指定模型存放的路径,这里我们存放到SD卡中,并指定路径。

2.3 face_character_compare节点

face_character_compare节点我们只需要指定比对阈值即可,这里我们设置为0.7。

2.4 face_data_write和face_data_read

这两个节点是为了方便演示。face_data_write节点简单地将特征值保存到文件,而face_data_read从文件中读取特征值,我们指定特征值文件路径即可。

2.5 gpio_in

为了方便演示,本应用简单地通过IO引脚的电平高低来控制是否录入人脸特征值。这里我们选择了EPC-6G2C-L评估板的RX8引脚,其对应编号为90,并将其设置为默认下拉模式,当输入高电平时进行人脸信息的录入。

2.6 fscript节点

其余的五个节点均为fscript节点,分别用于控制本应用的逻辑以及输出结果。demo流图中对这些fscript进行了编号,它们的内容分别如下:

2.6.1 是否录入人脸信息

这个节点判断gpio_in输入的IO电平状态,通过设置全局标志位来控制是否进行人脸录入。这里我们设置当处于低电平状态时,进行人脸识别;而在输入高电平状态时,录入人脸信息。
if(msg.payload == 0) {     global.face_recognition = 1     global.face_register = 0} else {    print("......录入人脸信息中......")    global.face_register = 1    global.face_recognition = 0}

2.6.2 register_chk

register_chk判断前面设置的标志,当不需要录入人脸信息时(即IO处于低电平),通过aborted=1放弃向后面的节点传递数据;否则(此时IO处于高电平)设置一个命令给face_data_write节点。
if (global.face_register == 0) {    aborted = 1;} else {    msg.register_cmd = "register";}
2.6.3 recognition_chk
如果此时正在录入人脸信息(IO处于高电平),则通过aborted放弃后面的特征值比对环节。
if (global.face_recognition == 0) {    aborted = 1;}
2.6.4 录入人脸信息结果

我们在face_data_write节点后面添加打印信息,当face_data_write成功将特征值录入到文件中后,会告诉我们当前录入的是第几个人脸信息。

print("特征值注册成功,当前是第 " + msg.id + "个");
2.6.5 特征值比对结果

打印特征值比对的结果,如果比对成功的话,打印出与之匹配的人脸ID。

print("特征值比对结果:" + msg.result);if(msg.result == 1) {    print("特征值比对成功,匹配的人脸ID是:" + msg.id);} else {    print("特征值比对失败,请先注册人脸信息");}
3. 下载验证
因为M6G2C开发板是通过网口去下载流图,打开AWFlow Designer后,AWFlow Designer可以自动发现网络上的设备。选择当前设备M6G2C,然后点击下载运行即可。

3.1 图像采集显示

流图下载完成后,通过LCD可以看到,我们已经成功从摄像头获取图像,并且成功在显示屏上显示。

3.2 人脸检测、特征值提取比对

从打印信息中我们可以看到,坐标点已经被输出出来了,所以人脸检测功能是正常的。但是,一开始我们并没有录入任何人脸信息,因此特征值文件(即/flow/face_data.txt)并不存在,所以提示特征值比对失败。

3.3 特征值录入

当我们将RX8接入3.3V后,系统就进入了录入人脸信息的模式。此时我们可以通过摄像头录入人脸信息。

3.4 特征值比对识别

特征值信息录入完毕后,我们可以将RX8引脚置低,使系统回到特征值比对识别模式。现在,我们就可以和已经录入的特征值集合比对成功了。而没有录入的人脸,依然无法通过识别。

4. 扩展应用

本应用中,当特征值比对完成后,只是简单地输出比对的结果,这样我们可能感受不到它实际的用处:
print("特征值比对结果:" + msg.result);if(msg.result == 1) {    print("特征值比对成功,匹配的人脸ID是:" + msg.id);} else {    print("特征值比对失败,请先注册人脸信息");}

4.1 应用1

但是,如果我们简单的改造一下,比如在识别成功后,发出一个高电平,或者一条指令,这样,一个基于人脸识别的门禁系统,是不是已经有了雏形了呢?
//以下内容仅供示例print("特征值比对结果:" + msg.result);if(msg.result == 1) {    set(flow.gpio_out_ctl_door, 1);    // 让控制门禁的IO输出1} else {    set(flow.warn_led, blinking);      // 比对失败,可以让告警灯闪烁等等}
4.2 应用2
又或者,当匹配到一个已经录入系统中的人脸时,将特征值ID和当前时间记录到数据库中,一个基于人脸识别的考勤系统,其核心功能是不是已经实现了呢?
print("特征值比对结果:" + msg.result);if(msg.result == 1) {    var dt = date_time_create();     //获取当前时间    var str = "ID:" + msg.id + "\t" + dt.year + "-" + dt.month + "-" + dt.day + " " + dt.hour + ":" + dt.minute + ":" + dt.second + "\n"    print(str);    file_write_append("/flow/attendance_records.txt", str);    //将ID和时间信息写入到考勤记录文件} else {    print("Please try again");        //提示用户失败重试}


  技术交流群
长按识别如下二维码可加入“EsDA嵌入式系统设计自动化交流群”,与志同道合的朋友交流,并有专业技术人员为您答疑解惑,如有问题可以咨询小致微信zlgmcu-888。

更多往期文章,请点击“ 阅读原文 ”。

评论
  • 遇到部分串口工具不支持1500000波特率,这时候就需要进行修改,本文以触觉智能RK3562开发板修改系统波特率为115200为例,介绍瑞芯微方案主板Linux修改系统串口波特率教程。温馨提示:瑞芯微方案主板/开发板串口波特率只支持115200或1500000。修改Loader打印波特率查看对应芯片的MINIALL.ini确定要修改的bin文件#查看对应芯片的MINIALL.ini cat rkbin/RKBOOT/RK3562MINIALL.ini修改uart baudrate参数修改以下目
    Industio_触觉智能 2024-12-03 11:28 84浏览
  • 作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了!没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢?1.1  USB扩网口通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、
    万象奥科 2024-12-03 10:24 68浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2024-12-02 10:40 120浏览
  • TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳定等特点。适用于投影仪的无感自动对焦和梯形校正、AIoT、手势识别、智能面板和智能灯具等多种场景。                 如果用ND06进行手势识别,只需要经过三个步骤: 第一步&
    esad0 2024-12-04 11:20 50浏览
  • 戴上XR眼镜去“追龙”是种什么体验?2024年11月30日,由上海自然博物馆(上海科技馆分馆)与三湘印象联合出品、三湘印象旗下观印象艺术发展有限公司(下简称“观印象”)承制的《又见恐龙》XR嘉年华在上海自然博物馆重磅开幕。该体验项目将于12月1日正式对公众开放,持续至2025年3月30日。双向奔赴,恐龙IP撞上元宇宙不久前,上海市经济和信息化委员会等部门联合印发了《上海市超高清视听产业发展行动方案》,特别提到“支持博物馆、主题乐园等场所推动超高清视听技术应用,丰富线下文旅消费体验”。作为上海自然
    电子与消费 2024-11-30 22:03 98浏览
  • 最近几年,新能源汽车愈发受到消费者的青睐,其销量也是一路走高。据中汽协公布的数据显示,2024年10月,新能源汽车产销分别完成146.3万辆和143万辆,同比分别增长48%和49.6%。而结合各家新能源车企所公布的销量数据来看,比亚迪再度夺得了销冠宝座,其10月新能源汽车销量达到了502657辆,同比增长66.53%。众所周知,比亚迪是新能源汽车领域的重要参与者,其一举一动向来为外界所关注。日前,比亚迪汽车旗下品牌方程豹汽车推出了新车方程豹豹8,该款车型一上市就迅速吸引了消费者的目光,成为SUV
    刘旷 2024-12-02 09:32 119浏览
  • 11-29学习笔记11-29学习笔记习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-02 23:58 71浏览
  • RDDI-DAP错误通常与调试接口相关,特别是在使用CMSIS-DAP协议进行嵌入式系统开发时。以下是一些可能的原因和解决方法: 1. 硬件连接问题:     检查调试器(如ST-Link)与目标板之间的连接是否牢固。     确保所有必要的引脚都已正确连接,没有松动或短路。 2. 电源问题:     确保目标板和调试器都有足够的电源供应。     检查电源电压是否符合目标板的规格要求。 3. 固件问题: &n
    丙丁先生 2024-12-01 17:37 100浏览
  • 当前,智能汽车产业迎来重大变局,随着人工智能、5G、大数据等新一代信息技术的迅猛发展,智能网联汽车正呈现强劲发展势头。11月26日,在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上,紫光展锐与上汽海外出行联合发布搭载紫光展锐A7870的上汽海外MG量产车型,并发布A7710系列UWB数字钥匙解决方案平台,可应用于数字钥匙、活体检测、脚踢雷达、自动泊车等多种智能汽车场景。 联合发布量产车型,推动汽车智能化出海紫光展锐与上汽海外出行达成战略合作,联合发布搭载紫光展锐A7870的量产车型
    紫光展锐 2024-12-03 11:38 101浏览
  • 概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解决的问题。本文在说明(三)的基础上,继续探讨为SiPM读出测试系统寻求合适的模拟脉冲检出方案。前四代SiPM使用的高速比较器指标缺陷 由于前端模拟信号属于典型的指数脉冲,所以下降沿转换速率(Slew Rate)过慢,导致比较器检出出现不必要的问题。尽管比较器可以使能滞回(Hysteresis)模块功
    coyoo 2024-12-03 12:20 111浏览
  •         温度传感器的精度受哪些因素影响,要先看所用的温度传感器输出哪种信号,不同信号输出的温度传感器影响精度的因素也不同。        现在常用的温度传感器输出信号有以下几种:电阻信号、电流信号、电压信号、数字信号等。以输出电阻信号的温度传感器为例,还细分为正温度系数温度传感器和负温度系数温度传感器,常用的铂电阻PT100/1000温度传感器就是正温度系数,就是说随着温度的升高,输出的电阻值会增大。对于输出
    锦正茂科技 2024-12-03 11:50 109浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦