HUSKYLENS 2 (二哈识图 2) 是一款简单易用、玩法多样的AI视觉传感器,采用6TOPS算力专用AI芯片,预置人脸识别、目标检测、物体分类、姿态识别、实例分割等20余种开机即用的AI模型,同时,用户还可部署自行训练的模型,教会二哈识图识别任意目标物体。板载的UART / I2C端口,可以与主流控制器Arduino、micro:bit、ESP32、Raspberry Pi等开源硬件无缝连接,被广泛应用于创客、AI教育、STEAM教育和交互艺术领域。

1、测试实验硬件连接
将HukyLens 2 连接到Arduino主板对应的I2C引脚,使用电源线连接Arduino Uno与电脑。额外供电提示:Arduino Uno的I2C引脚输出的电压不足以支持HUSKYLENS 2正常工作,当HUSKYLENS 2接在Arduino Uno上时须有额外数据线连接HUSKYLENS 2的Type-C接口与电源,为HUSKYLENS 2进行额外供电。接线图可参考下图。

2、设置测试实验平台
打开 Mind+ 编程软件,选择主控板 Arduino,加载HUSKYLENS 2 库
3、识别二维码,是指通过图像采集与解码技术,从二维码图案中提取出所包含的信息。二维码(QR Code)是一种二维条码,它以黑白模块构成的矩阵图案编码数据,具有高密度、容错性强、可快速读取等特点。
(1)什么是二维码识别?
二维码识别是指设备(如摄像头、扫描器或图像处理系统)对二维码图像进行分析、定位、解码,从而获取其中存储的信息,如网址、文本、产品编号、身份信息等。
(2)识别流程简述
图像采集:通过摄像头或扫描器获取二维码图像。
图像预处理:去除噪声、增强对比度、校正角度。
定位二维码区域:识别二维码的位置与边界。
解码分析:根据二维码标准(如 QR Code、Data Matrix)解析模块排列,提取编码数据。
输出信息:将解码结果转换为可读内容,如字符串、链接、指令等。
(3)技术实现方式
硬件识别:使用专用扫码枪或嵌入式模块进行快速识别。
软件识别:利用图像处理库(如 OpenCV、Zxing、ZBar)在计算机或移动设备上识别二维码。
AI增强识别:结合深度学习模型提升识别准确率,尤其在模糊、遮挡或复杂背景下。
(4)应用场景
移动支付与扫码登录
工业自动化与产品追踪
医疗标签与药品识别
零售商品管理与促销活动
门票验证与身份识别

4、AI 视觉传感器 HUSKYLENS 2 之识别二维码输出相关数据
在二维码识别功能下,HUSKYLENS 2 能识别出现在画面中的二维码,可以通过编程获取画面中离十字光标最近的二维码的相关数据并在串口打印出来,可以读取数据有:二维码ID、二维码名称、二维码解码内容、二维码宽度、二维码高度以及二维码中心点的X坐标位置和Y坐标位置。
(1)测试实验开源代码
/* 【花雕动手做】AI 视觉传感器 HUSKYLENS 2 之识别二维码输出相关数据
* 使用平台:MindPlus
* 主控板:Arduino Uno
*/
#include "DFRobot_HuskylensV2.h" // 引入 HUSKYLENS 2 的驱动库,用于控制 AI 视觉传感器
// 创建一个 HUSKYLENS 设备对象,命名为 huskylens
HuskylensV2 huskylens;
// 初始化函数,仅在程序启动时运行一次
void setup() {
Serial.begin(9600); // 初始化串口通信,波特率设置为 9600,用于与电脑串口监视器通信
Wire.begin(); // 初始化 I2C 通信,用于与 HUSKYLENS 模块连接
// 持续尝试连接 HUSKYLENS,直到连接成功
while (!huskylens.begin(Wire)) {
delay(100); // 每次尝试之间延迟 100 毫秒
}
// 串口输出初始化成功提示信息
Serial.println("HUSKYLENS 2 启动成功");
Serial.println("识别二维码输出相关数据");
}
// 主循环函数,持续运行
void loop() {
// 请求 HUSKYLENS 执行条码识别算法(包括二维码识别)
huskylens.getResult(ALGORITHM_BARCODE_RECOGNITION);
// 判断是否有二维码识别结果可用
if (huskylens.available(ALGORITHM_QRCODE_RECOGNITION)) {
// 输出二维码的唯一 ID(用于区分多个二维码)
Serial.println("二维码ID为:" +
String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, ID)));
// 输出二维码的内容(例如网址、文本、编码信息等)
Serial.println("二维码内容为:" +
String(RET_ITEM_STR(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, content)));
// 输出二维码在图像中的中心点 X 坐标
Serial.println("二维码中心点X坐标为:" +
String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, xCenter)));
// 输出二维码在图像中的中心点 Y 坐标
Serial.println("二维码中心点Y坐标为:" +
String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, yCenter)));
// 输出二维码的高度(像素单位)
Serial.println("二维码高度为:" +
String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, height)));
// 输出二维码的宽度(像素单位)
Serial.println("二维码宽度为:" +
String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, width)));
}
// 延迟 10 秒后再次识别,避免过于频繁地读取数据
delay(10000);
}
程序核心目标
使用 HUSKYLENS 2 AI 视觉传感器识别图像中的二维码,并输出其 ID、内容、位置(中心坐标)、尺寸(宽度与高度)等信息。
逐步代码解读
(1)引入库与创建对象
cpp
#include "DFRobot_HuskylensV2.h"
HuskylensV2 huskylens;
引入 HUSKYLENS 2 的驱动库。
创建一个名为 huskylens 的对象,用于与相机进行通信。
(2)初始化设置(setup)
cpp
void setup() {
Serial.begin(9600); // 初始化串口通信,波特率为 9600
Wire.begin(); // 初始化 I2C 通信,用于连接 HUSKYLENS
while (!huskylens.begin(Wire)) {
delay(100); // 持续尝试连接 HUSKYLENS,直到连接成功
}
Serial.println("HUSKYLENS 2 启动成功");
Serial.println("识别二维码输出相关数据");
}
初始化串口和 I2C 通信。
连接 HUSKYLENS 设备,连接成功后输出提示信息。
(3)主循环(loop)
cpp
void loop() {
huskylens.getResult(ALGORITHM_BARCODE_RECOGNITION);
请求 HUSKYLENS 执行条码识别算法(包括二维码识别)。
cpp
if (huskylens.available(ALGORITHM_QRCODE_RECOGNITION)) {
判断是否有二维码识别结果可用。
(4)输出二维码识别结果
如果识别到二维码,程序将输出以下信息:
二维码 ID
cpp
Serial.println("二维码ID为:" +
String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, ID)));
每个二维码在识别系统中有唯一 ID,用于区分多个二维码。
二维码内容
cpp
Serial.println("二维码内容为:" +
String(RET_ITEM_STR(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, content)));
输出二维码中编码的信息,如网址、文本、指令等。
中心坐标(X 和 Y)
cpp
Serial.println("二维码中心点X坐标为:" +
String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, xCenter)));
Serial.println("二维码中心点Y坐标为:" +
String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, yCenter)));
输出二维码在图像中的中心位置,有助于定位或跟踪。
尺寸信息(高度与宽度)
cpp
Serial.println("二维码高度为:" +
String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, height)));
Serial.println("二维码宽度为:" +
String(RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_QRCODE_RECOGNITION), Result, width)));
输出二维码在图像中的尺寸,便于判断距离或识别精度。
(5)延迟控制
cpp
delay(10000);
每次识别后延迟 10 秒,避免过于频繁地读取数据,适合稳定测试或演示。
(3)实验串口返回情况

(4)实验场景图 动态图
评论