python 使用zbar解碼二維碼

使用python做二位碼的解析。非常的方便,需要安裝zbar,我使用的是python2.6,Windows Xp,下載的是zbar-0.10.win32-py2.6.exe可以到http://pypi.python.org/pypi/zbar/上面下載,這個安裝包比較方便,源碼安裝比較麻煩,還需要安裝Mingw,我在虛擬機下面是python2.7試一下安裝沒有成功。還需要安裝zbar-0.10-setup.exe。安裝完如下所示可以直接使用。將zar安裝目錄下面 的dll文件複製到Python26\Lib\site-packages下,就可以使用python的zbar模塊了。


簡單圖片掃描:

#!/usr/bin/python
from sys import argv
import zbar
import Image
if len(argv) < 2: exit(1)
# create a reader
scanner = zbar.ImageScanner()
# configure the reader
scanner.parse_config('enable')
# obtain image data
pil = Image.open(argv[1]).convert('L')
width, height = pil.size
raw = pil.tostring()
# wrap image data
image = zbar.Image(width, height, 'Y800', raw)
# scan the image for barcodes
scanner.scan(image)
# extract results
for symbol in image:
    # do something useful with results
    print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data

# clean up
del(image)
視頻檢測:

#!/usr/bin/python
from sys import argv
import zebra

# create a Processor
proc = zbar.Processor()

# configure the Processor
proc.parse_config('enable')

# initialize the Processor
device = '/dev/video0'
if len(argv) > 1:
    device = argv[1]
proc.init(device)

# setup a callback
def my_handler(proc, image, closure):
    # extract results
    for symbol in image:
        if not symbol.count:
            # do something useful with results
            print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data

proc.set_data_handler(my_handler)

# enable the preview window
proc.visible = True

# initiate scanning
proc.active = True
try:
    proc.user_wait()
except zbar.WindowClosed:
    pass
以上內容都可以在http://sourceforge.net/apps/mediawiki/zbar/index.php?title=ZBar_Wiki找到詳細信息。(這邊記錄爲了以後方便學習)
我通過使用wxpython做成一個小軟件,wxpython默認的是unicode編碼,使用qrcode進行生成二維碼。但是其中的解碼問題將我糾集了好久。經常將中文解析爲亂碼。通過不停的查找資料。解碼部分做了如下修改,基本上能解析所有二維碼。

try: 
                utf8Data = symbol.data.decode("gbk") 
            except UnicodeDecodeError: 
                try:
                    utf8Data = symbol.data.decode("utf-8").encode("gbk")
                except:
                    utf8Data=symbol.data.decode('utf-8').encode('sjis').decode('utf-8') 
分別對自己使用wxpython+qrcode生的二維碼和http://tool.anzhuoxiazai.com/在線工具生成的二位碼進行解析。沒有問題。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章