【花雕动手做】HUSKYLENS 2 AI视觉传感器之识别条形码输出相关数据
摘要:本文介绍了如何利用HUSKYLENS 2 AI视觉传感器与行空板K10开发板进行条形码识别实验。HUSKYLENS 2搭载高性能K230芯片,支持20余种AI模型,通过UART/I2C接口连接行空板K10实现条形码识别功能。文章详细讲解了条形码识别原理、硬件连接方法,并提供了完整的Mind+编程代码,可获取条形码ID、内容、尺寸及坐标等数据。实验展示了AI视觉传感器在教育领域的应用价值,为S

一、相关知识点
1、HUSKYLENS 2(二哈识图2)是DFRobot推出的新一代AI视觉传感器,搭载6TOPS算力的Kendryte K230双核RISC-V芯片,集成1GB LPDDR4内存与8GB存储,支持人脸识别、物体检测、姿态估计等20余种预置AI模型,同时允许用户通过自训练模型部署实现定制化识别
。其硬件配置包括200万像素摄像头、2.4英寸触摸屏、可更换镜头模组(支持显微/夜视)及RGB补光灯,搭配UART/I2C接口可无缝连接Arduino、树莓派等开发板,实现实时图传与多模态交互。内置MCP服务打通本地视觉与大模型能力,例如识别午餐图片后可生成膳食建议,而模型广场提供车牌识别、跌倒检测等垂直领域即用型方案。作为教育利器,它已融入《中小学人工智能通识教育指南》课程体系,通过Mind+图形化编程工具降低AI开发门槛,助力创客教育与STEAM实践。

2、行空板 K10 是一款专为中小学信息科技教学和创客项目设计的国产 AIoT 开发板,以 ESP32-S3 为核心,高度集成 2.8 英寸全彩 LCD 屏、摄像头、双麦扬声器、WiFi 蓝牙模块及温湿度、光线、加速度等多种传感器,无需额外配件即可实现离线语音识别(支持 200 词库)、人脸识别、二维码读取、物联网联动等功能,支持 Mind + 图形化编程与 MicroPython 代码编程,兼顾入门便捷性与功能扩展性,丰富的扩展接口还能连接外部传感器、执行器,轻松落地 AI、物联网类创意项目,是编程学习与科创实践的高性价比选择。

3、Mind + 是 DFRobot 旗下蘑菇云科创教育团队研发的、拥有自主知识产权的国产青少年编程软件,它兼容 Scratch3.0,既支持零基础学习者拖拽图形化积木编程,也能切换至 Python/C/C++ 代码编程,且积木可自动转换为对应代码助力进阶学习,同时适配行空板M10\ K10、Arduino、micro:bit 等众多主流开源硬件与上百种电子模块,集成图像识别、语音识别等 AI 功能及物联网开发能力,还搭配实时交互、程序烧录脱机运行等模式与丰富教学案例,适配校内外编程教学、创客项目及竞赛等场景,是兼顾低入门门槛与高拓展性的科创教育工具。
二、硬件连接
准备材料
行空板K10 x 1
HUSKYLENS 2 x 1
USB数据线 x 2
4pin连接线(或杜邦线)x 1
准备一根USB数据线和一根4Pin白色硅胶线。使用USB数据线连接电脑与行空板K10,使用4Pin黑胶先连接行空板K10与HuskyLens 2,再使用额外的USB数据线n连接示意图如下连接HUSKYLENS 2的Type-C接口与电源,为HUSKYLENS 2进行额外供电。接线图可参考下图。



三、识别条形码的概念,指的是通过光学扫描设备或图像识别算法,对条形码图案进行解析,从而提取其中编码的信息。条形码是一种将数据编码为黑白条纹或方块图案的视觉符号系统,广泛用于商品管理、物流追踪、身份识别等领域。
1、条形码识别的核心概念
(1) 条形码是什么?
条形码是一种机器可读的编码图案,通常由一组黑白条纹或方块组成。
每种条形码标准(如EAN-13、UPC、QR码)都有特定的编码规则和结构。
条形码可表示数字、字母、甚至二进制数据。
(2)识别条形码的过程
条形码识别通常包括以下步骤:
图像采集:使用摄像头或扫描器获取条形码图像
图像预处理:去除噪声、增强对比度、校正角度
定位条码区域:识别图像中可能包含条码的区域
解码分析:根据条码类型解析条纹宽度、间距或模块排列
输出信息:将解码结果转换为可读数据,如商品编号、用户ID等
(3)技术实现方式
硬件识别:使用激光扫描器或CCD图像传感器进行快速读取
软件识别:通过计算机视觉算法(如OpenCV、Zxing)识别图像中的条码
AI增强识别:利用深度学习模型提升识别准确率,尤其在模糊、遮挡或复杂背景下
2、应用场景
零售收银:快速识别商品价格与信息
物流追踪:扫描包裹条码实现自动分拣与定位
医疗管理:识别药品、病人腕带等信息
工业自动化:生产线上的产品识别与质量追踪
移动识别:手机摄像头识别二维码或条形码,实现支付、登录等功能
3、条形码动态图形



四、AI 相机视觉传感器 ( 二哈识图 2) 之识别条形码输出相关数据
在条形码识别功能下,HUSKYLENS 2 能识别出现在画面中的条形码,可以通过编程获取画面中离十字光标最近的标签的相关数据并在串口打印出来,可以读取标签数据有:条形码ID、条形码内容、条形码宽度、条形码高度以及条形码中心点的X坐标位置和Y坐标位置。
1、准备测试的条形码



2、测试实验开源代码
/*【花雕动手做】HUSKYLENS 2 AI视觉传感器之识别条形码输出相关数据
* MindPlus
* esp32s3bit
*/
#include "unihiker_k10.h" // 引入UniHiker开发板的库,提供屏幕显示等功能
#include "DFRobot_HuskylensV2.h" // 引入HUSKYLENS AI视觉传感器的库
// 创建对象
HuskylensV2 huskylens; // 实例化HUSKYLENS视觉传感器对象
UNIHIKER_K10 k10; // 实例化UniHiker开发板对象
uint8_t screen_dir=2; // 屏幕方向设置(2通常表示横向显示)
// 主程序开始
void setup() {
k10.begin(); // 初始化UniHiker开发板硬件
Wire.begin(); // 初始化I2C通信协议
// 尝试初始化HUSKYLENS传感器,如果失败则持续重试
while (!huskylens.begin(Wire)) {
delay(100); // 等待100ms后重试
}
k10.initScreen(screen_dir); // 按照指定方向初始化屏幕
k10.creatCanvas(); // 创建画布用于图形绘制
// 设置HUSKYLENS算法模式为条形码识别
huskylens.switchAlgorithm(ALGORITHM_BARCODE_RECOGNITION);
}
void loop() {
// 从HUSKYLENS获取条形码识别结果
huskylens.getResult(ALGORITHM_BARCODE_RECOGNITION);
// 检查是否有可用的条形码识别结果
if ((huskylens.available(ALGORITHM_BARCODE_RECOGNITION))) {
// 在屏幕上显示靠近画面中心的条形码ID
k10.canvas->canvasText((String("靠中心的条形码ID: ") +
String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_BARCODE_RECOGNITION), Result, ID)))),
2, 0x0000FF); // 第2行,蓝色文字
// 显示检测到的条形码总数
k10.canvas->canvasText((String("条形码总数: ") +
String((huskylens.getCachedResultNum(ALGORITHM_BARCODE_RECOGNITION)))),
3, 0xFF0000); // 第3行,红色文字
// 显示第一个条形码的ID(索引0)
k10.canvas->canvasText((String("第一个条形码ID: ") +
String((RET_ITEM_NUM(huskylens.getCachedResultByIndex(ALGORITHM_BARCODE_RECOGNITION, 1-1), Result, ID)))),
4, 0x0000FF); // 第4行,蓝色文字
// 显示第一个条形码的名称标签
k10.canvas->canvasText("第一个条形码名称: ", 5, 0xFF0000); // 第5行,红色文字
k10.canvas->canvasText((RET_ITEM_STR(huskylens.getCachedResultByIndex(ALGORITHM_BARCODE_RECOGNITION, 1-1), Result, name)),
6, 0xFF0000); // 第6行,显示实际名称,红色文字
// 显示第一个条形码的内容标签
k10.canvas->canvasText("第一个条形码内容: ", 7, 0x0000FF); // 第7行,蓝色文字
k10.canvas->canvasText((RET_ITEM_STR(huskylens.getCachedResultByIndex(ALGORITHM_BARCODE_RECOGNITION, 1-1), Result, content)),
8, 0x0000FF); // 第8行,显示实际内容,蓝色文字
}
// 更新画布显示,将缓存的内容刷新到屏幕上
k10.canvas->updateCanvas();
// 延迟50ms,控制循环频率约为20Hz,平衡响应速度和CPU负载
delay(50);
}
3、代码解读:
代码架构分析
- 头文件引入
cpp
#include "unihiker_k10.h" // UniHiker开发板驱动库
#include "DFRobot_HuskylensV2.h" // HUSKYLENS AI视觉传感器库
unihiker_k10.h: 提供屏幕显示、触摸控制等硬件功能
DFRobot_HuskylensV2.h: 封装了HUSKYLENS传感器的所有AI算法和通信协议
- 全局对象初始化
cpp
HuskylensV2 huskylens; // AI视觉传感器对象
UNIHIKER_K10 k10; // 开发板控制对象
uint8_t screen_dir=2; // 屏幕方向参数
这里创建了系统的两个核心组件实例。
初始化流程详解
setup() 函数分析
cpp
void setup() {
k10.begin(); // 初始化开发板基础硬件
Wire.begin(); // 启动I2C通信(默认SDA=8, SCL=9)
// 传感器初始化重试机制
while (!huskylens.begin(Wire)) {
delay(100); // 指数退避策略的简化实现
}
k10.initScreen(screen_dir); // 配置屏幕显示方向
k10.creatCanvas(); // 创建图形绘制缓冲区
// 设置AI算法模式
huskylens.switchAlgorithm(ALGORITHM_BARCODE_RECOGNITION);
}
关键技术点:
硬件抽象层: 通过对象封装底层硬件操作
鲁棒性设计: 传感器初始化失败时的自动重试机制
显示双缓冲: creatCanvas()创建离屏缓冲区,避免闪烁
主循环逻辑深度解析
数据处理流程
cpp
void loop() {
// 数据获取阶段
huskylens.getResult(ALGORITHM_BARCODE_RECOGNITION);
// 状态检查阶段
if ((huskylens.available(ALGORITHM_BARCODE_RECOGNITION))) {
// 信息提取与显示阶段
// ... 显示逻辑
}
// 显示更新阶段
k10.canvas->updateCanvas();
delay(50); // 时序控制
}
信息显示逻辑分析
- 中心条形码识别
cpp
RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_BARCODE_RECOGNITION), Result, ID)
getCachedCenterResult(): 获取画面中心区域的识别结果
RET_ITEM_NUM: 宏定义,从结果结构中提取数值字段
实现视觉焦点优先策略,符合人眼观察习惯
- 多目标统计
cpp
huskylens.getCachedResultNum(ALGORITHM_BARCODE_RECOGNITION)
返回当前帧中检测到的所有条形码数量
反映传感器的多目标检测能力
- 结构化数据提取
cpp
RET_ITEM_STR(huskylens.getCachedResultByIndex(..., Result, name)
RET_ITEM_STR(huskylens.getCachedResultByIndex(..., Result, content)
分别提取条形码的标识名称和编码内容
展示了传感器的高级解析能力
系统架构特点
- 分层架构设计
text
应用层: 条形码识别显示系统
↓
服务层: HUSKYLENS库 + UniHiker库
↓
驱动层: I2C通信 + 屏幕驱动
↓
硬件层: 传感器 + 显示屏 + ESP32-S3 - 数据流模型
text
传感器采集 → I2C传输 → 算法处理 → 结果缓存 → 数据显示 - 实时性考虑
20Hz更新频率 (delay(50))
缓冲区机制避免显示撕裂
非阻塞式传感器通信
4、测试实验MInd+图形编程

5、测试实验场景图




更多推荐

所有评论(0)