最近一个项目需要识别二维码,找来找去找到了 zbar 和 zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家。
ZBar 是款桌面电脑用条形码 / 二维码扫描工具,支持摄像头及图片扫描,支持多平台,例如 iPhone,Andriod 手机,同时 ZBar 封装了二维码扫描的 API 开发包。
ZBar 目前条码类型有:EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5 and QR Code.
从上可以看出,zbar 有挺多优势,封装了 API,支持多平台,支持多种条码类型,包括一维、二维码。
具体主页:http://zbar.sourceforge.net/
进入 https://pypi.python.org/pypi/zbar,可以看到最新版本是 0.10,提供源码以及 python2.5、python2.6 下的 exe 版本。
File | Type | Py Version | Uploaded on | Size |
---|---|---|---|---|
zbar-0.10.tar.bz2(md5,pgp) | Source | 2009-11-10 | 15KB | |
zbar-0.10.tar.gz(md5,pgp) | Source | 2009-11-10 | 18KB | |
zbar-0.10.win32-py2.5.exe(md5,pgp) | MS Windows installer | 2.5 | 2009-11-10 | 74KB |
zbar-0.10.win32-py2.6.exe(md5,pgp) | MS Windows installer | 2.6 | 2009-11-10 | 205KB |
zbar-0.10.zip(md5,pgp) | Source | 2009-11-10 | 31K | |
结论:没有 whl,没有 python2.7 的 exe 安装,更不奢望 64 位版本之类。
百度找到非官方发布的 python2.7 下 zbar 安装文件,https://github.com/jacobvalenta/zbar-py27-msi/blob/master/zbar-0.10.win32-py2.7_2.msi。
实测可用,这里为了说明 pypi 的编译过程,不使用该方案。
windows 系统安装并配置 mingw 编译器,是另一个大坑,爬坑的过程不细说,简要描述如下:
1、下载 mingw 5.1.6 ,地址如下:http://d1.rsdown.cn/soft1/mingw5.1.6.zip
2、解压后,双击其中的 mingw.exe 进行安装,选择常用的安装包,例如 gcc 等。
3、配置 mingw 安装路径,参看:http://blog.csdn.net/wangrouyi/article/details/7454687(注意,这个说明中的 mingw 是按照在 d:\mingw 下,如果你是安装在 c 盘,则要改成 c:\mingw。)
- 右击我的电脑,点属性 - >高级 - >环境变量。然后:1)、在PATH里加入D: \MinGW\bin,记得,如果里面还有其他的变量,记得要加个分号啊,分号得在英文输入模式下输入的。2)、新建LIBRARY_PATH变量,如果有的话,在值中加入D: \MinGW\lib,这是标准库的位置。3)、新建C_INCLUDEDE_PATH变量,值设为D\MinGW\include。4)、新建CPLUS_INCLUDE_PATH变量,值为D\MinGW\include\c++\3.4.5;D: \MinGW\include\c++\3.4.5;D: \MinGW\include\c++\3.4.5\backward;D: \MinGW\include。
4、python 中配置 mingw 编译器。
在 C:\Python27\Lib\distutils 下新建或者修改 distutils.cfg 文件,内容如下:
- [build] compiler = mingw32
- C: \Users\zou > pip install zbar Collecting zbar Downloading http: //mirrors.aliyun.com/pypi/packages/33/54/cc5819efc9ee7e34b60b41e1d2d4753b6dd0c26a41c9a552611f66aa106e/zbar-0.10.tar.bz2
- Installing collected packages: zbar Running setup.py install
- for zbar...error Complete output from command c: \python27\python.exe - u - c "import setuptools, tokenize;__file__='c:\\users\\joshua~1\\appdata\\local\\temp\\pip-build-pnikpa\\zbar\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))"install--record c: \users\joshua~1\appdata\local\temp\pip - 2chu03 - record\install - record.txt--single - version - externally - managed--compile: running install running build running build_ext building 'zbar'extension creating build creating build\temp.win32 - 2.7 creating build\temp.win32 - 2.7\Release c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall - Ic: \python27\include - Ic: \python27\PC - c zbarmodule.c - o build\temp.win32 - 2.7\Release\zbarmodule.o In file included from zbarmodule.c: 24 : zbarmodule.h: 26 : 18 : zbar.h: No such file or directory In file included from zbarmodule.c: 24 : zbarmodule.h: 37 : error: `ZBAR_ERR_NUM ' undeclared here (not in a function)
- zbarmodule.h:67: error: syntax error before "zbar_image_t"
- zbarmodule.h:67: warning: no semicolon at end of struct or union
- zbarmodule.h:69: error: syntax error before '
- }
- ' token
- zbarmodule.h:69: warning: type defaults to `int' in declaration of`zbarImage '
- zbarmodule.h:69: warning: data definition has no type or storage class'
- To install this module type the following: :
- python setup.py install
- Dependencies------------
- This module requires the ZBar Bar Code Reader,
- which may be obtained from:
- *http: //zbar.sourceforge.net/
- Windows users please note: the module * will NOT load * unless the ZBar library DLL(currently libzbar - 0.dll) is available in your Windows system PATH !
简单翻译一下:
a、python zbar 安装方法:python setup.py install
b、python zbar 需要 zbar reader,zbar reader 可以从 http://zbar.sourceforge.net / 网址下载到。
c、windows 平台,需要 zbar dll,最新版本名字为 libzbar-0.dll 。
- Windows Installer
- Note that the Windows port is in an unstable,
- testing phase.If you do
- try it out,
- please let us know how well it 's working for you and open a support request if you encounter any problems.
- The Windows Installation Guide has detailed instructions for installing and getting started with ZBar on Windows.
- ZBar 0.10 Windows installer
- The Windows installer now includes pre-built binaries of the dependencies (ImageMagick et al). Copyright, license, and source code details for these libraries may be found in the README included with the distribution.
- Windows binaries for the Python module are available from PyPI'
具体网址:https://jaist.dl.sourceforge.net/project/zbar/zbar/0.10/zbar-0.10-setup.exe ,下载后安装 zbar reader 执行程序
在 C:\Program Files (x86)\ZBar\lib 目录下,果然找到 libzbar-0.lib 库文件。
在 C:\Program Files (x86)\ZBar\include 目录下,果然找到 zbar.h 头文件。
- ext_modules = [Extension('zbar', ['zbarmodule.c', 'enum.c', 'exception.c', 'symbol.c', 'symbolset.c', 'symboliter.c', 'image.c', 'processor.c', 'imagescanner.c', 'decoder.c', 'scanner.c', ], library_dirs = ['C:\Program Files (x86)\ZBar\lib'], libraries = ['libzbar-0'], include_dirs = ['C:\Program Files (x86)\ZBar\include'], ),
- d: \src\ > python setup.py install running install running build running build_ext building 'zbar'extension c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall "-IC:\Program Files (x86)\ZBar\include" - Ic: \python27\include - Ic: \python27\PC - c zbarmodule.c - o build\temp.win32 - 2.7\Release\zbarmodule.o c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall "-IC:\Program Files (x86)\ZBar\include" - Ic: \python27\include - Ic: \python27\PC - c enum.c - o build\temp.win32 - 2.7\Release\enum.o c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall "-IC:\Program Files (x86)\ZBar\include" - Ic: \python27\include - Ic: \python27\PC - c exception.c - o build\temp.win32 - 2.7\Release\exception.o c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall "-IC:\Program Files (x86)\ZBar\include" - Ic: \python27\include - Ic: \python27\PC - c symbol.c - o build\temp.win32 - 2.7\Release\symbol.o c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall "-IC:\Program Files (x86)\ZBar\include" - Ic: \python27\include - Ic: \python27\PC - c symbolset.c - o build\temp.win32 - 2.7\Release\symbolset.o c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall "-IC:\Program Files (x86)\ZBar\include" - Ic: \python27\include - Ic: \python27\PC - c symboliter.c - o build\temp.win32 - 2.7\Release\symboliter.o c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall "-IC:\Program Files (x86)\ZBar\include" - Ic: \python27\include - Ic: \python27\PC - c image.c - o build\temp.win32 - 2.7\Release\image.o c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall "-IC:\Program Files (x86)\ZBar\include" - Ic: \python27\include - Ic: \python27\PC - c processor.c - o build\temp.win32 - 2.7\Release\processor.o c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall "-IC:\Program Files (x86)\ZBar\include" - Ic: \python27\include - Ic: \python27\PC - c imagescanner.c - o build\temp.win32 - 2.7\Release\imagescanner.o c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall "-IC:\Program Files (x86)\ZBar\include" - Ic: \python27\include - Ic: \python27\PC - c decoder.c - o build\temp.win32 - 2.7\Release\decoder.o c: \mingw\bin\gcc.exe - mno - cygwin - mdll - O - Wall "-IC:\Program Files (x86)\ZBar\include" - Ic: \python27\include - Ic: \python27\PC - c scanner.c - o build\temp.win32 - 2.7\Release\scanner.o writing build\temp.win32 - 2.7\Release\zbar.def c: \mingw\bin\gcc.exe - mno - cygwin - shared - s build\temp.win32 - 2.7\Release\zbarmodule.o build\temp.win32 - 2.7\Release\enum.o build\temp.win32 - 2.7\Release\exception.o build\temp.win32 - 2.7\Release\symbol.o build\temp.win32 - 2.7\Release\symbolset.o build\temp.win32 - 2.7\Release\symboliter.o build\temp.win32 - 2.7\Release\image.o build\temp.win32 - 2.7\Release\processor.o build\temp.win32 - 2.7\Release\imagescanner.o build\temp.win32 - 2.7\Release\decoder.o build\temp.win32 - 2.7\Release\scanner.o build\temp.win32 - 2.7\Release\zbar.def "-LC:\Program Files (x86)\ZBar\lib" - Lc: \python27\libs - Lc: \python27\PCbuild - Lc: \python27\PC\VS9.0 - llibzbar - 0 - lpython27 - lmsvcr90 - o build\lib.win32 - 2.7\zbar.pyd running install_lib copying build\lib.win32 - 2.7\zbar.pyd - >c: \python27\Lib\site - packages running install_egg_info Writing c: \python27\Lib\site - packages\zbar - 0.10 - py2.7.egg - info
注意,上文中红色字体部分,Include 目录增加了 C:\Program Files (x86)\ZBar\include,Lib 目录增加了 C:\Program Files (x86)\ZBar\lib 目录 。
至于 libzbar-0 是因为 lib 目录中是已经有 lib 文件。
来源: http://www.cnblogs.com/zhongtang/p/7148082.html