_木子_ 发表于 2020-5-12 17:40:10

【HUSKYLENS二哈识图】micro:bit视觉识别入门 04 自助超市收银机

## **自助超市收银机**

如果你经常去超市购物,那么你可能在情不自禁地“剁手”后会 遇到排队结算的窘境,当然,你买的东西越多,你就越囧。随着科技的发展,现在许多超市都有了自助收银机,它给我们的 购物带来了方便。现在我们就来做一个超市的自助收银机,等一等,我们需要怎样 准确识别商品并结算呢?

### **功能介绍**

本项目利用HuskyLens 的标签识别功能,通过识别商品上特定的标签,实现计算总价的自助收银功能。

### **材料清单**

- micro:bit ×1- 扩展板 ×1
- HUSKYLENS×1

### **知识园地**

我们仔细观察超市的收银过程,会发现无论是人工收银还是自助收银,都是通过扫码装置对商品的条形码进行扫码计费,每种商品的条形码都是不一样的,所以我们只需找到扫码装置和条形码的替代品就可以实现我们的项目了。



​                                  条形码 >AprilTag   扫码装置 >HUSKYLENS 的标签识别功能

**一、什么是标签识别?**

> 标签识别技术(简称标识技术)是指对物品进行有效的、标准化的编码与标识的技术手段,它是信息化的基础工作。随着人们对于健康和安全的意识越来越强,食品行业对产品的质量和安全性( 从原料,运输,到生产、贮藏以及涉及的追溯和管理 ) 的要求越来越高、越来越多。标识在满足企业对产品追踪追溯需求等方面也起到了很重要的作用。

> 标识技术主要有条形码技术、IC 卡技术、射频识别技术、光符号识别技术、语音识别技术、生物计量识别技术、遥感遥测、机器人智能感知等技术。



**二、什么是 AprilTag ?**

>AprilTags 是一个出自密歇根大学项目团队的视觉基准系统,主要用于 AR,机器人和相机校准等领域。标签的作用类似于条形码,存储少量信息(标签 ID),同时还可以对标签进行简单而准确的 6D(x,y,z,滚动,俯仰,偏航)姿势估算。



**三、HUSKYLENS 识别 AprilTag 原理**

> AprilTag 识别过程主要包含如下步骤:

> **1. 边缘检测**

> 寻找图像中的边缘轮廓。



**2. 四边形检测**

找出轮廓中的四边形



**3. 解码**

对找出的四边形进行匹配、检查。



通过这些步骤,HUSKYLENS 的标签识别功能就能识别不同的 AprilTags,因此,我们只需要将不同的 AprilTags 贴在不同的商品上就可以实现识别对应商品了。

**四、HUSKYLENS 传感器 - 标签识别功能演示**

**1、侦测标签**

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



**2、学习标签**

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





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



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

**3、识别标签**

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



### **项目实践**

我们将分三个递进任务来完成项目,首先我们使用 HuskyLens 的标签识别功能学习并识别贴有AprilTags 的三件商品;然后在前一步基础上添加开始扫码和结束扫码的事件,方便不同顾客的商品统计;最后在第二步基础上添加商品总价结算功能, 实现现实生活中的超市自助收银功能。

**任务一:识别商品**

>HuskyLens 学习并识别贴在三个不同商品上的标签,编写程序让 Micro:bit 的点阵滚动显示对应的商品名。

**任务二:开始与结束扫码**

> 顾客按下Micro:bit 的 A 键,点阵依次滚动显示 HuskyLens 识别到的商品名,按下B键,点阵不再显示该顾客扫描到的任何商品,下一个顾客按下A 键重新开始扫描。

**任务三:商品结算**

> 在任务二基础上,当识别到任意学习过的商品时,都会在总价中将其售价加入, 按下B 键结束扫码时,点阵会显示顾客从开始扫描后到结束扫描前的所有商品的总价。

#### **任务一:识别商品**

**1、硬件链接**



**2、程序设计**

**STEP1 学习与识别**

假设超市有且仅有水杯、酥饼、美工刀三种商品,它们分别对应三个不同的标签。



HuskyLens 能识别这 3 个不同标签,在“多次学习”模式下按水杯、酥饼、美工刀的顺序完成学习,得到 ID1、ID2、ID3,如果下次识别到相同的标签,HuskyLens 就会返回对应的 ID,这样我们就可以使用选择结构让点阵屏显示 ID 对应的商品名。

**STEP2 Mind+ 软件设置**

打开Mind+ 软件(1.62 或以上版本),切换到“上传模式”,点击“扩展”,在“主控板”下点击加载“micro:bit”,在“传感器”下点击加载“HUSKYLENS AI 摄像头”。





**STEP3 指令学习**

来认识一下主要用到的几条指令。
初始化,仅需执行一次,放在主程序开始和循环执行之间,可选 择 I2C 或串口,I2C 地址不用变动。 注意 HUSKYLENS 端需要在设置中调整“输出协议”与程序中 一致,否则读不出数据。


切换算法,可以随时切换到其他 算法,同时只能存在一个算法, 注意切换算法需要一些时间。


主控板向 HUSKYLENS 请求一次 数据存入“结果”(存在主控板的 内存变量中,一次请求刷新一次 存在内存中的数据),之后可以从 “结果”中获取数据,此模块调 用之后“结果”中才会获取到最 新的数据。


从请求得到的“结果”中获取当前界面中是否有方框或箭头,包含已学习(id 大于 0)和未学习的, 有一个及以上则返回 1。


从请求得到的“结果”中获取是 否 IDx 已经进行了学习


从请求得到的“结果”中获取是 否 IDx 在画面中,方框指屏幕上 目标为方框的的算法,箭头对应 屏幕上目标为箭头的算法,当前 仅为巡线算法时选择箭头,其他 算法都选择方框。

**STEP4 流程图分析**



**3、程序示例**



**4、运行效果**

当识别到水杯、酥饼、美工刀时,点阵会滚动显示“cup”“pastry”“knife”,当没有标签或识别到其他标签,点阵屏会一直处于熄灭状态。


#### **任务二:开始与结束扫码**

**1、硬件链接**

同任务一。

**2、程序设计**

我们需要添加事件让顾客知道何时开始扫描商品,何时结束。假设按下 Micro:bit上的A 键开始扫描商品,每一个商品信息滚动显示完就可以进行下一个商品的扫描, 那么扫描商品的过程就是一个循环,而跳出这个循环的条件就是按下 B 键,下一个顾客需要扫描商品时,只需再按一下 A 键即可。

根据以上分析得出程序逻辑图如下:





**3、程序示例**



**4****、运行效果**

按下A 键前,点阵不会显示扫码识别到的商品名;

按下A 键后、按下 B 键前,点阵依次显示扫码识别到的商品名;

按下B 键后,点阵不会显示扫码识别到的商品名。

#### **任务三:商品结算**

**1、硬件链接**

同任务一。

**2、程序设计**

商品的总价会随着扫描的商品的数量增加而变大,所以只需在任务二的基础上添加一个变量即可,每次按下A 键后都需要将前一个顾客的总价清零,识别到一个商品, 便将该商品对应的价格加入总价中,按下 B 键后显示所有商品的总价。

根据以上分析得出程序逻辑图如下:




**3、程序示例**




**4、运行效果**

在任务二的运行效果基础上,按下 B 键后,点阵会显示总价。

### **项目小结**

#### **项目回顾:**

本项目主要使用二维码标签表示商品的信息,通过标签识别输出特定的 ID,从而实现让点阵显示对应商品信息的功能,并添加了自动结算总账功能,基本上完成了超市的自助收银系统。

#### **知识点回顾:**

1、认识标签识别在生活中的重要性和使用方法

2、学习识别标签并做出相应的判断

#### **项目拓展**

在完成了自助收银之后,我们可否用标签表示一个房屋位置信息,从而让扫地机器人在行进过程中及时判断自己的方位并做出相应调整?

DFH15tZJVo8 发表于 2020-6-6 21:26:11

二维码标签怎么打印出来?我打印的HuskyLens识别不了
页: [1]
查看完整版本: 【HUSKYLENS二哈识图】micro:bit视觉识别入门 04 自助超市收银机