移植二维码识别库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算法业务逻辑处理等 强相关)
欢迎来信探讨。