python3+pyzbar+Image實現二維碼識別
阿新 • • 發佈:2020-08-06
python3+pyzbar+Image 進行圖片二維碼識別
1.前言
最近公司有個專案要寫個程式自動識別客戶提交照片裡的二維碼,一接到這個任務馬上就想到了用Python這個萬能的工具!
2.搜尋
首先在網上到處找了很多“靈感”,看看其他人都會用什麼包來完成這個功能。實現方法大體可分為下面幾類:
2.1用zbar
但zbar不支援python3,只好作罷,用python2的可參考:https://www.cnblogs.com/dcb3688/p/4241048.html
2.2呼叫zxing專案
後面找這個zxing包,應用例程可見:http://www.cnblogs.com/oucsheep/p/6269813.html
https://blog.csdn.net/ld326/article/details/78671099 python3可用這個包,但用起來很麻煩,只好捨去再尋找
2.3opencv+pyzbar
偶然點開了一個視訊識別二維碼的例程(https://blog.csdn.net/zx66zx/article/details/82785334),試執行後感覺這個太厲害了!
但是這個是識別視訊中的二維碼,而我要做的是圖片識別,經過試驗後找到了最終可行且簡單的方法:Image+pyzbar
3.實現
3.1pip安裝pyzbar和Image兩個包
pip install Pillow
pip install pyzbar
3.2測試程式碼
- 編寫測試程式碼:PyZbarTest.py
import pyzbar.pyzbar as pyzbar from PIL import Image,ImageEnhance image = "test.jpg" 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.show() 圖片讀取測試 barcodes = pyzbar.decode(img) for barcode in barcodes: barcodeData = barcode.data.decode("utf-8") print(barcodeData)
- 執行測試程式碼
python PyZbarTest.py
是不是很簡單!可以識別一張照片上的多個二維碼,若識別效果不好可相應的調節亮度、銳利化、對比度還有灰度。實際測試中一般增加對比度和灰度化後識別效果會更好。
4.後續
需要提供系統級功能介面,供Java呼叫。