近几天在研究二维码的识别,主要是通过python代码来识别特定图片内是否包含二维码。方法有分类,还有下面我介绍的直接法。
需要安装库
pip install pyzbar
pip install opencv-python
我们 先准备些二维码
总共有11个二维码。
下面我们进行二维码识别:
# -*- coding: utf-8 -*-
import os
from pyzbar.pyzbar import decode
import cv2
"""
图片包含二维码检测
"""
def qrcode_recongnize(filepath,filename):
"""
:param filepath: 图片路径
:param filename: 图片名字
:return: qrcode 图片包含二维码,unqrcode 图片不包含二维码
"""
image_type = []
try:
# 读取图片
image = cv2.imread(filepath+filename)
# 灰度化
image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# 解码二维码
result = decode(image)
if len(result)>0:
image_type.append('qrcode')
else:
image_type.append('unqrcode')
except:
image_type.append('unqrcode')
return image_type
if __name__ == '__main__':
filepath="F:/img_spam/test/"
for parent,dirnames,filenames in os.walk(filepath):
for filename in filenames:
kk=qrcode_recongnize(filepath,filename)
print(filename,kk)
运行结果:
10064002865114446300320010019402.jpg ['qrcode']
10064002865147474800320010014524.jpg ['qrcode']
10064002865193399400320010025444.jpg ['qrcode']
10064002865201489200320010016199.jpg ['qrcode']
10064002865201508800320010029686.jpg ['qrcode']
10064002866745871400320010015155.jpg ['qrcode']
10064002917911190400320010025075.jpg ['unqrcode']
10064002918088242900320010011993.jpg ['qrcode']
10064002918093458900320010012496.jpg ['qrcode']
10064002918168035600320010029193.jpg ['qrcode']
20181206142636.png ['qrcode']
Process finished with exit code 0
识别了10个是二维码,有一个二维码识别错误。进过分析,那个未识别的二维码,并不是微信二维码。
而是一个网站的二维码。说明我们写的这个程序只能识别微信二维码,其他类型的二维码识别不了。后面再看看有没有别的方法。
识别二维码方法二:
# -*- coding: utf-8 -*-
from pyzbar.pyzbar import decode
from PIL import Image,ImageEnhance
import os
"""
图片包含二维码检测
"""
def qrcode_recongnize(filepath,filename):
"""
:param filepath: 图片路径
:param filename: 图片名字
:return: qrcode 图片包含二维码,unqrcode 图片不包含二维码
"""
image_type = []
try:
# 读取图片
img = Image.open(filepath + filename).convert('RGB')
# 增加亮度
img = ImageEnhance.Brightness(img).enhance(1.0)
# 锐利化
img = ImageEnhance.Sharpness(img).enhance(1.5)
# 增加对比度
img = ImageEnhance.Contrast(img).enhance(2.0)
# 灰度化
img = img.convert('L')
# 解码二维码
result = decode(img)
if len(result)>0:
image_type.append('qrcode')
else:
image_type.append('unqrcode')
except:
image_type.append('unqrcode')
return image_type
if __name__ == '__main__':
filepath="F:/img_spam/test/"
for parent,dirnames,filenames in os.walk(filepath):
for filename in filenames:
kk=qrcode_recongnize(filepath,filename)
print(filename,kk)