二维码的生成与识别,Python可以这样做

  在当前的生活中,二维码的应用越来越广泛。网上购物、消费付款、资讯阅读、生产管理、食品溯源、电子票务、交通出行、会议签到、活动组织、防伪标志、个人名片、资料分享等等,都在大量的应用二维码。

  用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等;还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

  经过编制形成的这串编码中,一个0对应的就是一个白色小方块,一个1对应的就是一个黑色的小方块。我们把这些小方块按照8个一组,填进大方块里,这就是一个完整的,可以被手机相机识别的二维码图案了。二维条码有一维条码没有的“定位点”和“容错机制”。不知大家有没有发现,所有的二维码都有三个小方块在边上。其实这三个方块是用来定位的,但为什么是三个呢,简单说就是三点确定一个面。如果只有一个点,经过这个点有无数个方框,两个点,有两个方框,因此就设了三个方块。所以不管你正着扫、倾斜扫、旋转180度扫,都能识别出来。”容错机制“就是在即使没有辨识到全部的条码、或是说条码有污损时,也可以正确地还原条码上的信息。

  一、二维码的生成

1、安装pillow,qrcode库

<code>pip install pillow
pip install qrcode/<code>
<code>import qrcode as qrcode
qr = qrcode.QRCode(
version=1, #二维码的格子矩阵大小
error_correction=qrcode.constants.ERROR_CORRECT_Q,
box_size=10,
border=4,
)
qr.add_data("栖客中国\\r\\n祝您身体健康万事如意!\\r\\n因为有你,这个世界更精彩!")#向二维码添加数据
qr.make(fit=True)
img = qr.make_image(fill_color="green", back_color="white")#更改QR的背景和绘画颜色
img.show()# 显示二维码/<code>

生成二维码后,可以得到下面的二维码,如下左图。用手机扫描可以看到如下右图。

二维码的生成与识别,Python可以这样做

  二、二维码的识别

1、安装opencv和pyzbar两个模块

<code>pip install opencv-python
pip install pyzbar/<code>
<code>import cv2 as cv
from pyzbar import pyzbar as pyzbar

def decodeDisplay(image):
barcodes = pyzbar.decode(image)
for barcode in barcodes:
# 提取二维码的边界框的位置
# 画出图像中条形码的边界框
(x, y, w, h) = barcode.rect
cv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)

# 提取二维码数据为字节对象,所以如果我们想在输出图像上
# 画出来,就需要先将它转换成字符串
barcodeData = barcode.data.decode("UTF8")
barcodeType = barcode.type

# 绘出图像上条形码的数据和条形码类型
text = "{} ({})".format(barcodeData, barcodeType)
cv.putText(image, text, (x, y - 10), cv.FONT_HERSHEY_SIMPLEX,.5, (0, 0, 125), 2)
# 向终端打印条形码数据和条形码类型
print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData))
return image

def detect():
camera = cv.VideoCapture(0)
while True:
# 读取当前帧

ret, frame = camera.read()
# 转为灰度图像
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
im = decodeDisplay(gray)
c=cv.waitKey(5)#等待5毫秒
cv.imshow("camera", im)
if(c==27):#按下esc键关闭摄像头窗口
camera.release()
cv.destroyAllWindows()
break

if __name__ == '__main__':
detect()/<code>

在电脑上测试时,我启用了电脑自带摄像头,如下图,摄像头扫描手机提示的二维码,获取信息在后面编程界面显示。

二维码的生成与识别,Python可以这样做

  到此,在python中实现二维码的生成和识别,已经完成,你也快去试试吧!


分享到:


相關文章: