esp32 接摄像头_撸狗初体验 | 手把手教你上手 HuskyLens 哈士奇人工智能摄像头
![](/assets/blank.gif)
下面开始编故事……
某个周末,走在去加班的路上,脚底突然被某个东西咯噔一下,抬脚一看,竟然是……
![](/assets/blank.gif)
捡起来一看……
哈士奇!哈士奇!哈士奇!
竟然是 DF 还在预售的 HuskyLens 人工智能摄像头(中文名:哈士奇) !
这个故事告诉我们:喜欢加班的创客,运气不会太差。
# HuskyLens 功能介绍
HuskyLens 是什么?
这里简单截取官网介绍的一部分:
HuskyLens 是一款简单易用的人工智能摄像头(视觉传感器),内置 6 种功能:人脸识别、物体追踪、物体识别、巡线追踪、颜色识别、标签(二维码)识别。仅需一个按键即可完成 AI 训练,摆脱繁琐的训练和复杂的视觉算法,让你更加专注于项目的构思和实现。
![](/assets/blank.gif)
详细介绍,可以查看官网说明:https://www.dfrobot.com.cn/goods-2050.html
哈士奇官方介绍视频,请直接跳转 B 站:
http://player.bilibili.com/player.html?aid=66695069&cid=115655109
用 3 个单词就可以概括 HuskyLens 的特性:Click、Learn & Play。
总之:简单、易用、真香!
这么香的工具,到底该怎么玩呢?请继续往下看。
注意:以下章节偏技术性,是对体验视频的文字性详细描述,会略微无聊,请收藏后慢慢阅读。
# HuskyLens 数据读取测试
由于 HuskyLens 目前还没有正式上市,所以关于它的资料非常少,DF 暂时也没有放出 HuskyLens 对应的函数库,更不用说在 Mind+ 等图形化编程工具中调用了。不过相信不久,我们就可以在 Mind+ 中看到它了,到那时,它的使用就会更加简单、更加小白了!
暂时我们只能根据它的通信协议,徒手来撸代码了。
HuskyLens 默认采用串口通信,当然可以在它的设置中改成 I2C 通信。默认的串口波特率为 57600 bps,格式为 8N1( 8 位数据位、无校验、1位停止位 ),默认通信地址为 0x11
。本文中,我带领大家使用掌控板来读取 HuskyLens 的数据。
当然你也可以选择使用 Arduino、Raspberry Pi、LattePanda、micro:bit 等控制器来读取 HuskyLens 的数据,原理都是一样的,就留作课后作业吧,看文本文后,你能不能用其他主控板来读取 HuskyLens 的数据呢?
电路连接图如下:
![](/assets/blank.gif)
关于掌控板串口的补充说明:
掌控板的主控芯片是 ESP32,ESP32 有 3 个串口,分别是
Serial
、Serial1
、Serial2
。Serial
我们一般用来下载程序,Serial1
默认使用了GPIO 9
和GPIO 10
,但是 ESP32 的GPIO 6~11
一般用于连接外部 Flash 芯片,所以我们这里使用Serial2
与 HuskyLens 连接通信。另外,ESP32 可以将串口 RX 映射到几乎所有 IO 口上,TX 映射到GPIO 0~31
上(此处没有进行验证)。所以,这里我们将掌控板
Serial2
的 RX 映射到 P14 引脚,将 TX 映射到 P13 引脚。参考资料:
https://blog.csdn.net/Naisu_kun/article/details/86004049
我们来看一下 HuskyLens 的通信协议。它主要有两种模式,正如视频中看到的那样,大部分情况下, HuskyLens 屏幕上会显示一个方框(Block 模式),在巡线模式下,它会显示一个箭头(Arrow 模式)。这两种模式下,数据的长度和格式基本是一致的,这里我们以 Block 模式为例进行讲解,Arrow 模式原理一样,此处不再赘述。
我们来看一下它的数据格式,可以看到它是以0x55
和0xAA
开头的一串数据,紧接着是它的通信地址 Address、数据长度 Data Length、命令代码 Command,以及我们最关心的数据 Data。最后是一个校验位。
![](/assets/blank.gif)
每个数据的含义如下:
Block 模式:
![](/assets/blank.gif)
Arrow 模式:
![](/assets/blank.gif)
上面两个表格中红框框出来的是相应的数据 Data 1 ~ Data n,其中:
X Center 表示方框 Block 的几何中心的 X 坐标;
Y Center 表示方框 Block 的几何中心的 Y 坐标;
Width 表示方框 Block 的宽度;
Height 表示方框 Block 的高度;
LearnedIndex 表示识别目标的编号。
我们根据通信协议,编写程序来读取一下 HuskyLens 返回的数据。
首先打开 Mixly 自带的 Arduino IDE,选择 Arduino HandBit (掌控板)进行编程。
最新版 Mixly 1.0 下载地址:
https://mixly.readthedocs.io/zh_CN/latest/basic/02Installation-update.html
![](/assets/blank.gif)
程序如下:
void setup() {void loop() {
将程序上传到掌控板,打开串口监视器,可以看到会返回类似下图中的数据:
![](/assets/blank.gif)
但是这些数据代表着什么意思呢?我们将关键数据圈出来:0x55、0xAA、0x11、0x0A、0x10、0xA3、0x00、0x7B、0x00、0x46、0x00、0x46、0x00、0x01、0x00、0xD5。其中:
0x55
为 Header;0xAA
为 Header 2;0x11
为 Address;0x0A
为 Data Length;0x10
为 Command,Block 模式下为0x10
,Arrow 模式下为0x11
;0xA3
、0x00
分别为 X Center 的低 8 位和高 8 位,0x00A3
换算后为 163,代表 X 坐标为 163;0x7B
、0x00
为 Y Center 的低 8 位和高 8 位,0x007B
换算后为 123,代表 Y 坐标为 123;0x46
、0x00
为 Width 的低 8 位和高 8 位,0x0046
换算后为 70,代表方框宽度为 70;0x46
、0x00
为 Height 的低 8 位和高 8 位,0x0046
换算后为 70,代表方框高度为 70;0x01
、0x00
为 LearnedIndex 的低 8 位和高 8 位,0x0001
换算后为 1,代表识别物体的编号为 1;0xD5
为 Checksum 的低 8 位,我们将上面所有数据相加求和:0x55 + 0xAA + 0x11 + 0x0A + 0x10 + 0xA3 + 0x00 + 0x7B + 0x00 + 0x46 + 0x00 + 0x46 + 0x00 + 0x01 + 0x00 =0x02D5
,低 8 位是0xD5
说明校验通过。
至此,我们就完成了 HuskyLens 数据的简单读取。
但是每次都要这么去读取数据,然后再进行手工计算么?这还怎么做人工智能项目啊?
当然不是的,我们发现,读取这些数据就是都是一件件重复的事情,而程序最擅长的就是做重复的事情了。
# HuskyLens 数据解析
我们将上面的程序简单调整一下,duang~ 就完成了!(程序源代码详见文末下载链接,建议配套代码一起阅读下文)
![](/assets/blank.gif)
我们先定义了一些变量,用来存放数据。这些变量的名字,基本可以自解释其含义,此处不再赘述说明。
#define LENG 15 // 0x55 + 15 bytes equal to 16 bytes
在 setup()
中,主要是对两个串口进行初始化:
void setup() {
然后在 loop()
中,不断去读取掌控板串口 2(Serial2)中返回的数据。首先要判断第 1 个读到的数据是否是默认的 Header 0x55
,我们用了find()
函数:
// Header
如果读取到0x55
,那么就把剩下的 15 个数据都读取进来,并存储到 buf
变量中。因为一个有效的通信命令共16个数据,大家可以在通信协议中数一下。
// Read the next 15 data
接着去检查第 2 个数据是否是默认的 Header 2 0xAA
。这里需要注意的是,我们并没有把第 1 个 Header 数据 0x55
存储到 buf
变量中,所以 buf[0]
不是 0x55
,而是 0xAA
。
// Header 2
如果第 2 个数据也是默认的包头的话,再去对剩下的数据进行校验,这里调用校验和函数 checkSum()
,具体这个函数怎么实现的,下面再讲。
// Checksum
校验和通过后,就可以对数据进行处理和计算了。在下面的程序中,我们先把原始数据打印出来:
// print the command list
然后通过 5 个函数分别去计算 Data 中的几个值。最后再将这些数据在串口监视器中打印出来。
// get the values
这样我们就把数据读取出来啦。
# 几个函数说明
## checkSum()
checkSum()
函数的功能就是校验读取到的数据是否正确。只要简单讲读到的数据相加,并最终取和的低 8 位,检查是否和读到的最后一个数据相等即可。相等的话,将标记变量 receiveflag
赋值为 1 即可,否则赋值为 0,并返回 receiveflag
的结果。
// check sum
## getX()
## getY()
## getWidthOrXTarget()
## getHeightOrYTarget()
## getLearnedIndex()
这 5 个函数的原理基本一致,其函数名基本可以自解释含义,此处也不再赘述解释每个函数的功能。
这里以第 1 个函数 getX()
为例,介绍这几个函数内部的原理。
通过查看通信协议,我们可以知道,X 坐标的数值,分别存储在 buf
变量中的第 5 个和第 6 个(实际是完整数据的 6 个和第 7 个数据,但是 buf
变量中没有存储第 1 个数据 0x55
),所以这里取 buf[4]
和 buf[5]
来进行计算即可。由于是 16 进制的数据,所以可以通过移位进行计算,当然这里的 << 8
等价为 * 256
。最后将计算出来的值返回即可。
// X Center of Block [Block mode]
其他几个数据,也是同样道理,只要取对应的数据位进行计算即可。
# 总结
通过这一章节,我们根据 HuskyLens 的通信协议,把 HuskyLens 返回的数据都读取出来了。那么我们可以利用这些数据做一些什么有趣好玩的事情呢?
物体追踪,人脸识别,物体识别,巡线追踪,颜色识别,标签识别等功能,要怎么用呢?
交互手势控制、自主机器人、智能门禁、交互式玩具等又要怎么实现呢?
这里先留个悬念,我们下期见!
# 代码下载
请到知识星球下载本教程对应的源代码:
https://t.zsxq.com/RB6EaYf
# 相关推荐
## 51maker 微信公众号
51maker 是由一群教师团队维护的微信公众号,他们来自全国五湖四海,致力于 Scratch 编程及创客入门课程开发,为一线教师提供微视频、课件、教学设计等相关资源,为普及编程 & 创客教育尽一份力量。
## 知识星球创客教育能量站
激活课程制作分享,实现知识变现!能量站是一个付费知识社群,聚集了一大批优秀的老师,几乎每天都有优质的创客教育内容分享。可以扫描下方二维码付费加入,这是我的推荐码,你可以获得一定的优惠,当然我也会有一定的回报。
*欢迎转发朋友圈。如需转载,请注明出处和原作者。
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
我知道你在看呦
esp32 接摄像头_撸狗初体验 | 手把手教你上手 HuskyLens 哈士奇人工智能摄像头相关推荐
- 【手把手教你用Matlab做双目摄像头标定】Ubuntu环境
[手把手教你用Matlab做双目摄像头标定] Ubuntu20.04环境 准备工作 你需要一个标定板 你需要一个双目摄像头 获取双目摄像头的设备号 跑起来看看 分割图像并完成拍照 使用Matlab进行 ...
- 手机端创新体验——手把手教你搭建VRAR架构
声明:本文阿里巴巴技术论坛整理文章,首发于CSDN,未经许可,禁止任何形式的转载. 作者:袁岳峰,阿里移动平台虚拟&互动实验室负责人,GM Lab技术负责人. 责编:钱曙光,关注架构和算法领域 ...
- sentinel接入网关应用_微服务初体验(三):集成Gateway网关和Sentinel限流
前言 最近笔者在对微服务架构进行学习,参考了各种项目的技术文章.框架文档以及视频网站,最终选择使用Nacos+Dubbo+Gateway+Sentinel来搭建一个项目练手.其中Nacos作为服务的注 ...
- 大疆TT无人机编程初体验,教你对拥抱开源的无人机为所欲为!
先放个项目演示视频镇帖: 可能是大疆TT无人机的第一款DIY遥控器!大疆TT无人机编程试飞初体验! 认识我的朋友,大概都知道,我是一个"运气爆棚"的人,经常能"捡&quo ...
- 用python打开多个摄像头_了解使用python和OpenCV与VideoCaptu进行多个网络摄像头捕获...
我正在尝试同时(或几乎同时)从多个网络摄像头捕捉图像.我一直在玩OpenCV.VideoCapture和python编程.但有些困惑,希望有人能帮忙解释... 首先,我尝试了视频捕捉(Markus G ...
- acer台式电脑怎么重装系统_电脑怎么重装系统 手把手教你
电脑,生活中最常用的工具类设备,可是在我们的日常使用中,系统会经常出现问题,如果你的电脑出现了需要重装系统的需要,你不需要去电脑店了,在这里,我手把手教你. 第一步 我们需要准备工具 一个8G以上的优 ...
- 富士康科技集团_2018届菁干班_入职初体验
窗外的轰雷锤醒了我的昏昏午睡,翻出尘封已久的电脑,一时不知从何看起,那就先写篇生活记录吧 7月13日正式入职,由于身体不适,从长沙一路到公司,大包小包都是妈妈帮我提着,我只能打个雨伞.拿个手机乖乖跟着 ...
- 5000并发的qps是多少_高并发初体验记录-02
前言 这半个多月完成了这次活动的业务代码开发和测试,至于性能调优对我而言近乎玄学.总结记录,以备参考.如有错误,欢迎指正.不过其实大佬不用浪费时间看这篇低质量的流水账了. 实测过后,一个月前老板给我说 ...
- 试玩系列 | 真香!大疆TT无人机编程初体验,教你对它为所欲为!
先放个项目演示视频镇帖(点击小程序查看演示视频): 认识我的朋友,大概都知道,我是一个"运气爆棚"的人,经常能"捡"到一些好玩的东西.这不,前两天在家门口&qu ...
最新文章
- 06.Java虚拟机问题
- 分子动力学模拟软件_基于GPU的分子动力学软件ACEMD的简介与安装
- 作用域链(scope chain)和原型链(prototype chain)
- 《Delphi XE6 android 编程入门教程》推荐
- 南师大计算机语言学,南师大(语言学,文字学,文献学专业备考建议)
- Qualcomm QXDM工具简介和log抓取
- Apache JMeter:随心所欲进行负载测试
- phpMyFAQ 3.0.3 中文版
- css33d坐标系,CSS3-3D技术
- C++---set/multiset用法介绍
- 关于欧几里德第五公设的感言
- tcp的time wait为什么要等2个MSL
- Altium Designer 16
- IE6-IE11兼容性问题列表及解决办法总结
- zoom使用教程_如何使用Zoom在线玩Jackbox游戏
- 四元数船舶领域Quaternion ship domain
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
- PMO如何赋能与支撑战略项目管理︱亚马逊PMO负责人宋晓雪
- fastadmin列表页展示分类名称通用搜索按分类名称搜索
- 垂杨柳中学2021年高考成绩查询时间,2021年中考成绩
热门文章
- 深度解析minist例子(lasagne)
- virustotal 出现PUP.HighConfidence
- android怎么做ab测试工具,开发必读:网易专家解读Android ABTest 框架设计
- 软件2016班级分组
- sakai配置(中文版)(四)
- 蓝牙基带解调(GFSK:Gauss frequency Shift Keying )
- hdu6681 Rikka with Cake(主席树)
- java计算机毕业设计无人售货机管理系统源码+lw文档+系统+数据库
- iowait和iostat监控工具详解
- 蓝桥杯:日志统计 尺取法