移植二维码识别库zbar到linux系统arm嵌入式设备

移植二维码识别库zbar到linux系统arm嵌入式设备

目标:
1.将zbar源码移植到linux arm or mips架构设备上
2.打开摄像头并运行zbar算法进行一维码,二维码识别。
3.调试与优化

一、下载zbar源码
下载路径:
解压命令:tar jxvf zbar-0.10.tar.bz2

zbar源码貌似已经停止更新了,虽然支持的码类不是很丰富,但主流的QRcode,Code128,EAN code等还是支持的。

二、编译源码
1.方法一:如果能将上述源码编译脚本修改好,合入嵌入式设备的codebase里一起编译,也是可以的,但貌似修改的工作量不少。
2.方法二:可以选择在ubuntu上交叉编译。配置好编译工具链,根据需要配选zbar的功能,例如
./configure --enable-shared --without-python --without-gtk --without-qt --without-imagemagick CFLAGS=""
去掉python,gtk,qt,imagemagic这些可能用不到的功能。

3.编译后的主要结果:
├── include
│   ├── zbar
│   │   ├── Decoder.h
│   │   ├── Exception.h
│   │   ├── Image.h
│   │   ├── ImageScanner.h
│   │   ├── Processor.h
│   │   ├── Scanner.h
│   │   ├── Symbol.h
│   │   ├── Video.h
│   │   └── Window.h
│   └── zbar.h
├── lib
│   ├── libzbar.a
│   ├── libzbar.la
│   ├── libzbar.so -> libzbar.so.0.2.0
│   ├── libzbar.so.0 -> libzbar.so.0.2.0
│   ├── libzbar.so.0.2.0

编译后可以用file命令 查看是否是嵌入式设备所支持的类型,否则交叉编译工具链没配置好!
命令如:
==arm架构:
$ file libzbar.so.0.2.0
libzbar.so.0.2.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), not stripped

==mips架构
$ file libzbar.so.0.2.0
libzbar.so.0.2.0: ELF 32-bit LSB shared object, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, not stripped



三、测试程序
编写一个测试程序,可以在嵌入式目标板可运行,(ps:没有采用opencv方式,主要是相关库太占资源)
主要功能:
a.打开摄像头
b.调用zbar算法
c.输出结果。

1. 打开摄像头
主要还是利用v4l的相关库来调用摄像头,注意不同平台的linux系统,摄像头的驱动节点有些差异,例如部分 /dev/video0 ,或 /dev/video1或其他命名的节点。这个编写测试程序是需要提前确认。

2.调用zbar算法
调用前需要配置一些参数:摄像头节点、
摄像头数据格式, 例如YUYV、分辨率、debug等级、
是否显示,注意zbar的显示依赖x相关库,并不是所有linux平台都支持、
解码后显示的格式等。
后面就调用zbar_processor_create等函数,创建线程,获取视频内容进行识别,
结果通过回调函数输出。

3.输出结果
a.方法一:可以通过回调函数 串口uart调试信息输出,查看。
b.方法二:如果设备需要usb hid 输出,则需要 嵌入式设备支持usb hid功能。
嵌入式设备usb hid打通关键:
(1).设备支持gadget,可以通过节点dev/hidg0判断。
(2).usb hid 设备相关描述符
linux usb hid 设备端测试程序:(支持arm 或 mips)

四、嵌入式设备实测
1. 将编译好的zbar相关库 合入目标板系统,例如system/lib/下
2. 将编译好的测试程序,push到目标板,例如 system/bin下
3. 上述内容可能需要修改权限才能执行,例如,chmod 777 xxx
4. 部分设备可以挂载t卡,可以将上述内容放在t卡,然后挂载t卡之后拷贝到对应目录。

运行识别测试程序,实测zbar的算法,
a.能正确识别主流的QRcode,code128,ean code等
b.对于准确率来说,能识别出来的,基本没有错误的。(排除usb hid传输异常)
c. 用zbar算法识别纯二维码图片,识别时间约200ms;
c. 在目标板上单纯打开摄像头+执行zbar识别算法的测试程序,识别时效实测大约在500ms~850ms之间,
d. 整机综合测试,主观感受识别时间在1s以内。(与摄像头、目标板主控性能,主要功能业务与zbar算法业务逻辑处理等 强相关)


欢迎来信探讨。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: OpenCV和ZBar是两个常用的开源,可以用于实现摄像头识别二维码的功能。 首先,OpenCV是一款用于计算机视觉的开源,它提供了丰富的图像处理和计算机视觉算法,可以用来处理图像和视频。OpenCV支持各种程序设计语言,包括C++、Python等,因此非常方便开发者进行二维码的图像处理和识别。 而ZBar是一款专门用于二维码和条形码扫描的开源。它提供了各种功能强大的接口,可以对摄像头捕捉到的图像进行二维码识别ZBar支持多种编程语言,如C、C++、Python等,因此可以与OpenCV结合使用。 要实现摄像头识别二维码的功能,可以按照以下步骤进行: 1. 首先,使用OpenCV打开摄像头,获取实时图像流。 2. 将摄像头捕捉到的图像传递给ZBar进行二维码识别ZBar提供了相关的函数和接口,可以将摄像头捕获的图像进行处理,并识别其中的二维码。 3. 当ZBar识别二维码时,可以通过回调函数或其他方式将识别到的二维码信息传递给应用程序,可以对识别到的二维码进行相关的操作,如解析二维码内容,打开对应的链接或进行其他业务处理。 总的来说,通过将OpenCV和ZBar结合使用,我们可以实现摄像头实时识别二维码的功能。这样,我们可以利用摄像头实时获取图像流,并通过ZBar对图像进行识别,从而实现对二维码的实时扫描和处理。 ### 回答2: OpenCV是一个开源的计算机视觉,提供了丰富的图像处理和计算机视觉算法。而ZBar是一个开源的条码和二维码识别,能够通过摄像头进行实时的二维码识别。 使用OpenCV和ZBar实现摄像头识别二维码的步骤如下: 1. 首先,我们需要使用OpenCV中的VideoCapture类来打开摄像头,并获取实时的视频帧。 2. 在每一帧中,我们将使用ZBar提供的二维码识别功能。通过将每一帧转换为灰度图像,可以提高识别效果。 3. 在灰度图像上,我们可以使用ZBar的Scanner类进行二维码的扫描。Scanner类可以检测到图像中的所有二维码,并返回相关信息。 4. 当扫描到二维码时,我们可以从Scanner类中获取二维码的内容。 5. 最后,我们可以使用OpenCV提供的绘图功能,在视频帧上标记出识别到的二维码的位置和内容。 通过以上步骤,我们可以实现摄像头实时识别二维码的功能。这种方法可以应用于一些需要实时扫描二维码的场景,例如门禁系统、物流追踪等。同时,OpenCV和ZBar的开源特性也使得开发者能够根据自己的需求进行定制和修改,提高二维码识别的准确率和效率。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值