Canmv K210开发板案例——条形码识别

本文介绍了在CanmvIDE环境下使用K210学习条形码识别技术,包括导入库、初始化设备、优化处理流程以提高识别速度,通过实例展示了从图像捕获、条形码类型识别到结果打印的过程,以及优化前后识别效果的对比。
摘要由CSDN通过智能技术生成

学习目标:

在Canmv IDE环境下使用K210学习学习条形码识别技术,分析条形码的信息、解码出条形码的文数信息、框出条形码,优化提高识别速度

条形码识别原理:

  • 自1949年诞生以来,条形码技术已被广泛应用于各种场合,用于存储和传递关键信息,如商品的产地、制造商、名称、生产日期、图书分类号、邮件路径及日期等。这种编码系统由不同宽度的黑色条带(代表数据)和白色空格(分隔数据)组成,遵循特定的编码规则,将数字和字母信息转换成可读的图形标识。
  • 市面上常见的条形码类型包括EAN-13、Code128、UPC、ITF-14、交叉25码、矩阵25码、Codabar码、Code93码和SSCC-18码等,每种都有其独特的应用场景和优势。

学习内容:

1、导入相关库,并初始化摄像头和LCD显示屏,将摄像头的颜色设置为灰度

import sensor, image, time, lcd    # sensor 引入感光元件的模块

lcd.init()
sensor.reset()# 初始化相机传感器
sensor.set_pixformat(sensor.GRAYSCALE) # GRAYSCALE
#sensor.set_framesize(sensor.VGA) # 高分辨率
sensor.set_framesize(sensor.QVGA)
#因为我们的条形码一般都是一个长的矩形,一般要设置窗口大小,小和窄一点。一般窗口设置为640X80.意思是只显示条形码的这一部分。这样能够提高检测速度
#sensor.set_windowing((640, 80))       # V Res的80 ==更少的工作(40为2倍的速度)。
sensor.skip_frames(time = 2000)  # 跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳定。
sensor.set_auto_gain(False)  # 必须关闭此功能,以防止图像冲洗…
sensor.set_auto_whitebal(False)  # 必须关闭此功能,以防止图像冲洗…
clock = time.clock()

2、转化条形码的类型名称为字符串

def barcode_name(code):   #返回条形码所属类型
    if(code.type() == image.EAN2):
        return "EAN2"
    if(code.type() == image.EAN5):
        return "EAN5"
    if(code.type() == image.EAN8):
        return "EAN8"
    if(code.type() == image.UPCE):
        return "UPCE"
    if(code.type() == image.ISBN10):
        return "ISBN10"
    if(code.type() == image.UPCA):
        return "UPCA"
    if(code.type() == image.EAN13):
        return "EAN13"
    if(code.type() == image.ISBN13):
        return "ISBN13"
    if(code.type() == image.I25):
        return "I25"
    if(code.type() == image.DATABAR):
        return "DATABAR"
    if(code.type() == image.DATABAR_EXP):
        return "DATABAR_EXP"
    if(code.type() == image.CODABAR):
        return "CODABAR"
    if(code.type() == image.CODE39):
        return "CODE39"
    if(code.type() == image.PDF417):
        return "PDF417"
    if(code.type() == image.CODE93):
        return "CODE93"
    if(code.type() == image.CODE128):
        return "CODE128"

3、通过while循环 将摄像头采集的画面进行条形码分析,如果图像中有条形码,则将条形码的信息打印出来,并用绿色框出条形码的位置,本文使用I25条形码

while(True):
    clock.tick() #记录开始时间 与clock.fps()搭配使用
    img = sensor.snapshot() #摄像头拍摄一张照片
    fps = clock.fps() # clock.tick()到开始时间计算出频率
    codes = img.find_barcodes() #检测条形码
    for code in codes:
        img.draw_rectangle(code.rect(), color=(0, 255, 0))  # 将返回的条形码框选

        # 打印条形码信息  条形码类型,返回条形码的有效载荷的字符串,返回以弧度计的条形码的旋度(浮点数)此处再转换成角度,条形码在图像中被检测到的次数(int),图片帧率
        print_args = (barcode_name(code), code.payload(), (180 * code.rotation()) / math.pi, code.quality(),clock.fps())
        print("Barcode %s, Payload \"%s\", rotation %f (degrees), quality %d,FPS %f" % print_args)
    img.draw_string(0, 0, "%2.1ffps" %(fps), color=(0, 60, 128), scale=2.0) #打印二维码内容
    lcd.display(img)

实验分析:

实验条形码:
在这里插入图片描述


未优化时屏幕识别效果:

在这里插入图片描述


未优化时识别结果: 检测到的次数平均30左右,FPS平均9左右

在这里插入图片描述


未优化时代码展示: 未使用高分辨率、未设置适应与条形码长宽比例的分辨率

在这里插入图片描述


优化后代码展示: 使用高分辨率、设置适应与条形码长宽比例的分辨率

在这里插入图片描述


优化后屏幕识别效果:

在这里插入图片描述


优化后识别结果: 检测到的次数平均8左右,FPS平均13左右;与为优化之前对比明显可以看出识别速度提高,效率提高

在这里插入图片描述


实验过程与总结:

实验过程:

  • 实验通过检测条形码的位置后解码获得条形码信息。首先导入需要的库,初始化摄像头和LCD显示屏,并设置摄像头捕获图像为灰度模式,以提高处理效率。然后程序进入一个持续的循环过程,对摄像头画面进行实时分析,寻找并识别条形码。当条形码被检测到,系统会自动将其信息并通过终端打印,并在图像上用绿色框标识其位置,展示了颜色识别技术在自动化和信息提取中的应用。

总结:

  • 系统初始化后,LCD实时显示摄像头捕获的图像,能够自动识别并框出扫描的条形码,并在IDE的串行监视器中展示结果。支持多种条形码标准,用户可通过在线工具或IDE内置功能生成自定义条形码,实现高效数据处理。为提高识别准确度,建议在光线较好环境中操作,以减少误识别的可能性

完整代码展示:

# Find_barcodes.py - By: Jack - 周日 4月 14 2024

import sensor, image, time, math, lcd

lcd.init()
sensor.reset()# 初始化相机传感器
sensor.set_pixformat(sensor.GRAYSCALE) # GRAYSCALE
#sensor.set_framesize(sensor.VGA) # 高分辨率
sensor.set_framesize(sensor.QVGA)
#因为我们的条形码一般都是一个长的矩形,一般要设置窗口大小,小和窄一点。一般窗口设置为640X80.意思是只显示条形码的这一部分。这样能够提高检测速度
#sensor.set_windowing((640, 80))       # V Res的80 ==更少的工作(40为2倍的速度)。
sensor.skip_frames(time = 2000)  # 跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳定。
sensor.set_auto_gain(False)  # 必须关闭此功能,以防止图像冲洗…
sensor.set_auto_whitebal(False)  # 必须关闭此功能,以防止图像冲洗…
clock = time.clock()

def barcode_name(code):   #返回条形码所属类型
    if(code.type() == image.EAN2):
        return "EAN2"
    if(code.type() == image.EAN5):
        return "EAN5"
    if(code.type() == image.EAN8):
        return "EAN8"
    if(code.type() == image.UPCE):
        return "UPCE"
    if(code.type() == image.ISBN10):
        return "ISBN10"
    if(code.type() == image.UPCA):
        return "UPCA"
    if(code.type() == image.EAN13):
        return "EAN13"
    if(code.type() == image.ISBN13):
        return "ISBN13"
    if(code.type() == image.I25):
        return "I25"
    if(code.type() == image.DATABAR):
        return "DATABAR"
    if(code.type() == image.DATABAR_EXP):
        return "DATABAR_EXP"
    if(code.type() == image.CODABAR):
        return "CODABAR"
    if(code.type() == image.CODE39):
        return "CODE39"
    if(code.type() == image.PDF417):
        return "PDF417"
    if(code.type() == image.CODE93):
        return "CODE93"
    if(code.type() == image.CODE128):
        return "CODE128"

while(True):
    clock.tick() #记录开始时间 与clock.fps()搭配使用
    img = sensor.snapshot() #摄像头拍摄一张照片
    fps = clock.fps() # clock.tick()到开始时间计算出频率
    codes = img.find_barcodes() #检测条形码
    for code in codes:
        img.draw_rectangle(code.rect(), color=(0, 255, 0))  # 将返回的条形码框选

        # 打印条形码信息  条形码类型,返回条形码的有效载荷的字符串,返回以弧度计的条形码的旋度(浮点数)此处再转换成角度,条形码在图像中被检测到的次数(int),图片帧率
        print_args = (barcode_name(code), code.payload(), (180 * code.rotation()) / math.pi, code.quality(),clock.fps())
        print("Barcode %s, Payload \"%s\", rotation %f (degrees), quality %d,FPS %f" % print_args)
    img.draw_string(0, 0, "%2.1ffps" %(fps), color=(0, 60, 128), scale=2.0) #打印二维码内容
    lcd.display(img)

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Carnegie Mellon University (CMU) 创建了一个名为 CANMV 的 IDE 软件。CANMV 是计算机辅助导航多维数据可视化的工具。这个软件的主要目标是帮助用户通过图形化界面更好地分析和可视化多维数据集。CANMV 提供了一系列功能,包括数据导入、数据预处理、数据可视化、模式识别和模型构建。 首先,CANMV 允许用户将多维数据集导入到软件中。用户可以从不同的数据源中导入数据,例如文本文件、数据库或网络接口。导入数据后,用户可以使用 CANMV 的数据预处理功能进行清洗和转换。用户可以对数据进行过滤、标记、归一化等操作,以准备数据进行可视化和分析。 其次,CANMV 提供了丰富的数据可视化工具。用户可以根据需要选择不同的可视化方式,如散点图、柱状图、曲线图等。用户可以自定义可视化的颜色、图标和图表类型,以根据数据集的特点更好地呈现数据。此外,用户还可以进行多维数据的交互式探索,通过缩放、平移和旋转等操作来观察数据的各个特征。 除了数据可视化,CANMV 还提供了模式识别和模型构建的功能。用户可以使用内置的算法和模型来发现数据集中的模式和趋势。CANMV 支持聚类、分类、回归等常见的数据挖掘任务,用户可以根据自己的需求选择适合的算法进行分析和建模。 总而言之,CANMV 是一款由 CMU 开发的多维数据可视化和分析软件。它提供了数据导入、预处理、可视化、模式识别和模型构建的功能,帮助用户更好地理解和分析多维数据集。CANMV 通过直观的图形化界面,使得数据分析和可视化变得更易于操作和理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值