赞
踩
python 实现二维码识别ScanQRcode.py
""" 生成二维码保存及对二维码解码输出 运行需要安装相应库 """ import os import qrcode from PIL import Image from pyzbar import pyzbar def createQRCode1(content, save_path=None): """ 创建二维码图片,并保存 :param content:二维码文本信息 :param save_path:二维码保存地址 :return: """ qr = qrcode.QRCode(version=5, error_correction=qrcode.constants.ERROR_CORRECT_M, box_size=8, border=4) qr.add_data(data=content) qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") if save_path: img.save(save_path) else: img.show() def createQRCode2(content, icon_path, save_path=None): """ 创建带中心图片的二维码,并保存 :param content: 二维码文本信息 :param icon_path: 中心图片地址 :param save_path: 二维码保存地址 :return: 无返回值 """ # 判断中心图片是否存在 if not os.path.exists(icon_path): raise FileExistsError(icon_path) # 创建二维码图片 qr = qrcode.QRCode(version=5, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=8, border=4) qr.add_data(data=content) qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white").convert('RGBA') # 调整二维码图片 icon_img = Image.open(icon_path) code_width, code_height = img.size icon_img = icon_img.resize( (code_width // 4, code_height // 4), Image.ANTIALIAS) img.paste(icon_img, (code_width * 3 // 8, code_width * 3 // 8)) if save_path: img.save(save_path) # 保存二维码图片 img.show() # 显示二维码图片 else: print("save error!") def decode_qr_code(code_img_path): """ 识别二维码,对二维码进行编译,返回值 :param code_img_path: 二维码的保存地址 :return: 二维码的编译结果 """ if not os.path.exists(code_img_path): raise FileExistsError(code_img_path) return pyzbar.decode(Image.open(code_img_path), symbols=[pyzbar.ZBarSymbol.QRCODE]) if __name__ == "__main__": print("============QRcodetest===============") print(" 1、Make a QRcode ") print(" 2、Scan a QRcode ") print("=====================================") print("1、请输入二维码存储信息:") code_Data = input('>>:').strip() print("正在编码·······") # createQRCode2(code_Data, "img/QRcenter.jpg", "qrcode.png") # 内容,center图片,生成二维码图片 createQRCode1(code_Data, "qrcode.png") print("图片已保存,名称为:qrcode.png") results = decode_qr_code("qrcode.png") print("2、正在解码:") if len(results): print("解码结果是:") print(results[0].data.decode("utf-8")) else: print("无法识别")
通过摄像头进行二维码识别ScanQRbyVedio
''' ================================ test4:识别摄像头中的条形码或二维码 (ps.仅识别二维码码成功) ================================ ''' import cv2 import pyzbar.pyzbar as pyzbar def decodeDisplay(image): barcodes = pyzbar.decode(image) for barcode in barcodes: # 提取二维码的边界框的位置 # 画出图像中条形码的边界框 (x, y, w, h) = barcode.rect cv2.rectangle(image, (x, y), (x + w, y + h), (225, 225, 225), 2) # 提取二维码数据为字节对象,所以如果我们想在输出图像上 # 画出来,就需要先将它转换成字符串 barcodeData = barcode.data.decode("utf-8") barcodeType = barcode.type # 绘出图像上条形码的数据和条形码类型 text = "{} ({})".format(barcodeData, barcodeType) cv2.putText(image, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, .5, (225, 225, 225), 2) # 向终端打印条形码数据和条形码类型 print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData)) return image def detect(): camera = cv2.VideoCapture(0) while True: # 读取当前帧 ret, frame = camera.read() # 转为灰度图像 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) im = decodeDisplay(gray) cv2.waitKey(5) cv2.imshow("camera", im) # 如果按键q则跳出本次循环 if cv2.waitKey(10) & 0xFF == ord('q'): break camera.release() cv2.destroyAllWindows() if __name__ == '__main__': detect()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。