用STM32人工智能开发板打造人脸识别项目
▲硬件介绍
电源电路:开发板采用USB 5v供电,从左至右依次是输入、接地、输出。此外C2和C3是输出滤波电容,作用是抑制自激振荡,如果不接这两个电容,通常线性稳压器的输出会是个振荡波形。
C4是输入电容,对于交流电压整流输入,它们的第一个作用是把单向脉动电压转换成直流电压,在本图中输入已经是 5V直流电源了,它们的作用就是防止断电后出现电压倒置,因此通常输入电容的容量应该大于输出电容。
如下图:
USB转串口电路:开发板采用CH340作串口芯片, CH340 是一个USB 总线的转接芯片,实现USB 转串口、USB 转IrDA 红外或者USB 转打印口。 在串口方式下,CH340 提供常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB 总线
Led指示电路:开发板采用d2作Led指示,高电平点亮。
▲开发板核心:STM32F407VGT6
- STM32F407VGT6参数:32位Flash MCU,USB,CAN,11个计时器,3个ADC和13个通信接口
- 制造商: STMicroelectronics
- 产品种类: ARM微控制器 – MCU
- 核心: ARM Cortex M4
- 数据总线宽度: 32 bit
- 最大时钟频率: 168 MHz
- 程序存储器大小: 1 MB
- 数据 RAM 大小: 192 kB
- ADC分辨率: 12 bit
- 工作电源电压: 1.8 V to 3.6 V
- 最大工作温度: 85 C
- 安装风格: SMD/SMT
- 商标: STMicroelectronics
- 数据 Ram 类型: SRAM
- 接口类型: CAN, I2C, I2S, SPI, UART
- 最小工作温度: – 40 C
- ADC通道数量: 16
- 输入/输出端数量: 82 I/O
- 计时器/计数器数量: 10 Timer
下载接口:swd
SWD,全称是Serial Wire Debug(串行调试),它的接线方式较JTAG简单,2线式:SWDIO–串行数据线、SWDCLK–串行时钟线,一般在设计PCB时,会预留4个2.54mm的排座,这种接线方式适合引脚少的芯片,充分利用芯片资源
▲以太网通信LAN8720:
LAN8720A 是低功耗的 10/100M 以太网 PHY 层芯片, I/O 引脚电压符合 IEEE802.3-2005 标准,支持通过 RMII 接口与以太网 MAC 层通信,内置 10-BASE-T/100BASE-TX 全双工传输模块,支持 10Mbps 和 100Mbps。
LAN8720A 可以通过自协商的方式与目的主机最佳的连接方式(速度和双工模式),支持 HPAuto-MDIX 自动翻转功能,无需更换网线即可将连接更改为直连或交叉连接。LAN8720A 的主要特点如下:
高性能的 10/100M 以太网传输模块
支持 RMII 接口以减少引脚数
支持全双工和半双工模式
两个状态 LED 输出
可以使用 25M 晶振以降低成本
支持自协商模式
支持 HP Auto-MDIX 自动翻转功能
支持 SMI 串行管理接口
支持 MAC 接口
LAN8720A 的引脚数是比较少的,因此,很多引脚具有多个功能。这里,我们介绍几个重要的设置。
1, PHY 芯片地址设置
LAN8720A 可以通过 PHYAD0 引脚来配置,该引脚与 RXER 引脚复用,芯片内部自带下拉电阻,当硬复位结束后, LAN8720A 会读取该引脚电平,作为器件的 SMI 地址,接下拉电阻时(浮空也可以,因为芯片内部自带了下拉电阻),设置 SMI 地址为 0,当外接上拉电阻后,可以设置为 1。
2, nINT/REFCLKO 引脚功能配置
nINT/REFCLKO 引脚可以用作中断输出,或者参考时钟输出。通过 LED2( nINTSEL)引脚设置, LED2 引脚的值在芯片复位后,被 LAN8720A 读取,当该引脚接上拉电阻(或浮空,内置上拉电阻),那么正常工作后, nINT/REFCLKO 引脚将作为中断输出引脚(选中 REF_CLKIN 模式)。当该引脚接下拉电阻时,正常工作后, nINT/REFCLKO 引脚将作为参考时钟输出(选中 REF_CLK OUT 模式)。
在 REF_CLK IN 模式,外部必须提供 50Mhz 参考时钟给 LAN8720A 的 XTAL1( CLKIN)引脚。
在 REF_CLK OUT 模式, LAN8720A 可以外接 25Mhz 石英晶振,通过内部倍频到 50Mhz,然后通过 REFCLKO 引脚,输出 50Mhz 参考时钟给 MAC 控制器。这种方式,可以降低 BOM成本。
3, 1.2V 内部稳压器配置
LAN8720A 需要 1.2V 电压给 VDDCR 供电,不过芯片内部集成了 1.2V 稳压器,可以通过LED1(REGOFF)来配置是否使用内部稳压器,当不使用内部稳压器的时候,必须外部提供 1.2V电压给 VDDCR 引脚。这里我们使用内部稳压器,所以我们在 LED1 接下拉电阻(浮空也行,内置了下拉电阻),以控制开启内部 1.2V 稳压器。
▲Marvell 88W8782 SDIO wifi
8782是一款高性能、低功耗、体积小SDIO接口无线模组,符合IEEE802.11N标准,并向下兼容IEEE802.11B/G标准,支持IEEE 802.11i安全协议,以及IEEE 802.11e标准服务质量,其极高的兼容性,能够快速、方便的与无线设备互相联通,支持新的64/128位WEP数据加密,支持WPA-PSK/WPA2-PSK,WPA/WPA2安全机制,无线传输速率高达150M,是普通11B产品的10倍。
2.应用领域
- 平板电脑,笔记本电脑,机顶盒
- 游戏平台
- 消费电子设备(电视,DVD播放机,蓝光播放器等)
- 手机和其他移动应用
- 影像平台(打印机,数码相机,数码相框)
- 阅读器
3.主要特性
- 符合802.11n标准,高达150Mbps的无线传输速率;
- 高集成单芯片设计,体积更小,功耗更低;
- 持深度睡眠和待机模式的低功耗操作;
- 支持客户端实施IEEE省电模式;
- 发射波束形成支持
▲摄像头OV2640
OV2640摄像头模块,采用1/4寸的OV2640百万高清CMOS传感器制作,具有高灵敏度、高灵活性、支持JPEG输出等特点,并且可以支持曝光、白平衡、色度、饱和度、对比度等众多参数设置,支持JPEG/RGB565格式输出,可以满足不同场合需求。
▲温湿度dht11
DHT11是一款有已校准数字信号输出的温湿度传感器。其精度湿度 -5%RH, 温度 -2℃,量程湿度20-90%RH, 温度0~50℃。
▲红外接口
红外发光二极管是一种能发出红外线的二极管,通常应用于遥控器等场合。常用的红外发光二极管其外形和发光二极管LED相似,发出红外光。
管压降约1.4v,工作电流一般小于20mA。为了适应不同的工作电压,回路中常常串有限流电阻。
▲音频接口
使用STM32 自带ADC对MIC进行采样
▲板载继电器
继电器是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。
▲人脸识别使用方法
开发需要具有外网访问能力,即开发板需要连接到路由器 WIFI 热点,或者通过网线将开发板连到路由。接入外部 平台的所有代码都整合在 easy-IoT.rar 中,同样的我们提供 UCOS2、 UCOS3、FreeRTOS 三个平台的代码,建议使用 UCOS2 的工程。
编译代码前需要将路由器 WIFI 热点的名字和密码修改到代码中, 具体位置为:easyiotappsrchttpdweb_cfg.c 的 default_web_cfg 函数 中。如下所示:
通常只要填写路由器热点名称和密码就可以了,开发板将会通过 DHCP 自动获得 IP 地址。特殊情况下,如果想 WIFI 网卡或者以太网卡 使用静态的 IP 地址,可以将上面对应的 auto_get 值改为 0。
开发板支持基于百度人工智能 AI 平台的图像以及语音类 AI 应用, 同时也支持接入 OneNet 物联网平台,阿里云物联网平台。由于开发版 资源限制(主要是内存限制),接入不同平台的应用不能同时运行, 我们通过一些宏开关对将运行的某个应用进行使能。
这个配置在源代码 easyiotconfigapp_cfg.h 中,用户需要根据自己想运 行的程序把对应的宏设置为 1。
百度 AI 人工智能平台提供语音识别,语音合成,人脸识别,物体识别等 AI 能力,我们只 要以 HTTPS 的方式向平台请求服务,就可以得到 AI 分析结果。在使用人脸识别功能之 前,也需要在百度平台注册,创建应用,并管理人脸库。
注册并登陆百度云平台,在控制台上选择人脸识别,进入如下界面,可以创建应用。
创建的应用默认只能访问人脸识别相关的 API,这里我们手动选上百度语音和图像识别相 关的 API 接口。这样设置的好处是我们后面的其他 AI 功能测试可以复用这个应用,而不用 再去创建新的应用。
创建好应用后,百度 AI 平台会给应用分配好 API Key 和 Secret Key,如下图所示,这两个 信息非常重要,后面我们将填写到代码中。
接下来,需要进行人脸库管理,我们需要将用户的人脸信息录入到应用中,作为后续人脸 认证的参考。如下图所示。
在应用的人脸库中新建组,并将组名填写为 test_group_1(非常重要)。
之后在这个组中创建用户,并上传用户人脸照片,注意这里的人脸照片清晰,后续识别的 准确度越高。创建用户名填写为 test_user_1(非常重要)。
到这里应用和人脸库管理就结束了。
我们把应用的 API Key 和 Secret Key 填写到代码 baidu-aibaidu_ai_face.c 对应的宏中,如下 图所示。
同时,将人脸识别应用对应的宏打开,如下,重新编译并下载代码到开发板。
人脸识别应用主要实现为一个人脸识别控制继电器开关的功能,测试时,将开发板摄像头 对准人脸(人脸相隔 40~60cm),如果开发板检查到当前人脸和人脸库中的匹配,则会使 继电器闭合,否则断开继电器。用户可以在继电器上接入小台灯来实现台灯的实时人脸控 制。
更多的创客开发板,开发套件可以直接购买啦,只需要你关注电子芯吧客微信公众号,点击菜单栏“硬件商城”!点击下方链接了解产品详情~