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

2019-07-12 20:34发布

移植二维码识别库zbar到linux系统arm嵌入式设备
目标:1.将zbar源码移植到linux arm or mips架构设备上 2.打开摄像头并运行zbar算法进行一维码,二维码识别。3.调试与优化
一、下载zbar源码下载路径:http://zbar.sourceforge.net/download.html解压命令: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) https://download.csdn.net/download/lwjian147/10439103?utm_source=bbsseo
四、嵌入式设备实测 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算法业务逻辑处理等 强相关)

欢迎来信探讨。