人脸识别红外测温项目演示

Tutorial: 卓越工程师 Category: 嵌入式 Published: 2026-10-23 11:05:29 Views: 1 Likes: 0 Comments: 0

275.1人脸识别红外测温项目演示

本节展示成品效果、器件选购和通信协议,只打开了作为项目说明使用的 项目功能介绍.c,没有展示或编写 C 业务代码。该文件的内容是功能与协议清单,并非可编译源码;后续课程才开始逐项实现,因此本节不在标题下提前补入完整工程代码。下文只用课程归档源码核对演示原理和协议边界。

一、人脸识别红外测温门禁项目

1.1 功能演示

演示系统组合了 K210 人脸识别、STM32 主控、SU-03T 语音播报、GY-906 红外测温、OLED 显示、蜂鸣器和舵机门禁。演示流程如下:

  1. 人脸录入:按下复位键旁边的功能按键,STM32 向 K210 发送“开始录入”命令;摄像头检测到人脸后,K210 提取并保存特征,再回报录入成功。这里是“按复位键旁边的按键”,不是先按复位键。
  2. 人脸识别:再次把已录入的人脸置于摄像头视野内,K210 比对成功后把人脸编号发给 STM32,语音模块播报“人脸识别成功”。
  3. 门禁控制:归档源码并不是只要识别人脸就无条件开门,而是还要求当前温度低于 37 ℃。满足条件后,STM32 改变舵机 PWM 脉宽开门,并在约 7 秒后恢复原脉宽关门。
  4. 红外测温与显示:GY-906 测得的目标温度持续显示在 OLED 上。视频中把手放在传感器上方约 1 cm 时,读数约为 36 ℃。
  5. 高温报警:课程程序在温度大于 37 ℃时使蜂鸣器鸣响;温度回落后关闭蜂鸣器。
  6. 语音播报:视频中的提示音由 SU-03T 所接扬声器播放。该模块本身具备离线语音识别能力,但在本项目中主要被 STM32 当作“串口控制的语音提示模块”使用。

视频把手直接按住传感器来制造高读数,这只能作为报警功能演示,不能视为正确测温方法。MLX90614 测量的是视场内所有目标辐射形成的平均温度;目标过近、没有填满正确视场、外壳被手直接加热、目标发射率不同或传感器尚未达到热平衡,都会改变读数。普通 GY-906 模块也不应在未经标定和整机验证的情况下作为医疗体温计。

课程源码中的温度判断边界还需要注意:

温度条件蜂鸣器人脸识别后开门
temp > 37开不开
temp < 37关可以开
temp == 37关不开

这是因为程序分别使用了严格大于和严格小于,没有覆盖恰好等于 37 ℃的开门条件。实际产品通常还需要滞回、连续多次采样、异常值过滤和传感器故障判断,避免读数在阈值附近抖动时反复切换。

当前 K210 脚本把录入的人脸特征保存在 record_ftrs 运行内存列表中,没有写入 Flash 或文件。K210 复位、掉电或脚本重启后,已录入特征会丢失,需要重新录入;本演示不能等同于具有持久化用户库和安全防护的正式门禁产品。

1.2 器件购买

视频中的店铺、商品选项和价格只对应录课时页面。购买链接和套餐会变化,应以课程器件清单、实物图片、官方规格书及接口定义为准,不应只按搜索结果排名或历史价格下单。

1.2.1 K210

视频中的品牌名称应为 Sipeed,不是原稿转写的“speed speed”。课程使用的是带 K210 的 Sipeed M1 系列核心模块。M1 与 M1W 的主要区别如下:

型号K210Flash片上 SRAMWi-Fi
M1有16 MiB8 MiB无
M1W有16 MiB8 MiB有,集成 ESP8285

视频中讲师不确定 Wi-Fi 芯片是 ESP32 还是 ESP8266;Sipeed 官方资料明确给出的是 ESP8285。本项目的人脸识别与 STM32 串口通信不依赖 Wi-Fi,因此课程购买的是 M1;选择 M1W 也可以运行 K210 侧功能,但多出的无线资源并不是本项目必需项。

选购时应核对:

  • 是单独核心模块、带底板的开发套件,还是包含摄像头、屏幕和线材的套装;
  • 模块和底板版本是否与课程图片一致,摄像头接口及方向是否兼容;
  • 是否已经焊好排针。核心模块周围器件密集,焊接时间过长、焊锡桥连或机械受力都可能损坏焊盘和附近元件;
  • 是否需要 Type-C 数据线。视频所说的“选择 Type-C”是当时商品套餐中的配件选项,不代表 M1 核心模块本体带有 Type-C 插座;
  • K210 固件、MaixPy IDE 和课程模型是否适配所购开发板及 Flash 布局。

若焊接经验不足,优先选择商家已焊接并测试好的模块/底板组合。不能只看“已焊排针”四个字,还要确认排针方向、间距和底板接口完全一致。

1.2.2 其他模块

舵机、GY-906 红外温度传感器和 OLED 已在前面的单元课程中使用,本节主要补充 SU-03T 语音模块及其配件的选购。仍应核对舵机供电能力、OLED I²C 地址、GY-906 供电与上拉电压,并确保所有通信模块与 STM32 共地。

1.2.2.1 语音模块

课程使用 机芯智能 SU-03T 离线语音模块。套装可能包含模块、驻极体咪头、扬声器、电源线以及已焊接的转接板或排针。项目至少需要模块、扬声器和可靠的 5 V 电源;若只使用串口触发固定播报而不使用语音唤醒/识别,咪头不是播报链路的必需器件,但保留咪头便于后续测试模块的离线识别功能。

根据 SU-03T 官方规格:

  • 模块一般使用 5 V 供电;带 4 Ω 扬声器并以最大音量工作时,电源能力应达到 500 mA 以上;
  • 串口信号电平为 3.3 V,不能把“5 V 供电”误解为“UART 可直接接 5 V TTL”;
  • B6 可复用为 UART1_RXD,B7 可复用为 UART1_TXD;本项目把 STM32 PB10/USART3_TX 接到 B6,只使用单向控制;
  • 扬声器的两根线分别接 SPK+、SPK-,不要把其中一端误接到 GND;驻极体咪头接 MIC+、MIC-,并按极性连接;
  • 官方资料列出了调试器、串口和脱机烧录等不同方式,它们使用的接口并不完全相同,不能把烧录口与项目运行时的业务串口混为一谈。

购买前应确认套餐里的扬声器阻抗/功率、咪头类型、电源线接口和是否已烧录课程固件。店铺名称、套餐价格及附件组合会变动,不能机械照搬视频中的“21 元”“27.5 元”等历史价格。

1.2.2.2 模块实物、焊接与配件

原稿把这一段识别成了“摄像头”,但视频实际上仍在展示 SU-03T 实物及其焊接、扬声器和咪头配件。

SU-03T 裸模块不是可直接插入普通 2.54 mm 面包板的标准排针模块。视频讲师没有确认焊盘的准确间距,只说明普通 2.54 mm 排针无法直接使用;因此不能根据口述在 1.27 mm 与 2.0 mm 之间猜测,必须查看所购版本的官方机械尺寸图或转接板图纸。

若自行引线焊接,应注意:

  1. 使用与焊盘尺寸匹配的细导线或专用转接板,先固定模块和导线再焊接。
  2. 控制烙铁温度和接触时间,避免焊盘脱落、连锡或热损伤。
  3. 焊后用万用表检查相邻焊盘是否短路,再上电测试。
  4. 确认功能正常后,才可用热熔胶等方式做应力释放;胶体不要覆盖咪头声孔、散热部位、测试点或插接件。
  5. 不要把胶固定当成电气绝缘和焊点可靠性的替代品。

若不熟悉细间距焊接,购买已焊好转接板、扬声器、咪头和电源线的完整套装通常更稳妥,但仍需逐项核对线序,不能只凭插头能够插入就直接通电。

1.3 功能实现原理

1.3.1 项目功能介绍

课程把系统的三路串口概括为:

STM32 串口本工程引脚对端/用途数据方向
UART1PA9/PA10系统控制台与日志调试输出为主
UART2PA2/PA3K210 人脸识别模块双向:发送录入/删除命令,接收结果
UART3PB10/PB11SU-03T 语音模块当前业务只使用 PB10 向模块发送播报命令

完整数据流不是“三个窗口”,而是三路硬件串口承担不同职责。串口调试软件里的窗口只是查看或发送数据的工具界面,不属于 MCU 的硬件结构。

K210 与 STM32 的逻辑接线为:

K210 端STM32 端说明
IO9,映射为 UART2_TXPA3,USART2_RXK210 把识别结果发给 STM32
IO10,映射为 UART2_RXPA2,USART2_TXSTM32 把录入/删除命令发给 K210
GNDGND两端必须共地

视频采用“USB 某侧第几个针”的方式描述实物位置,但不同底板、安装方向和硬件版本可能不同,而且口述中第五/第六针的方向容易混淆。应优先按课程 face.py 中的 IO9/IO10 映射、开发板丝印和对应版本原理图接线,再遵守 TX 接对端 RX、RX 接对端 TX 的交叉规则。

课程协议没有采用可读字符串,而是使用固定长度的十六进制字节帧。

K210 → STM32:识别结果帧(4 字节)

事件完整帧字段解释
人脸录入成功AF 05 00 FA帧头 AF,命令 05,参数 00,帧尾 FA
人脸识别成功AF 02 NN FANN 为匹配到的人脸索引
清除人脸成功AF 01 00 FA命令 01 表示清除完成

原稿中的 A5 05 00 0F A 是 OCR 和断句错误,正确数据是 AF 05 00 FA。

STM32 → K210:控制命令(4 字节)

操作完整帧K210 动作
清除人脸A1 01 02 1A清空运行内存中的全部已录入特征,再回发删除成功帧
开始录入A1 02 00 1A将录入标志置位,在检测到下一张有效人脸后保存特征

视频口述“删除一个人脸数据”,但配套 K210 函数实际调用 record_ftrs.clear(),会清空当前运行中的全部人脸特征,不是按编号删除单个人脸。

STM32 → SU-03T:语音命令(5 字节)

播报内容完整帧当前 STM32 业务代码
人脸录入成功AA 55 01 55 AA已发送
人脸识别成功AA 55 02 55 AA已发送
人脸删除成功AA 55 03 55 AA已发送
温度异常AA 55 04 55 AA项目说明中列出,但归档 main.c 未发送

因此,“温度异常语音播报”属于协议清单中的规划项,当前归档实现只有温度大于 37 ℃时的蜂鸣器报警,不能把规划帧写成已经完成的演示功能。

三条主要业务链如下:

  1. 录入链:按下录入键 → STM32 发送 A1 02 00 1A → K210 在检测到人脸后保存特征 → 回发 AF 05 00 FA → STM32 发送录入成功语音帧。
  2. 删除链:按下删除键 → STM32 发送 A1 01 02 1A → K210 清空全部运行时特征 → 回发 AF 01 00 FA → STM32 发送删除成功语音帧。
  3. 识别开门链:K210 匹配成功 → 回发 AF 02 NN FA → STM32 播报识别成功并设置识别标志 → 当前温度低于 37 ℃时驱动舵机开门 → 约 7 秒后复位舵机。

K210 会在摄像头连续帧中重复识别同一张脸。STM32 源码用 5 秒的 tick 间隔限制重复播报和重复触发;舵机关闭则使用 7 秒间隔。本工程 RT_TICK_PER_SECOND 为 1000,所以 5 * 1000 和 7 * 1000 分别对应约 5 秒和 7 秒。若以后修改系统 tick 频率,直接写死 1000 的时间换算也必须同步检查。

当前实现还有一个状态边界:识别成功后,face_check_flag 只有在温度低于 37 ℃并开门时才被清零。如果识别时温度过高,标志会保留;之后温度降到 37 ℃以下,程序可能在没有再次识别人脸的情况下开门。学习时应把它理解为归档代码的实际行为,而不是完整门禁应有的安全策略。

从硬件角度看,除三路串口外,项目还使用 PB1/TIM3_CH4 输出舵机 PWM、PB6/PB7 连接 GY-906 与 OLED 的两线总线、PB8 驱动蜂鸣器。舵机和语音功放具有明显的瞬态电流,供电不足可能导致 STM32 或 K210 复位;整机调试时应保证电源有余量、舵机宜单独供电且所有模块共地。

参考资料