写点什么

HuskyLens 人工智能摄像头

发布于: 2021 年 05 月 12 日
HuskyLens人工智能摄像头

1、模块特性

HuskyLens 是一款简单易用的人工智能摄像头(视觉传感器),内置 6 种功能:人脸识别、物体追踪、物体识别、巡线追踪、颜色识别、标签(二维码)识别。仅需一个学习按键即可完成 AI 训练,摆脱繁琐的训练和复杂的视觉算法,让你更加专注于项目的构思和实现。

HuskyLens 板载 UART/I2C 接口,可以连接到 Arduino、Raspberry Pi、LattePanda、micro:bit、STM32 等主流控制器,实现硬件无缝对接,直接输出识别结果给控制器,无需折腾复杂的算法,就能制作非常有创意的项目,该智能硬件模组于 2020 年 2 月正式出售(预售价 329RMB),通过一段官方演示视频进一步了解该模组。

Huskylens 内置了许多类型的图像处理算法,可支持拍照、运算、识别和处理为一体,最终将识别结果通过 UART/I2C 输出到控制器,其接口说明如下所示:

  • USB 接口:接上电源自动开机,断掉电源自动关机,配上上位机,可以更新固件;

  • 传感器接口:支持 UART 或 I2C 协议,通过该接口,可连接常用的主控板,如 Arduino、树莓派、micro:bit;该接口也支持供电;

  • 功能按键:左右拨动,切换选择内置的功能;向下短按,调出或隐藏菜单;向下长按,进入当前功能的参数设置;

  • 学习按键:按下“学习按键”,学习指定物体。支持长按操作,长按期间,将持续学习;

  • 屏幕:2.0 寸 IPS 显示器,实时看到各种状态下的结果,方便调试,所见即所得。

2、模块功能

Huskylens 主要有六大功能,简介如下所示:

  • 物体追踪:追踪指定的物体,可以是任何有明显轮廓的物体,甚至是各种手势;

  • 人脸识别:侦测脸部轮廓,可同时识别多人;

  • 物体识别:识别这是什么物体(仅限于内置的 20 种物体);

  • 巡线追踪:识别指定的线条,并做路径规划;

  • 颜色识别:识别指定的颜色及其位置(由于光线的变化,对于相近的颜色,摄像头有时会误识别);

  • 标签识别:侦测二维码标签,识别出指定标签(目前摄像头不能识别复杂二维码,如微信上用的二维码)。

3、模块调测

由于 Huskylens 将识别的结果通过 UART/I2C 传输到控制器,所以我们只需要在 Huskylens 上训练好识别对象,解析接口协议即可,这里我使用的是 UART 通信协议(57600 (bps) 8N1),该模块的协议格式如下所示:

协议解析如下:

  • 数据头 1 和数据头 2 以 0x55 和 0xAA 固定格式开头,因为 0x55 二进制是 0101 0101,0xAA 二进制是 1010 1010,在通讯编码原理中,应该尽可能避免过多的重复 0 或 1,因为当你的传输变成一个长 0/1 时,一个脉冲干扰就会将你的数据截断,整加误码的机会。 若你的通讯机不能正确接受 10101010 或 01010101,那么你的线路等肯定出现问题。 这个只是一个快速判断线路状态的一个手段,在做内现存测试的时候也经常使用这两个数据字段,也是同样的道理;

  • 地址占用一个字节,本模块默认地址是 0x11;

  • 数据长度占用一个字节,指数据的长度,注意不是整个数据帧的长度;

  • 命令 ID 占用一个字节;

  • 数据长度为 10 位,数据信息为检测到对象的像素尺寸和对象属性,顺序为:检测对象 X 点中心低位字节、检测对象 X 点中心高位字节、检测对象 Y 点中心低位字节、检测对象 Y 点中心高位字节、检测对象宽度低位字节、检测对象宽度高位字节、检测对象高度低位字节、检测对象高度高位字节,剩余两个字节为检测到的对象;

  • 8 位累加和校验,不进位,例如:0x55+0xAA+0x11+0x0A+0x10+0x2C+0x01+0xC8+0x00+0x0A+0x00+0x14+0x00+0x01+0x00=0x23E,则校验位为 0x3E。

3.1、单对象识别

Huskylens 无需请求指令,自动发送毫秒级的设备状态数据帧,打开串口调测助手即可直接分析,下面以人脸识别功能为例,分析协议帧结构。

这里选取了周杰伦的图像作为识别对象, Huskylens 人脸识别训练操作流程如下所示:

在尚未检测到目标对象的情况下,打开串口调测助手,模组发送大量数据(均相同),选择其中一条分析。


训练周杰伦的人脸作为识别对象,如下所示:

此时模块发送的协议帧,可以识别出 0001 号 ID,也就是周杰伦的人脸图像尺寸,如下所示:


3.2、多对象识别

可以打开模块的多人脸训练模式,训练阿信为第二个识别对象,如下所示:

多人模式模块发送的协议帧中识别对象 ID 和单人模式有所区别,此时识别周杰伦(创建的第一个对象)。

模块发送协议如下所示:

其中 0xFFFE 代表多人识别中第二个对象(阿信)未识别到。

再识别阿信(创建的第二个对象),如下所示:

模块发送协议如下所示:

其中 0xFFFF 代表多人识别中第一个对象(周杰伦)未识别到。

HuskyLens 人工智能摄像头的应用就简要讲解人脸识别的功能,其他功能都是大同小异,小伙伴们了解协议帧就可以轻松应对。

4、模块应用

由于目前手头上只有 STM32 系列开发板,遂基于 STM32+HuskyLens 实现人脸识别开关灯小案例,实现代码如下所示,主要是拆解、校验协议。

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[i];        }         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);  }}
复制代码

通过设定断点可以看到每一次的上次数据和发送到串口调试助手的一致。


发布于: 2021 年 05 月 12 日阅读数: 18
用户头像

【研究方向】物联网、嵌入式、AI、Python 2018.02.09 加入

【公众号】美男子玩编程

评论

发布
暂无评论
HuskyLens人工智能摄像头