6007| 4
|
[项目分享] HuskyLens人工智能摄像头 |
本帖最后由 不脱发的程序猿 于 2020-9-25 13:40 编辑 1、模块特性 HuskyLens是一款简单易用的人工智能摄像头(视觉传感器),内置6种功能:人脸识别、物体追踪、物体识别、巡线追踪、颜色识别、标签(二维码)识别。仅需一个学习按键即可完成AI训练,摆脱繁琐的训练和复杂的视觉算法,让你更加专注于项目的构思和实现。 HuskyLens板载UART/I2C接口,可以连接到Arduino、Raspberry Pi、LattePanda、micro:bit、STM32等主流控制器,实现硬件无缝对接,直接输出识别结果给控制器,无需折腾复杂的算法,就能制作非常有创意的项目。 该智能硬件模组于2020年2月正式出售(预售价329RMB),通过一段官方演示视频进一步了解该模组。 Huskylens内置了许多类型的图像处理算法,可支持拍照、运算、识别和处理为一体,最终将识别结果通过UART/I2C输出到控制器,其接口说明如下所示:
Huskylens主要有六大功能,简介如下所示:
由于Huskylens将识别的结果通过UART/I2C传输到控制器,所以我们只需要在Huskylens上训练好识别对象,解析接口协议即可,这里我使用的是UART通信协议(57600 (bps) 8N1),该模块的协议格式如下所示: 协议解析如下:
Huskylens无需请求指令,自动发送毫秒级的设备状态数据帧,打开串口调测助手即可直接分析,下面以人脸识别功能为例,分析协议帧结构。 这里选取了周杰伦的图像作为识别对象, Huskylens人脸识别训练操作流程如下所示: 在尚未检测到目标对象的情况下,打开串口调测助手,模组发送大量数据(均相同),选择其中一条分析。 训练周杰伦的人脸作为识别对象,如下所示: 此时模块发送的协议帧,可以识别出0001号ID,也就是周杰伦的人脸图像尺寸,如下所示: 3.2、多对象识别 可以打开模块的多人脸训练模式,训练阿信为第二个识别对象,如下所示: 多人模式模块发送的协议帧中识别对象ID和单人模式有所区别,此时识别周杰伦(创建的第一个对象)。 模块发送协议如下所示: 其中0xFFFE代表多人识别中第二个对象(阿信)未识别到。 再识别阿信(创建的第二个对象),如下所示: 模块发送协议如下所示: 其中0xFFFF代表多人识别中第一个对象(周杰伦)未识别到。 HuskyLens人工智能摄像头的应用就简要讲解人脸识别的功能,其他功能都是大同小异,小伙伴们了解协议帧就可以轻松应对。 4、模块应用由于目前手头上只有STM32系列开发板,遂基于STM32+HuskyLens实现人脸识别开关灯小案例,演示如下所示,主要是拆解、校验协议(演示视频)。 核心代码如下所示: [mw_shl_code=c,true]uint8_t UART2_ReceivedChar=0,check = 0; uint8_t USART2_RxData[16]; uint32_t USART2_RX_DATA_BUF_CNT=0; int8_t USART2_RX_Flag=0; uint16_t data_id=0; void USART2_IRQHandler(void) { //UART2接收数据 if(LL_USART_IsActiveFlag_RXNE(USART2)) { UART2_ReceivedChar = 0; //读取接收寄存器,读数据会清中断 UART2_ReceivedChar = LL_USART_ReceiveData8(USART2); //判断若以0x55开头,接收16个字符 if(UART2_ReceivedChar==0x55) { USART2_RX_Flag=1; } if(USART2_RX_Flag==1&&USART2_RX_DATA_BUF_CNT<16) { USART2_RxData[USART2_RX_DATA_BUF_CNT++] = UART2_ReceivedChar; } //接收16个字符后进行处理 else { //因为模块发送速度过快,需要校验 if(USART2_RxData[0]==0x55&&USART2_RxData[1]==0xAA&&USART2_RxData[2]==0x11) { //进行累加和校验,对比发送和接收的是否一致 for(int8_t i=0;i<15;i++) { LL_mDelay(10); check+=USART2_RxData; } LL_mDelay(200); //若接收正确,处理 if(check==USART2_RxData[15]) { //装载低位、高位识别对象ID data_id=USART2_RxData[14]; data_id<<=8; data_id|=USART2_RxData[13]; //未检测到周杰伦 if(data_id==0xFFFF) { //LED灯灭 LL_GPIO_ResetOutputPin(GPIOB, LL_GPIO_PIN_9); } //未检测到阿信 else if(data_id==0xFFFE) { //LED灯亮 LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_9); } } } //清除标志 USART2_RX_Flag=0; USART2_RX_DATA_BUF_CNT=0; check=0; } //清除溢出标志 LL_USART_ClearFlag_ORE(USART2); } }[/mw_shl_code] 通过设定断点可以看到每一次的上次数据和发送到串口调试助手的一致。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed