回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【花雕动手做】AI 视觉传感器 HUSKYLENS 2 之统计条形码总数输出指定条形码的数据 简单

头像 驴友花雕 2025.10.09 8 0

0000.jpg

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

 

00 (2).jpg

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

 

01.jpg

 

二、设置测试实验平台
打开 Mind+ 编程软件,选择主控板 Arduino,加载HUSKYLENS 2 库

 

08.jpg

 

三、识别条形码的概念,指的是通过光学扫描设备或图像识别算法,对条形码图案进行解析,从而提取其中编码的信息。条形码是一种将数据编码为黑白条纹或方块图案的视觉符号系统,广泛用于商品管理、物流追踪、身份识别等领域。

1、条形码识别的核心概念
(1)条形码是什么?
条形码是一种机器可读的编码图案,通常由一组黑白条纹或方块组成。
每种条形码标准(如EAN-13、UPC、QR码)都有特定的编码规则和结构。
条形码可表示数字、字母、甚至二进制数据。

(2)识别条形码的过程
条形码识别通常包括以下步骤:
图像采集:使用摄像头或扫描器获取条形码图像
图像预处理:去除噪声、增强对比度、校正角度
定位条码区域:识别图像中可能包含条码的区域
解码分析:根据条码类型解析条纹宽度、间距或模块排列
输出信息:将解码结果转换为可读数据,如商品编号、用户ID等

(3)技术实现方式
硬件识别:使用激光扫描器或CCD图像传感器进行快速读取
软件识别:通过计算机视觉算法(如OpenCV、Zxing)识别图像中的条码
AI增强识别:利用深度学习模型提升识别准确率,尤其在模糊、遮挡或复杂背景下

2、应用场景
零售收银:快速识别商品价格与信息
物流追踪:扫描包裹条码实现自动分拣与定位
医疗管理:识别药品、病人腕带等信息
工业自动化:生产线上的产品识别与质量追踪
移动识别:手机摄像头识别二维码或条形码,实现支付、登录等功能

3、条形码动态图形

02.gif08.gif

四、条形码在线生成网站链接:https://www.ecjson.com/barcode/

 

05.jpg

 

条形码在线生成工具:条形码常被用于商品扫描。
1、下载条形码:鼠标放在条形码上,右键可另存为图片。缩放比例是指图片的大小倍数,无损缩放,范围为1-20,该功能不支持IE11及更早版本,以及非常老的移动浏览器。如果使用缩放功能导致条形码生成失败,缩放比例调整到1即可。
2、条形码生成器支持ean8,ean13,std25,int25,code11,code39,code93,code128,codabar,msi,datamatrix类型条形码生成
3、更多类型的条形码请使用:《工业级条码生成》,如需要使用微信小程序生成条形码,点击查看小程序码
4、CODE128:只能包含ASCII字符(数字、大小写字母及常用符号)
5、CODE128A:只能包含数字、大写字母及部分特殊字符(不能包含小写字母)
6、CODE128B:只能包含数字、大小写字母及部分特殊字符
7、CODE128C:只能由数字组成,并且必须是偶数个数字
8、EAN13:只能由13位数字组成
9、EAN8:只能由8位数字组成
10、UPC:只能由12位数字组成
11、ITF:只能由数字组成,并且必须是偶数个数字
12、ITF14:只能由14位数字组成
13、MSI:只能由数字组成
14、pharmacode:只能由数字组成,且介于 3 - 131070 之间

条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符
常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案
条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息
因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用。

五、实际测试的几个范本

 

03-.jpg
04.jpg
04-.jpg

 

六、当画面中出现多张条形码时,可以使用以下示例程序统计画面中的条形码数量,获取指定ID条形码的相关数据(未学习的条形码ID统一为0,已学习的条形码ID按学习顺序排序)。测试实验开源代码如下:

 

代码
/*【花雕动手做】AI 视觉传感器 HUSKYLENS 2 之统计条形码总数输出指定条形码的数据
 * 使用平台:MindPlus
 * 主控板:Arduino Uno
 */

#include "DFRobot_HuskylensV2.h"  // 引入 HUSKYLENS 2 的驱动库

// 创建 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_BARCODE_RECOGNITION)) {

    // 输出当前识别到的条形码总数
    Serial.println("条形码总数为" + 
      String(huskylens.getCachedResultNum(ALGORITHM_BARCODE_RECOGNITION)));

    // 判断是否存在 ID 为 1 的条形码
    if (huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1) != NULL) {

      // 输出 ID 为 1 的条形码的内容(例如编码信息)
      Serial.println("ID为1的条形码的内容为" + 
        String(RET_ITEM_STR(huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1), Result, content)));

      // 输出该条形码在图像中的中心坐标(x, y)
      Serial.println("ID为1的条形码的中心点坐标为" + 
        String(RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1), Result, xCenter)) + "." + 
        String(RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1), Result, yCenter)));

      // 输出该条形码的宽度
      Serial.println("ID为1的条形码的宽度为" + 
        String(RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1), Result, width)));

      // 输出该条形码的高度
      Serial.println("ID为1的条形码的高度为" + 
        String(RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1), Result, height)));
    }
  }

  // 每次识别间隔10秒,避免过于频繁
  delay(10000);
}

七、实际测试的代码解读

该程序使用 HUSKYLENS 2 AI 相机识别图像中的条形码,并统计总数,同时输出指定 ID 条形码的详细信息。

程序核心目标
使用 HUSKYLENS 2 AI 相机识别图像中的条形码,统计识别到的条码总数,并输出 ID 为 1 的条形码的内容、位置和尺寸。

逐步代码解读
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_BARCODE_RECOGNITION)) {
如果识别结果可用,进入数据处理阶段。

4. 输出识别结果总数
cpp
   Serial.println("条形码总数为" + 
     String(huskylens.getCachedResultNum(ALGORITHM_BARCODE_RECOGNITION)));
获取当前识别到的条形码数量,并通过串口输出。

5. 检查并输出指定 ID 条形码信息
cpp
   if (huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1) != NULL) {
检查是否存在 ID 为 1 的条形码。

如果存在,输出以下信息:

内容(编码信息)
cpp
     Serial.println("ID为1的条形码的内容为" + 
       String(RET_ITEM_STR(huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1), Result, content)));
中心坐标(x, y)
cpp
     Serial.println("ID为1的条形码的中心点坐标为" + 
       String(RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1), Result, xCenter)) + "." + 
       String(RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1), Result, yCenter)));
宽度与高度
cpp
     Serial.println("ID为1的条形码的宽度为" + 
       String(RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1), Result, width)));

     Serial.println("ID为1的条形码的高度为" + 
       String(RET_ITEM_NUM(huskylens.getCachedResultByID(ALGORITHM_BARCODE_RECOGNITION, 1), Result, height)));
6. 延迟控制
cpp
 delay(10000);
每次识别后延迟 10 秒,避免过于频繁地读取数据。

八、测试实验MInd+图形编程

 

06.jpg

九、实验串口返回情况

 

07.jpg

十、测试实验场景图  动态图

 

08 (1).jpg
08 (2).jpg
08 (3).jpg
00229-.gif

评论

user-avatar
icon 他的勋章
    展开更多