利用opencv和一个摄像头设备即可实现智能识别二维码和条形码,用到的都是基础的opencv知识。
二维码和条形码的照片可以去网上自行搜索。
这个项目可以有很多扩展:
1:比如做成一个公司的二维码证件识别系统,如果符合员工条件,就授予权限打开门禁
2:比如做成一个流氓网站自动识别系统,对一些非法的二维码和条形码进行示警提示。
3:大家可以联系实际情况,进行场景扩展
源码如下:
import cv2
import numpy as np
from pyzbar.pyzbar import decode
cap=cv2.VideoCapture(0)
#非法网站数据(自己可以随便定义)
mydata=["QR码数据2","QR码数据1"]
print(mydata)
while True:
success,img=cap.read()
#镜像
image = cv2.flip(img, 1)
#解码数据
code=decode(image)
#输出解码的内容
print(code)
#由于解码的数据是列表形式,就可以使用遍历和索引获得对应的值
for barcode in code:
print(barcode.data.decode('utf-8'))
print(barcode.type)
print(barcode.data)
#将二维码的四个点转换成int32类型
point=np.array([barcode.polygon],np.int32)
print(point)
point=point.reshape((-1,1,2))
print(point)
#将四个点进行连线
cv2.polylines(image,[point],True,(0,0,255),3)
#判断这些数据是否在自己的本地库里面
if barcode.data.decode('utf-8') in mydata:
text='Dangerous information'
color=(0,0,255)#红色
else:
text='safe information'
color=(0,255,0)#绿色
#将符合条件的内容填入进这个图像中
cv2.putText(image,text,(barcode.rect[0],barcode.rect[1]),cv2.FONT_HERSHEY_COMPLEX,0.9,color,3)
cv2.imshow('III',image)
cv2.waitKey(1)
这是我自己实现的结果图片:(由于直接上传二维码会被当作不良图片屏蔽,所以我加了马赛克处理)
由于找到的条形码不够清晰,索性用自己饮料外包装的条形码了:
总的来说,实现了自己预想的效果。
仅供学习参考,如有不足,敬请指正!