jinglixixi 发表于 2024-10-13 00:05

【K230嵌入式AI开发板测评】+码类识别及应用篇

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

<p>&nbsp;</p>

<p>当初由于项目的需要,曾购置过扫码枪来作为条码识别设备,它是以USB接口来连接扫码枪和电脑或处理识别,见图1所示。</p>

<p> &nbsp;</p>

<p>图1 连接扫码枪</p>

<p>&nbsp;</p>

<p >在扫码时,是先打开记录文件,然后再进行扫码录入,其结果如图2所示。</p>

<p > &nbsp;</p>

<p >图2 扫码结果</p>

<p>&nbsp;</p>

<p>使用证明其操作是非常简单的,唯一的不足是厂家没有提供相应的应用接口,无法以指令的方式从中读取扫描数据。</p>

<p>这次测评的K230开发板也提供了条码识别功能,所以打算用它来取代原扫码枪的设计方案。</p>

<p>由资料可知,CanMV K230使用find_barcodes()函数即可获取由摄像头所采集的图像中条形码的相关信息。</p>

<p>该函数支持所有一维条形码:</p>

<p>mage.EAN2、&nbsp;image.EAN5、&nbsp;image.EAN8、&nbsp;image.UPCE、&nbsp;image.ISBN10、&nbsp;image.UPCA 、image.EAN13、&nbsp;image.ISBN13、&nbsp;image.I25、&nbsp;image.DATABAR (RSS-14) 、image.DATABAR_EXP (RSS-Expanded)、&nbsp;image.CODABAR、&nbsp;image.CODE39、&nbsp;image.PDF417、&nbsp;image.CODE93 、image.CODE128。</p>

<p>条码识别的处理流程如下:</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>为保证测试的成功率,先将待识别的条码图显示在电脑上,如何再运行条码识别程序并以摄像头来采集图像,其测试结果如图3所示,说明识别成功。</p>

<p> &nbsp;</p>

<p>图3 测试结果</p>

<p>&nbsp;</p>

<p>随后又对不同的编码方式进行了测试,其测试结果见图4至图7所示。</p>

<p> &nbsp;</p>

<p>图4 测试样本</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>图5 测试结果</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>图6 测试样本</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p> &nbsp;</p>

<p>图7 测试结果</p>

<p>&nbsp;</p>

<p>此外,还用摄像头对包装上印制的条码进行了实测,其结果如图8和图9所示。结果能得到正确结果,但不如从显示屏上识别的成功率高,似乎与摄像头的拍摄清晰度有关,若在镜头前放置一个放大镜,则会有效地改善识别质量。</p>

<p> &nbsp;</p>

<p> &nbsp;</p>

<p>图8 测试结果</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p> &nbsp;</p>

<p>图9 测试结果</p>

<p>&nbsp;</p>

<p>值得指出的是,在实际应用中需在识别处理的循环内添加一个防同一识别结果再次输出的处理,或是添加一个完成识别的确认键,以便在提取识别结果后进入相应的后续处理。</p>

<p>&nbsp;</p>

<p>实现防识别结果重复输出的关键程序为:</p>

<pre>
<code class="language-python">while True:

      os.exitpoint() #检测IDE中断
      clock.tick()

      img = sensor.snapshot() #拍摄图片

      codes = img.find_barcodes() #查找图像中所有条形码

      for code in codes:

            #对条码画矩形表示
            img.draw_rectangle(code.rect(),thickness=2)

            #打印相关信息
            print_args = (barcode_name(code), code.payload(), (180 * code.rotation()) / math.pi, code.quality())
            if (p == code.payload()):
               p = p
            else :
               print(code.payload())
               p = code.payload()
            img.draw_string_advanced(0, 0, 30, code.payload(), color = (255, 255, 255)) #图像显示条码信息

      Display.show_image(img) #显示图片</code></pre>

<p>&nbsp;</p>

<p>使用该程序识别的结果如图10所示,说明已实现了防重复值输出。</p>

<p> &nbsp;</p>

<p>图10&nbsp; 测试结果</p>

<p>&nbsp;</p>

<p>除了一维的条码,还有用于移动设备的二维码,它比传统的条形码能存储更多的信息,也能表示更多的数据类型。</p>

<p>CanMV K230实现了二维码信息识别,用函数find_qrcodes()即可获取摄像头所采集图像中的二维码信息。</p>

<p>其识别处理的流程为:</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>进行二维码识别的测试如图11和图12所示,通过串行终端窗口可看到其识别结果是一个网址连接,说明测试成功。</p>

<p> &nbsp;</p>

<p>图11 帧缓冲区窗口</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>图12 串行终端窗口</p>

<p>&nbsp;</p>
页: [1]
查看完整版本: 【K230嵌入式AI开发板测评】+码类识别及应用篇