1. 产品简介

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

HuskyLens板载UART / I2C接口,可以连接到Arduino、Raspberry Pi、LattePanda、micro:bit等主流控制器,实现硬件无缝对接。HuskyLens直接输出识别结果给控制器,你无需折腾复杂的算法,就能制作非常有创意的项目。

2. 技术规格

3. 接口与按键说明

3.1 接口

小提示:

3.2 功能按键与学习按键

功能按键与学习按键的基本操作如下:

4. 升级固件

使用本产品之前,强烈建议你升级到最新版本的固件,特别是Kickstarter的众筹支持者。

4.1 windows系统

建议使用windows 10操作系统升级HuskyLens的固件,简单方便。操作步骤如下:

  1. 下载K-Flash软件。点击下载K-Flash。(如果K-Flash无法打开请先点击下载运行环境 安装再运行K-Flash)。
  2. 下载USB转串口芯片CP2102的驱动程序。点击此处 选择适合您的驱动。(注:也可使用Mind+中的一键安装驱动功能安装此驱动。)
  3. 下载固件. 点击下载V0.4.6Stable版本
    在本教程中,使用HUSKYLENSWithModelV0.4.6Stable.kfpkg固件。 更多固件版本点击查看
  4. 运行K-FLASH软件, 然后点击“...”按钮,加载固件。
  5. 请按照以下参数值,来设置 K-Flash软件:
  1. 点击“Flash”按钮。烧录过程大概需要5分钟左右。固件中有大更新,因此上传时间会有点长。

  1. 出现弹窗,提示“Successful”,则固件的升级就完成了。

4.2 linux或mac系统

使用linux或mac系统,也可以升级HuskyLens的固件。以ubuntu 18.04.4为例进行演示。

  1. 根据你的操作系统类型,安装合适的CP2102N驱动程序。点击此处 下载。

    ubuntu 18.04.4中,HuskyLens插上即可识别,可不安装驱动。

  2. 下载最新的固件和kflash.py脚本。giteegithub 查看所有版本的固件。

    在本教程中,使用HUSKYLENSWithModelV0.4.6Stable.kfpkg固件。 建议把整个HuskyLens/HUSKYLENSUploader仓库克隆到本地,方便操作。

  3. 如你的操作系统中还没有安装 pip3,请先安装。命令行如下:

sudo apt install python3-pip

mac系统中,安装pip3的命令行如下:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew install python3
  1. 安装pyserial,命令行如下:
sudo pip3 install pyserial

  1. 进入HUSKYLENSUploader文件夹。
cd HUSKYLENSUploader

  1. 运行以下命令行,上传固件:
sudo python3 kflash.py -b 2000000 HUSKYLENSWithModelV0.4.6Stable.kfpkg

  1. 等待上传完成即可。

5. 常规参数设置

5.1 设置中文语言

菜单界面的默认语言为英文。本教程使用中文语言界面。要将菜单界面的语言设置为中文,请按照如下步骤操作:

  1. 向右拨动“功能按键”,至屏幕顶端显示“General Settings”。

  2. 向下短按或长按”功能按键“,进入“General Settings”的二级菜单参数设置界面。

  3. 向右拨动“功能按键”,选择“Language”参数(位于最后一个),然后短按“功能按键”,再向右拨动“功能按键”选择“简体中文”,再短按“功能按键”,此时HuskyLens会自动切换到中文语言。

5.2 进入常规设置

进入常规设置的二级菜单并调整各个参数的操作方法如下:

  1. 选择“常规设置”:向右拨动“功能按键”,至屏幕顶端显示“常规设置”。

  2. 进入”常规设置“界面:向下短按或长按”功能按键“,即可进入

  1. 调整各个参数:向左或向右拨动“功能按键”,选择需要设置的参数,然后短按“功能按键”进入所选参数的设置,向左或向右拨动“功能按键”调整所选参数,再短按“功能按键”,确认该参数

  2. 保存并退出:参数调整完毕后,向左拨动“功能按键”,直至选择“保存并返回”,然后短按“功能按键”,屏幕上会显示“是否保存参数”的提示,默认选择“确认”,此时,短按“功能按键”即可保存设置好的参数,并自动退出“常规设置”的二级菜单界面。

小提示:

5.3 常规设置的参数项

常规设置的二级菜单参数设置界面,包含了10个不同的参数。

6. 颜色与坐标

6.1 颜色指示

各个功能中,屏幕中央的方框、“+”字的颜色定义是统一的,有助于你了解当前HuskyLens所处的状态。

颜色 状态
由橙色渐变到黄色,再由黄色渐变到橙色 未学习过,待学习
黄色 正在学习中
蓝色 已学习过,且识别到学习过的东西

RGB指示灯目前仅用于人脸识别功能的状态指示,颜色定义如下:

颜色 状态
蓝色 未学习过,侦测到人脸
黄色 正在学习中
绿色 已学习过,且识别到学习过的人脸

6.2 坐标系

当HuskyLens识别学过的物体时,在屏幕上会有彩色方框将其框选,你可以得知这些方框的坐标、长宽。HuskyLens的坐标系如下所示, 这有助于你了解彩色方框的坐标值。

7. 各功能说明

7.1 人脸识别

本功能可以侦测任何脸部轮廓;识别、追踪学习过的人脸。

识别单个人脸

默认设置为学习并识别单个人脸。

操作设置

向左拨动“功能按键”,直至屏幕顶部显示“人脸识别”。

学习与识别

  1. 侦测人脸:

    把HuskyLens对准有人脸的区域,屏幕上会用白色框自动框选出检测到的所有人脸,并分别显示“人脸”字样。

    若此时屏幕中央的“+”字没有对准任何人脸框,则另一面的RGB灯不亮。

    若此时屏幕中央的“+”字对准在任意人脸框内,则另一面的RGB灯亮蓝色。

    小提示:

    如需让HuskyLens学习或识别自己的脸,也就是自拍,此时看不到屏幕,那么可以根据RGB指示灯的不同颜色来确定状态。

  1. 学习人脸:

    将HuskyLens屏幕中央的“+”字对准需要学习的人脸,短按“学习按键”完成学习。如果识别到相同的脸,则屏幕上会出现一个蓝色的框并显示”人脸:ID1“。这说明已经可以进行人脸识别了。

    然而,上述操作只是让HuskyLens学习了人脸的一个角度(维度),但实际上人脸是立体的,因此人脸有多个角度。如果人脸角度变化了,比如正脸换成了侧脸,那HuskyLens不一定能识别出来。为解决这个问题,HuskyLens内置有持续学习的功能,能录入人脸的各个角度,让HuskyLens越学越准确。

    录入各个角度人脸的操作方法如下:(注:开始学习新的人脸之前,先要让HuskyLens忘记已经学习过的人脸。操作方法参考“忘记学过的人脸”章节。)

    将HuskyLens屏幕中央的“+”字对准需要学习的人脸,长按“学习按键”不松开,此时屏幕中会在人脸上显示黄色框并标识“人脸:ID1”,说明HuskyLens正在学习人脸。然后,将HuskyLens屏幕中央的黄色框依次对准同一个人的脸的不同角度,如正脸、侧脸(也可以是同一个人的多张照片),录入此人脸的各个角度。学习过程中,RGB灯为黄色。

    接着,松开“学习按键”,结束学习。如果HuskyLens识别到学习过的人脸,则屏幕上,这个人脸会被蓝色的框选中,并显示”人脸:ID1“。

    小提示: 如果屏幕中央没有“+”字,说明HuskyLens在该功能下已经学习过了(已学习状态)。如要让HuskyLens学习新的人脸,则需要让HuskyLens忘记已学的人脸。

  1. 人脸识别:

    HuskyLens学习过的人脸信息会自动保存起来。后续,当HuskyLens检测到学习过的人脸时,会将该人脸用蓝色方框框选出来并标识“人脸:ID1”,边框大小会随着人脸大小而变化,并自动追踪人脸。此时RGB指示灯为绿色。

  1. 忘记学过的人脸

    如果屏幕中央没有“+”字,说明HuskyLens在该功能下已经学习过了(已学习状态)。如要让HuskyLens学习新的人脸,则需要删除之前学习过的人脸信息,也就是让HuskyLens忘记已学的人脸。

    删除已学东西的操作方法如下:

    在当前功能下,短按“学习按键”,屏幕提示“再按一次遗忘!”。在倒计时结束前,再次短按“学习按键”,即可删除上次学习的东西,屏幕中央显示“+”字,说明HuskyLens已经准备好学习新东西了。如果不小心短按了“学习按键”,屏幕已经提示“再按一次遗忘!”,但又不想删除已学习的东西,那么在倒计时结束前,不要有任何操作即可。

让HuskyLens忘记所学东西的操作方法,在其他功能下,也是完全一样的,后续不再复述。

识别多个人脸

默认设置为学习并识别单个人脸。如要学习并识别多个人脸,则需要在人脸识别功能的二级菜单参数设置中打开“学习多个”选项。

操作设置

  1. 向左拨动“功能按键”,至屏幕顶部显示“人脸识别”。

  2. 长按“功能按键”,进入人脸识别功能的二级菜单参数设置界面。

  3. 向左或向右拨动“功能按键”,选中“学习多个”,然后短按“功能按键”,接着向右拨动“功能按键”打开“学习多个”的开关,即:进度条颜色变蓝,进度条上的方块位于进度条的右边。再短按“功能按键”,确认该参数。

  4. 向左拨动“功能按键”,选中“保存并返回“,短按”功能按键“,屏幕提示”是否保存参数?“。默认选择”确认“,此时短按”功能按键“,即可保存参数,并自动返回到人脸识别模式。

学习与识别

  1. 学习多个人脸:

    将HuskyLens屏幕中央的“+”字对准需要学习的人脸,长按“学习按键”完成第一个人脸的学习(各个角度)。松开”学习按键“后,屏幕上会提示:”再按一次按键继续!按其他按键结束“。如要继续学习下一个人脸,则在倒计时结束前短按“学习按键”,可以继续学习下一个人脸。如果不再需要学习其他人脸了,则在倒计时结束前短按”功能按键”即可,或者不操作任何按键,等待倒计时结束。

    本章节中,我们需要继续学习下一个人脸,因此在倒计时结束前短按“学习按键”。然后将HuskyLens屏幕中央的“+”字对准需要学习的下一个人脸,长按“学习按键”完成第二个人的脸的学习。以此类推。

    HuskyLens标注的人脸ID与录入人脸的先后顺序是一致的,也就是:学习过的人脸会按顺序依次标注为“人脸:ID1”,“人脸:ID2”,“人脸:ID3”,以此类推,并且不同的人脸ID对应的边框颜色也不同。

    小提示:如果屏幕中央没有“+”字,说明HuskyLens在该功能下已经学习过了(已学习状态)。如要让HuskyLens学习新人脸,则需要让HuskyLens忘记已学的。操作方法参考“忘记学过的人脸”章节。

  1. 识别多个人脸:

    HuskyLens学习过的人脸信息会自动保存起来。后续,当HuskyLens检测到学习过的人脸时,会将这些人脸用方框框选出来并标识ID,第一个学习的人脸标注为“人脸:ID1”,第二个学习的人脸标注为“人脸:ID2”,第三个学习的人脸标注为“人脸:ID3”,以此类推。不同的人脸ID对应的边框颜色也不同,边框大小会随着人脸大小而变化,并自动追踪人脸。

7.2 物体追踪

本功能可以学习并追踪一个指定的物体。只能追踪一个物体,暂不支持追踪多个物体。

操作设置

  1. 向左或向右拨动“功能按键”,至屏幕顶部显示“物体追踪”。

  2. 长按“功能按键”,进入物体追踪功能的二级菜单参数设置界面。

  3. 向右拨动“功能按键”,选中“学习开启”,然后短按“功能按键”,接着向右拨动“功能按键”打开“学习开启”的开关,即:进度条颜色变蓝,进度条上的方块位于进度条的右边。再短按“功能按键”,确认该参数。

  4. 同样的方法,打开“自动保存模型”的开关。

  5. 也可以设置“学习框长宽比”和“学习框大小”来调整学习框的尺寸,以便于更好的匹配所学物体的尺寸。

  6. 向左拨动“功能按键”,选中“保存并返回“,短按”功能按键“,屏幕提示”是否保存参数?“,默认选择”确认“,此时短按”功能按键“,即可保存参数,并自动返回到物体追踪模式。

学习与追踪

  1. 学习物体:

    把HuskyLens对准需要追踪的物体,调节物体与HuskyLens的距离,将物体包含在屏幕中央的橙黄色方框内。如不方便,包含特征鲜明的局部亦可。长按“学习按键”不松开,并调整角度和距离,使得HuskyLens从不同的角度和距离学习该物体。学习过程中,屏幕上的黄框会标注“学习中:ID1”。

    当HuskyLens在不同的角度和距离都能追踪到该物体时,就可以松开“学习按键”结束学习了。

    小提示: 如果屏幕中央没有橙黄色方框,说明HuskyLens之前学习过一个物体,请参照“忘记学过的人脸”章节进行操作。

  1. 追踪物体:

    移动HuskyLens或者目标物体,屏幕中的框会自动追踪目标物体。追踪物体时,会显示“学习中:ID1”,表示HuskyLens一边追踪物体,一边学习,这样设置有助于提高物体追踪的能力;也可以长按“功能按键”,进入二级菜单参数设置,选择“学习开启”,关闭此参数。

    当识别结果满足要求,达到预期效果,就可关闭一边追踪一边学习的功能,方法是:长按“功能按键”,进入物体追踪功能的二级菜单参数设置,选择“学习开启”,关闭此参数即可(进度条颜色变白,进度条上的方块位于进度条的左边)。

    小提示:

    追踪物体时,每次只能追踪一个物体,可以是任何有明显轮廓的物体,甚至是各种手势。

7.3 物体识别

本功能可识别这是什么物体,并追踪。目前仅支持20种物体,分别为:飞机、自行车、鸟、船、瓶子、巴士、汽车、猫、椅子、牛、餐桌、狗、马、摩托车、人、盆栽植物、羊、沙发、火车、电视。

20种物体的英文名称,分别为:aeroplane, bicycle, bird, boat, bottle, bus, car, cat, chair, cow, diningtable, dog, horse, motorbike, person, pottedplant, sheep, sofa, train, tvmonitor.

默认设置为只标记并识别一个物体。本章节采用标记并识别多个物体为例进行演示。

操作设置

  1. 向左或向右拨动“功能按键”,直至屏幕顶部显示“物体识别”。

  2. 长按“功能按键”,进入物体识别功能的二级菜单参数设置界面。

  3. 向左或向右拨动“功能按键”,选中“学习多个”,然后短按“功能按键”,接着向右拨动“功能按键”打开“学习多个”的开关,即:进度条颜色变蓝,进度条上的方块位于进度条的右边。再短按“功能按键”,确认该参数。

  4. 向左拨动“功能按键”,选中“保存并返回“,短按”功能按键“,屏幕提示”是否保存参数?“,默认选择”确认“,此时短按”功能按键“,即可保存参数,并自动返回到物体识别模式。

标记与识别

  1. 侦测物体:

    把HuskyLens对准目标物体,在屏幕上,会有白色框自动框选出识别到的所有物体,并显示对应的物体名称。目前只能识别并框选20种物体,其余物体无法识别和框选。

  2. 标记物体:

    把HuskyLens对准目标物体,当屏幕上显示的物体被检测到并显示其名字时,将屏幕中央的“+”字对准该物体的白色框中央,短按“学习按键”进行标记。此时,框体颜色由白色变为蓝色,并显示其名字和ID1,同时有消息提示:“再按一次继续,按其他按键结束”。如要继续标记下一个物体,则在倒计时结束前按下“学习按键”,可以继续标记下一个物体。如果不再需要标记其他物体了,则在倒计时结束前按下”功能按键”即可,或者不操作任何按键,等待倒计时结束。

    HuskyLens显示的物体ID与标记物体的先后顺序是一致的,也就是:ID会按顺序依次标注为“ID1”,“ID2”,“ID3”,以此类推,并且不同的物体ID对应的边框颜色也不同。

  1. 识别物体:

    HuskyLens再次遇到标记过的物体时,在屏幕上会有彩色的边框框选出这些物体,并显示物体名称与ID。边框的大小随着物体的大小而变化,自动追踪这些物体。同类物体,有相同颜色的边框、名字和ID。支持同时识别多类物体,比如同时识别出瓶子和鸟。

    这个功能,可以作为一个简单的筛选器,从一堆物体中找出你需要的物体,并做追踪。

    小提示:

    此功能不能区分同类物体间的不同,比如:只能识别出这是猫,但不能识别出这是什么猫。有别于人脸识别,人是一类,但可以区分不同的人脸。

7.4 巡线追踪

本功能可以追踪指定颜色的线条,做路径预测。默认设置为只追踪一种颜色的线条。本章节以只追踪一种颜色的线条为例进行说明。

操作设置

  1. 向左或向右拨动“功能按键”,直至屏幕顶部显示“巡线”。

  2. 长按“功能按键”,进入巡线功能的二级菜单参数设置界面。

  3. 向左或向右拨动“功能按键”,选中“学习多个”,然后短按“功能按键”,查看“学习多个”的开关是否处于关闭状态。如果没关,就向左拨动“功能按键”关闭“学习多个”的开关,即:进度条颜色变白,进度条上的方块位于进度条的左边。再短按“功能按键”,确认该参数。

  4. 如果环境光线比较暗,可以打开补光灯。参照上述方法,将“LED开关”打开即可。

  1. 向左拨动“功能按键”,选中“保存并返回“,短按”功能按键“,屏幕提示”是否保存参数?“,默认选择”确认“,此时短按”功能按键“,即可保存参数,并自动返回到巡线模式。

学习与追踪

  1. 学习线条:

    将HuskyLens屏幕上的“+”字对准目标线条,将橙黄色的方框对准背景色。建议HuskyLens的视野范围内只有需要学习的线条,并且没有交叉线。尽量将HuskyLens与目标线条保持平行,然后HuskyLens会自动检测线条,并出现白色的箭头。然后短按“学习按键”即可,白色箭头变成了蓝色箭头。

  1. 巡线追踪:

    当HuskyLens检测到学习过的线条时(即:同一种颜色的线条),HuskyLens的屏幕上会显示蓝色的箭头,箭头的指向表示路径预测的方向。

小提示:

7.5 颜色识别

本功能可以学习、识别、追踪指定的颜色。

默认设置为只学习、识别并追踪一种颜色。本章节采用学习、识别并追踪多种颜色为例进行说明。

操作设置

  1. 向左或向右拨动“功能按键”,直至屏幕顶部显示“颜色识别”。

  2. 长按“功能按键”,进入颜色识别功能的二级菜单参数设置界面。

  3. 向左或向右拨动“功能按键”,选中“学习多个”,然后短按“功能按键”,接着向右拨动“功能按键”打开“学习多个”的开关,即:进度条颜色变蓝,进度条上的方块位于进度条的右边。再短按“功能按键”,确认该参数。

  4. 向左拨动“功能按键”,选中“保存并返回“,短按”功能按键“,屏幕提示”是否保存参数?“,默认选择”确认“,此时短按”功能按键“,即可保存参数,并自动返回到颜色识别模式。

学习与识别

  1. 侦测颜色

    将HuskyLens屏幕中央的“+”字对准目标颜色块,屏幕上会有一个白色方框,自动框选目标颜色块。调整HuskyLens与颜色块的角度和距离,让白色方框尽量框住整个目标色块。

  2. 学习颜色

    侦测到颜色后,按下“学习按键”学习第一种颜色,然后松开“学习按键”结束学习,屏幕上有消息提示:“再按一次继续,按其他按键结束”。如要继续学习下一种颜色,则在倒计时结束前按下“学习按键”,可以继续学习下一种颜色。如果不再需要学习其他颜色了,则在倒计时结束前按下”功能按键”即可,或者不操作任何按键,等待倒计时结束。 HuskyLens显示的颜色ID与学习颜色的先后顺序是一致的,也就是:ID会按顺序依次标注为“ID1”,“ID2”,“ID3”,以此类推,并且不同颜色对应的边框颜色也不同。

  3. 识别颜色

    如HuskyLens遇到相同或近似的颜色,屏幕上会有彩色边框框选出色块,并显示该颜色的ID,边框的大小随颜色块的面积一起变化,边框会自动跟踪色块。多种不同的颜色可以同时识别并追踪,不同颜色对应的边框颜色也不同。

    当出现多个相同颜色的色块时,相隔的色块不能被同时识别,只能一次识别一个色块。

    小提示: 环境光线对颜色识别的影响很大,对于相近的颜色,HuskyLens有时会误识别。建议保持环境光线的稳定,在光线适中的环境中使用此功能。

7.6 标签识别

本功能可以侦测二维码标签;学习、识别、追踪指定的二维码标签。

默认设置为只学习、识别并追踪一个二维码标签。本章节采用学习、识别并追踪多个二维码标签为例进行说明。

操作设置

  1. 向左或向右拨动“功能按键”,直至屏幕顶部显示“标签识别”。

  2. 长按“功能按键”,进入标签识别功能的二级菜单参数设置界面。

  3. 向左或向右拨动“功能按键”,选中“学习多个”,然后短按“功能按键”,接着向右拨动“功能按键”打开“学习多个”的开关,即:进度条颜色变蓝,进度条上的方块位于进度条的右边。再短按“功能按键”,确认该参数。

  4. 向左拨动“功能按键”,选中“保存并返回“,短按”功能按键“,屏幕提示”是否保存参数?“,默认选择”确认“,此时短按”功能按键“,即可保存参数,并自动返回到标签识别模式。

学习与识别

可用下面的二维码标签来测试。

  1. 侦测标签

    当HuskyLens检测到二维码标签时,屏幕上会用白色框自动框选出检测到的所有二维码标签。

  2. 学习标签

    将HuskyLens屏幕中央的“+”字对准需要学习的标签,短按或长按“学习按键”完成第一个标签的学习。松开”学习按键“后,屏幕上会提示:”再按一次按键继续!按其他按键结束“。如要继续学习下一个标签,则在倒计时结束前按下“学习按键”,可以继续学习下一个标签。如果不再需要学习其他标签了,则在倒计时结束前按下”功能按键”即可,或者不操作任何按键,等待倒计时结束。

    本章节中,需要继续学习下一个标签,因此在倒计时结束前按下“学习按键”,然后将HuskyLens屏幕中央的“+”字对准需要学习的下一个标签,短按或长按“学习按键”完成第二个标签的学习。以此类推。

    标签ID与录入标签先后顺序是一致的,也就是:学习过的标签会按顺序依次标注为“标签:ID1”,“标签:ID2”,“标签:ID3”,以此类推,并且不同的标签对应的边框颜色也不同。

  3. 识别标签

    HuskyLens再次遇到学习过的标签时,在屏幕上会有彩色的边框框选出这些标签,并显示其ID。边框的大小会随着二维码标签的大小进行变化,边框自动追踪这些二维码标签。

7.7 物体分类

目前该功能为测试版。请参考[试用测评][二哈识图]更新啦,图片分类功能上线,解锁超多新玩法!

8. micro:bit教程

本章节使用Mind+软件和MakeCode网页版,分别用几个案例演示具体的用法。

先用mind+软件进行演示。

8.1 Mind+(基于Scratch3.0)简介

Mind+是一款基于Scratch3.0开发的青少年编程软件,支持arduino、micro:bit、掌控板等各种开源硬件,只需要拖动图形化程序块即可完成编程,还可以使用python/c/c++等高级编程语言,让大家轻松体验创造的乐趣。

8.2 Mind+加载HUSKYLENS扩展

Mind+ Mind+

8.3 mind+案例:人脸识别

本案例演示如何把HuskyLens连接到micro:bit主板,然后micro:bit主板从HuskyLens读取人脸识别结果。如果HuskyLens侦测到任意人脸,则micro:bit的点阵屏显示笑脸,否则显示哭脸。

HuskyLens与micro:bit的通信接口采用I2C接口。

准备材料

硬件连线图

下图只作为连线示意图,HuskyLens的R和T管脚(此处其功能则为SCL与SDA)分别连接到micro:bit的SCL与SDA管脚,说明HuskyLens与micro:bit的通信接口采用I2C接口。

推荐采用micro:bit扩展板,简化连线。

Mind+

小提示:

HuskyLens消耗的电流比较多,可达3.3V 320mA以上,单靠mciro:bit主板供电是不够的,因此需要外接供电,可通过micro:bit扩展板的外接供电接口或者HuskyLens的USB接口实现。

HUSKYLENS常规设置

把HuskyLens的通讯模式设置为I2C或者自动识别,推荐自动识别,无需反复调节通讯协议,简单方便。

样例代码

预期效果

8.4 Mind+模块说明

积木 说明
初始化,仅需执行一次,放在主程序开始和循环执行之间,可选择I2C或串口,I2C地址不用变动。注意HuskyLens端需要在设置中调整“输出协议”与程序中一致或者使用“自动识别”,否则读不出数据,。
切换Huslylens上算法(无需拨动机械按钮),可以随时切换到其他算法,同时只能存在一个算法,注意切换算法需要一些时间。
主控板向HuskyLens请求一次数据存入“结果”(存在主控板的内存变量中,一次请求刷新一次存在内存中的数据),之后可以从“结果”中获取数据,此模块调用之后“结果”中才会获取到最新的数据。
从请求得到的“结果”中获取是否IDx已经进行了学习
从请求得到的“结果”中获取是否IDx在画面中,方框指屏幕上目标为方框的的算法,箭头对应屏幕上目标为箭头的算法,当前仅为巡线算法时选择箭头,其他算法都选择方框。
从请求得到的“结果”中获取IDx的参数,如果此ID在画面中没有或没有学习则会返回-1
从请求得到的“结果”中获取IDx的参数,如果此ID在画面中没有或没有学习则会返回-1 ,此模块对应“巡线”算法的输出结果
从请求得到的“结果”中获取当前算法下已经学习了多少个目标,注意HuskyLens端长按选择键开启高级设置后可以设置是否学习多个目标。
从请求得到的“结果”中获取当前算法下当前视野中所有的“方框”或“箭头”的数量,包括没有学习或者已经学习的目标。
从请求得到的“结果”中获取当前算法下相同ID的目标的数量,例如两个相同的人脸照片都在视野中则此数量为2。
从请求得到的“结果”中获取当前算法下IDx的第y个方框的参数,同一个ID可能有多个目标(例如同一个人的两张照片同时出现在视野中),注意同一个ID下的目标顺序是随机的。
此积木与上一个积木效果相同,区别是此积木读取的是箭头的数据。
从请求得到的“结果”中获取当前界面中是否有方框或箭头,包含已学习(id大于0)和未学习的,有一个及以上则返回1。
从请求得到的“结果”中获取当前界面中靠近中心的方框信息,未学习的框id为0,没有则返回-1
此积木与上一个积木效果相同,区别是此积木读取的是箭头的数据。
从请求得到的“结果”中获取当前界面中第N个(顺序随机)方框信息,包含已学习(id大于0)和未学习的。
此积木与上一个积木效果相同,区别是此积木读取的是箭头的数据。

更多:Mind+有HuskyLens详细专题教程,请点击此处跳转到该教程。

下面使用makecode软件进行演示。

8.5 MakeCode简介

MakeCode 是一个免费开源平台,旨在打造有吸引力的计算机科学学习体验,为实际编程奠定基础。网页版可以在线编程和下载固件。点击进入专为micro:bit打造的makecode网页版。

8.6 MakeCode加载HUSKYLENS插件

  1. MakeCode网页版中新建一个项目,然后,点击右上方的“更多”按钮(齿轮图标),在其下拉菜单中选择“扩展”,打开扩展界面。

  1. 在搜索框中输入https://github.com/tangjie133/pxt-huskylens ,然后点击搜索按钮(搜索框右边的放大镜按钮),就能看到HuskyLens插件,然后点击它,就能把HuskyLens的插件加载进来了。

  1. 编程界面中,你就能看到Huskylens模块,点击它,就会弹出指令积木块。

8.7 makecode案例:人脸识别

本案例演示如何把HuskyLens连接到micro:bit主板,然后micro:bit主板从HuskyLens读取人脸识别结果。如果HuskyLens认出主人(学习过的人脸),则micro:bit的点阵屏显示笑脸,否则显示哭脸。

HuskyLens与micro:bit的通信接口采用I2C接口。

准备材料

硬件连线图

下图只作为连线示意图,HuskyLens的R和T管脚(此处其功能则为SCL与SDA)分别连接到micro:bit的SCL(P19)与SDA(P20)管脚,说明HuskyLens与micro:bit的通信接口采用I2C接口。

推荐采用micro:bit扩展板,简化连线。

小提示:

HuskyLens消耗的电流比较多,可达3.3V 320mA以上,单靠mciro:bit主板供电是不够的,因此需要外接供电,可通过micro:bit扩展板的外接供电接口或者HuskyLens的USB接口实现。

HUSKYLENS常规设置

把HuskyLens的通讯模式设置为I2C。

也可以设置为“自动识别模式”,无需反复调节通讯协议,简单方便。

样例代码

预期结果

  1. 上传上述代码至micro:bit主板。
  2. 参考前面讲解人脸识别功能的章节,让HuskyLens学习完一个人脸,比如你的脸。
  3. 当HuskyLens识别到你的脸后,micro:bit主板上的点阵屏会显示笑脸,如果不是你的脸,或者没有人脸出现,则显示哭脸。

8.8 MakeCode模块说明

模块 说明
初始化。只需要执行一次,放在主程序开始位置。需要将HuskyLens的接口输出协议设置为I2C或自动。初始化成功为“√”错误为“×”
切换算法(功能)。选择你需要的算法,暂时只能选择一个。切换算法需要一段时间,切换成功,切换成功为笑脸,错误则反之。
micro:bit向HuskyLens请求一次数据,并存入“结果”(存储在micro:bit的内存变量中,一次请求刷新一次存储在内存中的数据),之后可以从“结果中获取数据”。只有调用此模块之后才会得到最新的数据。
从请求得到的“结果”中获取IDx是否已经学习。
从请求得到的“结果”中获取IDx的方框或箭头是否在画面中。
从请求得到的“结果”中获取IDx方框的参数, 有:方框的中心x坐标、中心Y坐标、长度、宽度。
从请求得到的“结果”中获取IDx箭头的参数,有:X起点、Y起点、X终点、Y终点。

9. Arduino教程

本章节使用Arduino IDE,分别用几个案例演示具体的用法。

9.1 安装Arduino库

  1. 下载HUSKYLENS Arduino Library. 点击giteegithub下载。

  2. 解压下载的库文件,将“HUSKYLENS”文件夹复制粘贴至Arduino IDE所在的“libraries”文件夹下。

  3. 库文件夹的名字必须为“HUSKYLENS”。

  4. 所有.h和.cpp文件必须放在库文件夹的根目录下,绝不可以放在二级目录或文件夹中。

9.2 Arduino案例:串口打印物体坐标数据

本案例演示如何把HuskyLens连接到Arduino主板,然后Arduino主板从HuskyLens读取数据,并将读到的数据在串口监视器中打印出来。分UART模式和I2C模式,分别演示。

准备材料

UART模式

硬件连线图

HUSKYLENS常规设置

把HuskyLens的通讯模式设置为UART,波特率9600。

也可以设置为“自动识别模式”,无需反复调节通讯协议,简单方便。

样例代码

#include "HUSKYLENS.h"
#include "SoftwareSerial.h"

HUSKYLENS huskylens;
SoftwareSerial mySerial(10, 11); // RX, TX
//HUSKYLENS green line >> Pin 10; blue line >> Pin 11
void printResult(HUSKYLENSResult result);

void setup() {
    Serial.begin(115200);
    mySerial.begin(9600);
    while (!huskylens.begin(mySerial))
    {
        Serial.println(F("Begin failed!"));
        Serial.println(F("1.Please recheck the \"Protocol Type\" in HUSKYLENS (General Settings>>Protocol Type>>Serial 9600)"));
        Serial.println(F("2.Please recheck the connection."));
        delay(100);
    }
}

void loop() {
    if (!huskylens.request()) Serial.println(F("Fail to request data from HUSKYLENS, recheck the connection!"));
    else if(!huskylens.isLearned()) Serial.println(F("Nothing learned, press learn button on HUSKYLENS to learn one!"));
    else if(!huskylens.available()) Serial.println(F("No block or arrow appears on the screen!"));
    else
    {
        Serial.println(F("###########"));
        while (huskylens.available())
        {
            HUSKYLENSResult result = huskylens.read();
            printResult(result);
        }    
    }
}

void printResult(HUSKYLENSResult result){
    if (result.command == COMMAND_RETURN_BLOCK){
        Serial.println(String()+F("Block:xCenter=")+result.xCenter+F(",yCenter=")+result.yCenter+F(",width=")+result.width+F(",height=")+result.height+F(",ID=")+result.ID);
    }
    else if (result.command == COMMAND_RETURN_ARROW){
        Serial.println(String()+F("Arrow:xOrigin=")+result.xOrigin+F(",yOrigin=")+result.yOrigin+F(",xTarget=")+result.xTarget+F(",yTarget=")+result.yTarget+F(",ID=")+result.ID);
    }
    else{
        Serial.println("Object unknown!");
    }
}

预期结果

  1. 上传上述代码至Arduino主板

  2. 参考前面讲解各个功能的章节,让HuskyLens学习完一个新东西,比如人脸。

  3. 打开Arduino IDE的串口监视器查看结果。

    当HuskyLens处于人脸识别、物体追踪、物体识别、颜色识别、标签识别模式时,则打印的结果如下图:

    当HuskyLens处于巡线追踪模式时,则打印的结果如下图:

I2C模式

硬件连线图

HUSKYLENS常规设置

把HuskyLens的通讯模式设置为I2C。

也可以设置为“自动识别模式”,无需反复调节通讯协议,简单方便。

样例代码

#include "HUSKYLENS.h"
#include "SoftwareSerial.h"

HUSKYLENS huskylens;
//HUSKYLENS green line >> SDA; blue line >> SCL
void printResult(HUSKYLENSResult result);

void setup() {
    Serial.begin(115200);
    Wire.begin();
    while (!huskylens.begin(Wire))
    {
        Serial.println(F("Begin failed!"));
        Serial.println(F("1.Please recheck the \"Protocol Type\" in HUSKYLENS (General Settings>>Protocol Type>>I2C)"));
        Serial.println(F("2.Please recheck the connection."));
        delay(100);
    }
}

void loop() {
    if (!huskylens.request()) Serial.println(F("Fail to request data from HUSKYLENS, recheck the connection!"));
    else if(!huskylens.isLearned()) Serial.println(F("Nothing learned, press learn button on HUSKYLENS to learn one!"));
    else if(!huskylens.available()) Serial.println(F("No block or arrow appears on the screen!"));
    else
    {
        Serial.println(F("###########"));
        while (huskylens.available())
        {
            HUSKYLENSResult result = huskylens.read();
            printResult(result);
        }    
    }
}

void printResult(HUSKYLENSResult result){
    if (result.command == COMMAND_RETURN_BLOCK){
        Serial.println(String()+F("Block:xCenter=")+result.xCenter+F(",yCenter=")+result.yCenter+F(",width=")+result.width+F(",height=")+result.height+F(",ID=")+result.ID);
    }
    else if (result.command == COMMAND_RETURN_ARROW){
        Serial.println(String()+F("Arrow:xOrigin=")+result.xOrigin+F(",yOrigin=")+result.yOrigin+F(",xTarget=")+result.xTarget+F(",yTarget=")+result.yTarget+F(",ID=")+result.ID);
    }
    else{
        Serial.println("Object unknown!");
    }
}

预期结果

  1. 上传上述代码至Arduino主板
  2. 参考前面讲解各个功能的章节,让HuskyLens学习完一个新东西,比如人脸。
  3. 打开Arduino IDE的串口监视器查看结果。I2C模式下的结果与UART模式下的结果一样,此处不再赘述。

9.3 Arduino库函数说明

请点击Arduino库函数说明文档查看。

10. 树莓派教程

本章节使用树莓派进行演示,说明如何把HuskyLens连接到树莓派,然后树莓派从HuskyLens读取数据。通信方式为I2C。

10.1 初始化树莓派

你必须启用树莓派的I2C端口。先运行一个终端(terminal),然后按照下述步骤进行操作:

  1. 运行 sudo raspi-config

  2. 使用键盘上的方向键,往下,选择 5 Interfacing Options,然后进入

  3. 往下,选择P5 I2C.

  4. 提示“Would you like the ARM I2C interface to be enabled?”,选择Yes,之后提示“The ARM I2C interface is enabled.”

  5. 使用键盘上的方向键,往右,选择Finish

  6. 运行sudo reboot now,重启树莓派。

  7. 重启完成后,运行一个终端,输入: sudo apt-get install -y i2c-tools

  8. 运行sudo apt-get install python-smbus

  9. 运行 sudo pip3 install pyserial

至此,树莓派的初始化就完成了。

10.2 I2C连线说明

本章节,HuskyLens采用I2C接口与树莓派通信。HuskyLens与树莓派的管脚线序,如下图所示。

树莓派管脚图

CI2C Wiring Guide

HuskyLens管脚图(I2C模式)

标注 管脚功能 用途
T SDA 串行数据线
R SCL 串行时钟线
- GND 电源负极
+ VCC 电源正极

硬件连线图

小提示:

HuskyLens消耗的电流比较多,可达3.3V 320mA或5V 230mA以上。建议你把HuskyLens连接到树莓派的5V电源管脚上,以提供给HuskyLens足够的电源。

10.3 编程指南

  1. 下载 HuskyLens Python 库

  2. huskylensPythonLibrary.py文件放到你的项目文件夹中

  3. 在你的python文件 (如test.py)中,导入该库,脚本如下:

    from huskylensPythonLibrary import HuskyLensLibrary
  4. 初始化HuskyLens,脚本如下:

    my_Var= HuskyLensLibrary("I2C","",address=0x32)
  5. 现在可以调用库里面的函数了,比如:

    # Check if HuskyLens can recieve commands
    print(my_Var.command_request_knock())
    # Get all the current blocks on screen
    blocks=my_Var.command_request_blocks()
    # Print the data
    print(blocks)

10.4 API说明

command_request()
     => Return all data 

command_request_blocks()
     => Return all blocks on the screen

command_request_arrows()
     => Return all arrows on the screen(only in line tracking mode)

command_request_learned()
     => Return all learned objects on screen

command_request_blocks_learned()
     => Return all learned blocks on screen

command_request_arrows_learned() 
     => Return all learned arrows on screen(only in line tracking mode)

command_request_by_id(idVal)
     *idVal is an integer
     => Return the object with id of idVal

command_request_blocks_by_id(idVal) *idVal is an integer
     *idVal is an integer
     => Return the block with id of idVal

command_request_arrows_by_id(idVal) *idVal is an integer(only in line tracking mode)
     *idVal is an integer
     => Return the arrow with id of idVal

command_request_algorthim(ALG_NAME)
    * ALG_NAME is a string whose value can be the following
        "ALGORITHM_OBJECT_TRACKING"
        "ALGORITHM_FACE_RECOGNITION"
        "ALGORITHM_OBJECT_RECOGNITION"
        "ALGORITHM_LINE_TRACKING"
        "ALGORITHM_COLOR_RECOGNITION"
        "ALGORITHM_TAG_RECOGNITION"
        "ALGORITHM_OBJECT_CLASSIFICATION"

command_request_knock()
    => Returns "Knock Recieved" on success

10.5 树莓派案例: 读取坐标数据

本案例演示树莓派主板从HuskyLens读取目标物体的坐标数据,并将这些数据在终端中打印出来。

准备材料

硬件连线图

参考10.2章节“I2C连线说明”

HuskyLens常规设置

把HuskyLens的通讯模式设置为I2C。

也可以设置为“自动识别模式”,无需反复调节通讯协议,简单方便。

样例代码

下述代码已经写入test.py文件。 点击此处查阅或下载。

# Import the library
from huskylensPythonLibrary import HuskyLensLibrary
# Initlialize the HuskyLens
test = HuskyLensLibrary("I2C","",address=0x32)
print("First request a knock: {}".format(test.command_request_knock()))

# Change to face recognition algorhtim
test.command_request_algorthim("ALGORITHM_FACE_RECOGNITION")

# Display a simple menu where you can call every function in a loop!
ex=1
print("""
        Menu options:
        1) command_request()
        2) command_request_blocks()
        3) command_request_arrows()
        4) command_request_learned()
        5) command_request_blocks_learned()
        6) command_request_arrows_learned()
        7) command_request_by_id() ***format 7 ID_VAL***
        8) command_request_blocks_by_id() ***format 8 ID_VAL***
        9) command_request_arrows_by_id() ***format 9 ID_VAL***
        10) Exit
        """)
while(ex==1):
    v=input("Enter cmd number:")
    numEnter=v
    if(numEnter=="10"):
        ex=0
    v=int(v[0])
    if(v==1):
        print(test.command_request())
    elif(v==2):
        print(test.command_request_blocks())
    elif(v==3):
        print(test.command_request_arrows())
    elif(v==4):
        print(test.command_request_learned())
    elif(v==5):
        print(test.command_request_blocks_learned())
    elif(v==6):
        print(test.command_request_arrows_learned())
    elif(v==7):
        print(test.command_request_by_id(int(numEnter[2:])))
    elif(v==8):
        print(test.command_request_blocks_by_id(int(numEnter[2:])))
    elif(v==9):
        print(test.command_request_arrows_by_id(int(numEnter[2:])))

预期结果

  1. 在终端里,运行下述脚本:

    python3 test.py
  2. 让HuskyLens学习一个新的东西,比如你的脸。具体操作方法可以参考前面几个章节(如7.1章节)。

  3. 让HuskyLens对准你的脸。然后再终端中输入命令编号,你将得到结果,如下图所示:

结果显示的是识别框中心点x坐标,y坐标,宽度,高度,和ID号。格式如下:

[识别框中心点的x坐标, 识别框中心点的y坐标, 识别框的宽度, 识别框的高度, 所学物体的ID号]

11. 更多文档