【ESP32】ESP32-Face人脸识别过程概述

  1. FRMN

FRMN 是一个轻量级的人脸识别模型,专门应用与嵌入式设备,由 MobileNetV2ArcFace Algorithm 结合成。

1.1 介绍

FRMN模型建立在MobileNetV2上。在训练中,使用ArcFace算法,而不是传统的Softmax函数和交叉熵损失函数。为了降低计算复杂性,在训练中使用了较小尺寸(56x56)的图像。

1.2 人脸识别过程

以下步骤是人脸识别的整个过程:

1.获取输入图像,类型为320x240分辨率。

2.启动人脸识别并获取面部 的landmark关键信息坐标。

3.使用“landmark关键信息坐标,对齐面部信息,并获得面部图像的规格。align_face

4.将对齐的面部图像输入到人脸识别算法,并生成Face IDget_face_idrecogze_face

5.将新生成的 face id 和现有的 face ids进行比较,然后获取两个face id之间的距离(通常为欧几里德距离或余弦距离)

6.通过比较这两个face ID之间的距离和指定阈值,确定这两个 face ID是否来自同一个人。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gyPi9oqp-1669881214820)(…/img/face-recognition-system.png)]

1.3 API 函数介绍

  • FACE_REC_THRESHOLD: 人脸识别阈值,默认配置为“0.7”并以余弦距离测量。

    • -距离大于“Face_REC_THRESHOLD”的任何两个face ID均视为同一个人。
    • -降低此参数可提高识别率;并增加该参数以降低错误识别率。
  • NOSE_EYE_RATIO_THRES_MIN: 鼻子与左眼距离和鼻子与右眼距离的 最小比率的阈值。

    • -任何比率低于阈值的人脸图像将被视为不合格图像并被过滤掉。
    • -降低此参数可提高面对齐的通过率。注意,这也导致在人脸识别中使用质量较差的图像。
  • NOSE_EYE_RATIO_THRES_MAX:鼻子与左眼距离和鼻子与右眼距离的 最大比率的阈值。

    • -任何比率高于阈值的人脸图像将被视为不合格图像并被过滤掉。
    • -增大此参数可提高面对齐的通过率。注意,这也导致在人脸识别中使用质量较差的图像。
  • FLASH_INFO_FLAG: ID数据标志。每当此标志打开时,ID数据存储在 flash中

  • FLASH_PARTITION_NAME: 存储face ID的 flash 分区的名称,该名称与csv文件分区中使用的名称相同。

1.4 选择识别模型

目前为止有五种可供选择的模型:

  • FRMN
  • MFN56_1X
  • MFN56_2X
  • MFN56_3X
  • MFN56_4X

准确率: MFN56_4X > MFN56_3X > MFN56_2X > MFN56_1X > FRMN

1.4.1 模型比较

ModelFRMNMFN56_1XMFN56_2XMFN56_3XMFN56_4X
Functionfrmn_qmfn56_42mmfn56_72mmfn56_112mmfn56_156m
Size1.2MB1.6MB2.0MB2.4MB3.7MB
Time363ms455ms738ms1150ms1540ms

1.5 注意事项

使用 Face Recognition Lib 时的注意事项:

  • 输入图像的格式必须为 56x56 的RGB 图像。使用其他尺寸的图像可能会降低正确识别率

  • 调用align_face() 函数开始人脸对齐(face alignment),调用函数之后,使用对齐的图像进行人脸识别

  • 若想使用 frmn_q()函数生成 face ids,请首先使用 transform_frmn_input() 函数使输入图像标准化并固定指向。

  • cos_distance()euclidean_distance() 这两个函数分别用于计算两个 face ids 的距离,分别以余弦距离和欧几里德距离表示。

    • Cosine distance:范围: [-1,1] ,两个 face ids 的距离越大,相似度越高
    • Euclidean distance: 范围: [0,4], 两个 face ids 的距离越大,相似度越高
  • 若想在flash中存储 face id,而不是在 ram中,请先配置好 flash 分区的csv文件, partitions.csv文件

  • 存储在 ram 中的数据采取 face_id_list的格式,而存储在 flash 中的数据格式如下:

    • 0-31B信息,检查flash中的内容

    • 32-39B Len,用于指示flash中ID的数量

    • 40-4095B预留

    • 每个id需要2KB,从4096B开始

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在ESP32-S3上实现人脸识别,你可以按照以下步骤进行操作: 1. 在你的ESP32-S3源文件目录下,找到`esp32-opencv-master/esp32s3/scripts/`文件夹,并打开`build_opencv_for_esp32s3.sh`脚本文件。这个脚本文件用于编译OpenCV库的不同模块,确保在`OPENCV_MODULES_LIST`变量中包含了`core`,`imgproc`,`imgcodecs`,`objdetect`,`zlib`等人脸识别所需的模块。 2. 在ESP32-S3上连接到ESP32-EYE的热点。可以在手机的设置中找到Wi-Fi连接,并选择连接到ESP32-EYE的热点。然后在浏览器中输入`192.168.1.4/face_stream`,你将能够看到ESP32-EYE摄像头上的图像。 3. 使用从https://github.com/joachimBurket/esp32-opencv的TTGO Demo作为基础,开始编写你的人脸识别代码。在这个Demo中,你将需要使用`objdetect`库来实现人脸检测。通过将这个库进行静态编译,你可以在ESP32-S3上运行人脸识别或其他检测功能。 以上是在ESP32-S3上实现人脸识别的一般步骤。你可以根据具体的需求和代码库进行调整和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【EPS32S3学习笔记】ESP32+OPENCV+人脸识别 本地部署](https://blog.csdn.net/lunzilx/article/details/130192521)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ESP32-S3-EYE开发板开箱体验 esp-who](https://blog.csdn.net/u012294613/article/details/129673477)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步、至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值