1、Python下二維碼識別包的使用詳情php
在python下二維碼識別,目前主要有三個模塊:zbar 、zbarlight、zxing。html
未使用zbarlight,緣由是zbarlight和zbar的dll相同,二維碼識別準去率沒提高。另外,該包的pip安裝存在一些問題未解決。java
一、安裝包:python
pip install opencv-pythonredis
pip install pillow image zxing算法
pip install pyzbar微信
二、 安裝使用包過程當中遇到的問題:ui
A、使用zxing是,出現「FileNotFoundError: [WinError 2」spa
解決辦法:安裝java(jdk、jre均可以)。緣由是zxing要調用一些java文件,要求java文件可被執行。.net
B、安裝zbarlight出現「Microsoft Visual C++ 14.0 is required.」
解決辦法:放棄。 緣由:安裝完vc_redist.x86後,仍是會報相關的錯誤。
四、 使用詳情
Pyzbar和zxing識別4張包含二維碼的圖片(圖片以下),目前都只識別出來了前兩張。微信(支付寶)掃一掃,4張均可以識別出來
pyzbar相關代碼:
import pyzbar.pyzbar as pyzbar from PIL import Image, ImageEnhance def zabr_parser(image): img = Image.open(image) # img = ImageEnhance.Brightness(img).enhance(2.0)#增長亮度 # img = ImageEnhance.Sharpness(img).enhance(17.0)#銳利化 # img = ImageEnhance.Contrast(img).enhance(4.0)#增長對比度 img = img.convert('L')#灰度化 img = img.convert("1") img.show() barcodes = pyzbar.decode(img) for barcode in barcodes: barcodeData = barcode.data.decode("utf-8") print(barcodeData)
zxing相關代碼:
1 from PIL import Image 2 import zxing # 導入解析包 3 4 5 def ocr_qrcode_zxing(filename): 6 img = Image.open(filename) 7 zx = zxing.BarCodeReader() # 調用zxing二維碼讀取包 8 data = '' 9 zxdata = zx.decode(filename) # 圖片解碼 10 return zxdata.parsed # 返回記錄的內容
四、使用的圖片
2、對比:
一、zbar和zbarlight內核一致,都是基於zbar的dll編譯加載的。zbarlight使用比zbar更簡單,不過是在zbar的基礎又作了封裝,增長易用性,二維碼識別準確率沒有提升。
二、zxing是基於java的zxing核心的python分支,其原理是調用javaw 加載zxing的core.jar包,再獲取輸出結果。
三、微信和支付寶的掃一掃功能較python的這三個包強大不少,是有本身的算法(微信掃一掃使用了zxing,應該作了必定的修改。參考https://my.oschina.net/yushulx/blog/495471)