怎麼用python檢測圖片中是否包含二維碼?

前言

因為一直在幾個平臺發文章,發現有些平臺並不會檢測文章中的圖片是否會包含二維碼,但是其中也有平臺會去檢測,所以就去研究了一下python如何去檢測。搜了一下大概有兩個庫可以使用:

一個是zbar,這個庫是挺牛的,不過只支援python2。7,再者也沒有繼續維護,什麼年代了,應該沒人使用python2。7了吧(2020年1月以後連python2。7都不再維護了,有還在使用的童靴該跟上時代了)。

一個是pyzbar,基本上傳承了zbar的功能。

安裝

順便把Pillow庫也安裝了,安裝時候最好加上豆瓣源,這樣就很快能搞定安裝。

pip install pyzbar -i http://pypi。douban。com/simple ——trusted-host pypi。douban。compip install Pillow

測試

準備圖片

首先去二維碼生成網站準備一堆二維碼作為測試準備,我準備了一些圖片,也有不包含二維碼的。

怎麼用python檢測圖片中是否包含二維碼?

程式碼

使用方法如下圖,圖片使用Pillow庫開啟,再用pyzbar的decode解碼,程式碼如下:

import pyzbar。pyzbar as pyzbarfrom PIL import Image,ImageEnhanceimport osimg_dir = “。。\\img”def open_img(): img_list = [] for _,_,file_list in os。walk(img_dir): img_list = [os。path。join(img_dir,file) for file in file_list if file。endswith(“。jpg”) or file。endswith(“。png”) ] print(“所有檔案:{}”。format(img_list)) return img_listdef show(): img_list = open_img() for _img in img_list: img = Image。open(_img) # 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’)#灰度化 texts = pyzbar。decode(img) if not texts: print(“{}檔案不存在二維碼”。format(_img)) for text in texts: t = text。data。decode(“utf-8”) if t: print(“{}檔案存在二維碼,內容為:{}”。format(_img,t))if __name__ == ‘__main__’: show()

註釋掉的程式碼可以在圖片識別率低的情況下開啟,以此提高圖片亮度。

執行結果

怎麼用python檢測圖片中是否包含二維碼?

都能正確識別出來,效果還是可以的。

結束

如本文對您有幫助,麻煩關注一下

知識圖譜與大資料

公眾號,當然不關注也無所謂。或者訪問從今天開始種樹。