1. 产品简介

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

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

2. 技术规格

3. 接口与按键说明

3.1 接口

小提示:

3.2 功能按键与学习按键

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

4. 升级固件

使用本产品之前,强烈建议你升级到最新版本的固件,以获取最新的功能和最稳定的体验。如果你的HuskyLens已经是最新固件则无需更新。

本教程需要的固件版本不低于V0.5.1。此版本把所有功能(包括物体分类)全部集成在一起。

如何查看固件版本号?

  1. 往右拨动功能按键,直到最后一个选项常规设置(General Settings),短按功能按键,进入二级菜单;

  2. 往右拨动功能按键,拨到版本号的选项时,即可看到版本号。如下图,版本号为:0.5.1Norm。

4.1 windows系统

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

  1. 下载HUSKYLENS Uploader V2.1软件。点击下载。由于是.exe文件,windows系统可能会拦截,请放行或保留该文件即可。

  2. 下载并安装USB转串口芯片CP2102的驱动程序。如之前已经安装过,此步骤可跳过。点击此处 选择适合您的驱动。(注:也可使用Mind+中的一键安装驱动功能安装此驱动。)

    驱动安装完毕后,使用microUSB线,连接HUSKYLENS上的固件烧录口(USB口)与电脑USB口,此时打开设备管理器应该出现名字开头为"Silicon Labs CP210x"的COM端口。如下图所示:

  1. 下载固件。点击下载V0.5.1版本更多固件版本点击查看
  2. 运行HUSKYLENS Uploader V2.1软件, 会先弹出一个小黑窗(cmd窗口),稍等片刻,就会出现界面。然后点击“Select File”按钮,加载固件。
  3. 点击“Upload”按钮即可进行烧录,耐心等待烧录完成。烧录完成后,“Uploading”字样会消失,HuskyLens屏幕会点亮。烧录期间请不要关闭界面窗口和小黑窗(cmd窗口)。烧录过程大概需要5分钟左右。固件比较大,因此上传时间会有点长。

小提示:

4.2 linux或mac系统

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

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

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

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

    建议把整个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. 根据实际固件的版本,在下述命令行中输入固件的完整名字。以V0.5.1版本固件为例,运行以下命令行,上传固件:
sudo python3 kflash.py -b 2000000 HUSKYLENSWithModelV0.5.1Norm.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已经学习过一个物体了。如需让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 颜色识别

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

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

小提示:

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

操作设置

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

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

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

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

学习与识别

  1. 侦测颜色

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

  2. 学习颜色

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

  3. 识别颜色

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

    V0.5.1版本以下的固件中,当出现多个相同颜色的色块时,相隔的色块不能被同时识别,只能一次识别一个色块。如下图所示:

    V0.5.1版本及其以上的固件中,优化了这个功能,当出现多个相同颜色的色块时,可以同时识别出这些色块,这个功能,可以用来对色块进行计数。

色块数量识别

V0.5.1及其以上版本的固件中,HUSKYLENS在颜色识别功能中可以进行色块计数,即:判断HUSKYLENS屏幕中色块的数量。下面以识别多个相近颜色的气球为例进行说明。

  1. 学习并识别颜色

    将HuskyLens屏幕中央的“+”字对准需要学习的气球,按下“学习按键”学习该气球的颜色,然后松开“学习按键”结束学习,就可以看到已经能识别该气球的颜色了,但对于颜色相近的气球,可能还不一定能识别的出。

  2. 调节识别框阈值

    在识别相近颜色的色块时,通过设置阈值可以调节识别的精度,比如上图中,有的颜色相近的黄色气球没被识别到,可能就是阈值设置的较高。颜色识别功能的二级菜单参数设置界面中,有“识别框阀值”参数,该参数的数值越低,精度越低,但识别的相近色块就越多。如下图,阈值为20时,只能识别到一个黄色球,阈值为0时,3个黄色球都可以识别到。请根据实际效果,调节识别框阀值,使得识别精度达到可接受的范围内。

    通过此功能,可以方便的实时获得屏幕中黄色气球的数量了。

7.6 标签识别

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

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

操作设置

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

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

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

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

学习与识别

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

  1. 侦测标签

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

  2. 学习标签

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

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

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

  3. 识别标签

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

7.7 物体分类

本功能可以学习不同物体的多张照片,然后使用内置的机器学习算法进行训练,训练完成之后,当HuskyLens的摄像头画面再次出现学习过的物体时,HuskyLens就可以识别出它们,并显示其ID号。同一个物体的照片,学的越多,识别越精准。

默认设置为学习多个,本章节以识别工人是否佩戴安全帽为例进行说明。

操作设置

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

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

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

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

学习与识别

可用下面的图片来测试。

  1. 学习物体

    将HuskyLens屏幕中央的橙黄色大框对准需要学习的物体(上图中左边带安全帽的工人),长按“学习按键”,从不同的角度和距离学习,完成第一个物体的学习之后,松开”学习按键“后,屏幕上会提示:”再按一次按键继续!按其他按键结束“。如要继续学习下一个物体,则在倒计时结束前按下“学习按键”,可以继续学习下一个物体。如果不再需要学习其他物体了,则在倒计时结束前按下”功能按键”即可,或者不操作任何按键,等待倒计时结束。

    本章节中,需要继续学习下一个物体(上上图中右边不带安全帽的工人),因此在倒计时结束前按下“学习按键”,然后将HuskyLens屏幕中央的橙黄色大框对准需要学习的物体,长按“学习按键”完成第二个物体的学习。以此类推。

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

  2. 识别物体

    HuskyLens再次遇到学习过的物体时,在屏幕上会显示其ID号。如下图,当HUSKYLENS识别到工人带着安全帽,屏幕显示ID1,没带安全帽显示ID2。

    更多关于物体分类的想法和项目:

    https://mc.dfrobot.com.cn/thread-304439-1-1.html

    常见问题

    1. 物体分类算法可以得出物体在HUSKYLENS屏幕上的相对位置吗?

      答: 不能。物体分类算法下,输出方框的位置固定,其在屏幕上的x、y中心坐标保持不变,所以HUSKYLENS无法得出物体在屏幕上的相对位置。但是可以通过学习物体的不同位置作为不同的ID,通过ID来判断位置,比如无人车中,分别学习道路左侧、中间、右侧为ID1、2、3,通过判断ID就可以知道无人车相对于马路的位置。

    2. 物体分类算法下,怎么提高识别的精准度?

      答:长按“学习按键”不松开,可以从多个角度和距离录入目标图片,提高识别精准度。

7.8 辅助功能

V0.5.1及以上版本的固件中,新增了很多辅助功能,能够更好的帮助你使用HuskyLens搭建项目。

7.8.1 自定义ID名称

你可以更改ID对应的名称,比如:把“人脸:ID1”改为“Jack:ID1”,把“颜色:ID1”改为“Red:ID1”。此功能非常适合给人、物体取名字,让识别结果更容易辨识。除了巡线追踪功能外,其余6大算法功能均支持自定义ID名称。自定义ID名称只支持英文名。

演示:更改人脸识别算法ID1的名称为Jack。

mind+示例程序:

makecode示例程序:

Arduino示例程序:

#include "HUSKYLENS.h"

HUSKYLENS huskylens;

void setup() 
{
    Serial.begin(115200);
    Wire.begin();
    while (!huskylens.begin(Wire))
    {
        Serial.println(F("Begin failed!"));
        delay(100);
    }
    while (!huskylens.setCustomName("Jack",1))  // bool setCustomName(String name,uint8_t id)
    {
      Serial.println(F("ID1 customname failed!")); 
      delay(100);
    }
}

void loop() 
{

}

运行结果:

HuskyLens学习完第一张人脸ID1后,会显示“Jack:ID1”,如下图所示。

7.8.2 屏幕显示自定义文字

HuskyLens板载了一块屏幕,你可以在屏幕任意位置叠加显示字符,支持显示英文字母、数字及符号,暂不支持显示中文。你可以将识别结果、传感器数据等直接显示在HuskyLens的屏幕上。7大算法功能均支持自定义显示文字。

演示:在屏幕右上角坐标(230,35)处开始显示文字 "Mind+"

mind+示例程序:

makecode示例程序:

Arduino示例程序:

#include "HUSKYLENS.h"

HUSKYLENS huskylens;

void setup() 
{
    Serial.begin(115200);
    Wire.begin();
    while (!huskylens.begin(Wire))
    {
        Serial.println(F("Begin failed!"));
        delay(100);
    }
    while (!huskylens.customText("mind+",230,35))  // bool customText(String text,uint16_t x,uint8_t y)
    {
      Serial.println(F("custom text failed!")); 
      delay(100);
    }
}

void loop() 
{

}

运行结果:

7.8.3 拍照、截屏保存到SD卡

HuskyLens可以像一个卡片相机一样,拍照或者截屏摄像头画面,保存到SD卡中,HuskyLens板载一个SD卡插槽,将SD卡插入即可使用。截屏保存的图片包含屏幕上显示的文字、方框等内容,而拍照出来的图片只包含摄像头画面,没有方框、文字信息。

HuskyLens的7大算法功能均支持该功能。使用此功能时,需要先插入一张SD卡。

小提示:

  1. 推荐一线品牌的SD卡,如闪迪、东芝、三星、金士顿等,个别小品牌的SD卡,可能存在兼容性问题。
  2. HUSKYLENS保存的图片,分辨率为320*240,无法更改。
  3. 请将SD卡格式化为FAT32。因拍照/截图并保存需要一定的时间,因此建议调用该功能的间隔至少0.5秒以上。
  4. SD卡插槽向内,需要从里向外插入,插入SD卡的过程如下图所示:

演示:按下micro:bit 的A键或拉低Arduino的A0管脚,HuskyLens截屏并保存到SD卡。

mind+示例程序:

makecode示例程序:

Arduino示例程序:

#include "HUSKYLENS.h"

HUSKYLENS huskylens;

void setup() 
{
    Serial.begin(115200);
    pinMode(A0,INPUT_PULLUP);
    Wire.begin();
    while (!huskylens.begin(Wire))
    {
        Serial.println(F("Begin failed!"));
        delay(100);
    }
}

void loop() 
{
  if(digitalRead(A0) == 0)
  {
     while (!huskylens.saveScreenshotToSDCard())  // bool saveScreenshotToSDCard() or  bool savePictureToSDCard()
    {
      Serial.println(F("save screenshot to SD card failed!")); 
      delay(100);
    }
    Serial.println(F("saving screenshot to SD card...")); 
    delay(500); // The interval between calling this function is not less than 0.5 seconds.
  }
}

运行结果:

按下micro:bit的A键或拉低Arduino的A0管脚,HuskyLens截图保存到SD卡。将SD卡拔出,再插入到电脑上,就可以看到HuskyLens截取的图片了。

HuskyLens屏幕上显示的画面 电脑上读取SD卡里面的图片文件(.bmp文件) 打开图片文件

7.8.4 SD卡保存/加载模型

HuskyLens支持将同一个算法下学习的多个物体作为一个数据模型,通过SD卡能保存这个模型,即使删除了当前算法的所有数据,也可以再从SD卡中重新加载模型,让HuskyLens自动学习模型中的数据。通过保存模型的方法,HuskyLens可以在一个算法中满足多场景的使用,比如在物体分类算法中,学习剪刀石头布为1个模型,学习垃圾分类为1个模型,然后通过模型切换,就能快速实现所需功能,避免重复的让HuskyLens学习。

使用此功能时,需要先插入一张SD卡,SD卡需要格式化为FAT32。HUSKYLENS的7大算法功能都支持SD卡保存和加载模型,每个算法功能可以保存5个模型。

方式一 :在各算法功能的二级菜单目录下手动操作

此处在物体分类功能中为例进行演示,其他算法功能中的用法也是一样的。

  1. 学习新物体:让HuskyLens学习完几个新的物体。比如:在物体分类功能中,依次学习多个动物,有不同的ID号。

  2. 导出模型:长按“功能按键”,进入物体分类功能的二级菜单参数设置界面,然后向右拨动“功能按键”,直至选择“导出到SD卡”一项(即保存模型到SD卡),短按“功能按键”,左右拨动“功能按键”,选择0~4任意一个即可(相当于选择保存的位置,方便区分不同的模型),然后短按“功能按键”即可保存模型。

    模型导出到SD卡后,用电脑读取该SD卡,在“HUSKYLENS”文件夹下即可看到后缀为.conf的模型数据文件,不同算法保存的文件名称不同。如下图所示:

    小提示:根据模型数据文件名可以知道导出的模型数据文件属于哪个算法功能;无法查看每个模型中学习的图片。

  3. 导入模型:当SD卡中已经有模型数据文件时,可以把模型直接导入给HuskyLens。比如:在物体分类功能中,SD卡中已经有物体分类的模型数据文件了,那么在物体分类功能的二级菜单参数设置界面中,选择“从SD卡导入”一项,选择0~4其中一个,即可把SD卡的模型加载到HuskyLens中。

    导入模型后,HuskyLens就可以使用当前模型进行识别了。

    小提示:导入模型时,只支持导入相同算法的模型,不能导入不同算法的模型。

方式二 :程序触发保存/加载模型

该方式,可以使用micro:bit、Arduino、树莓派等主板,自动触发保存或加载模型文件,使用以下代码块,即可实现。

Mind+积木块:

MakeCode积木块:

Arduino函数:

bool saveModelToSDCard(int fileNum);

bool loadModelFromSDCard(int fileNum);

7.8.5 程序触发学习功能

除了手动按下“学习按键”学习目标物体外,还能通过程序触发,让HuskyLens自动学习。有了这个功能,可以让micro:bit、Arduino、树莓派等主控板自动控制HuskyLens的学习。

HuskyLens的7大算法功能均支持程序触发学习。

演示:按下micro:bit主板的A键或拉低Arduino的A0管脚,让HuskyLens自动学习一次目标物体,该物体的ID号为1。

mind+示例程序:

makecode示例程序:

Arduino示例程序:

#include "HUSKYLENS.h"

HUSKYLENS huskylens;

void setup() 
{
    Serial.begin(115200);
    pinMode(A0,INPUT_PULLUP);
    Wire.begin();
    while (!huskylens.begin(Wire))
    {
        Serial.println(F("Begin failed!"));
        delay(100);
    }
}

void loop() 
{
  if(digitalRead(A0) == 0)
  {
     while (!huskylens.writeLearn(1))  // bool writeLearn(int ID)
    {
      Serial.println(F("learn object ID1 failed!")); 
      delay(100);
    }
    Serial.println(F("learn object ID1 success")); 
  }
}

运行结果:

在物体分类模式下,将HuskyLens依次对准下面3张图片,按下micro:bit 的A键或拉低Arduino的A0管脚,HuskyLens会依次学习3张图片作为物体:ID1。当HuskyLens再次识别到3张图片的任意一张时,会在屏幕上显示物体:ID1,表示这3名工人,都带了安全帽。

1 2 3

此时,可以对ID1自定义名称,比如改成safe:ID1;也可以用屏幕自定义显示文字功能,叠加相关信息,说明此状态是带了安全帽的。有了这些信息说明,识别结果简单易懂。

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. 在搜索框中输入"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终点。

注:更多MakeCode模块,请参见MakeCode网页版中的HuskyLens扩展。

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案例1:串口打印物体坐标数据

本案例演示如何把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案例2:自动巡线小车

点击此处查看详细教程。

9.4 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与树莓派的管脚线序,如下图所示。

树莓派管脚图

HuskyLens管脚图(I2C模式)

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

硬件连线图

小提示:

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

10.3 编程指南

  1. 下载 HuskyLens Python 库

  2. huskylib.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 树莓派案例: 读取坐标数据

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

准备材料

硬件连线图

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

HuskyLens常规设置

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

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

样例代码

下述代码已经写入exampleHL.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号]

10.5 Python API说明

点击此处查看详细的API说明。

11. 更多文档