利用OpenCV与Pyzbar实现条形码及二维码识别
技术实现概述
现代应用场景中,二维条码与线性条码的识别需求日益增长。本文提供基于Python的解决方案,通过整合图像处理库与解码工具,实现对多种类型码制的实时识别。核心流程包含视频流采集、图像分析及结果可视化三个阶段。
依赖项安装
运行前需确保环境已部署以下组件:
pip install opencv-python pyzbar
示例代码实现
import cv2
import numpy as np
from pyzbar import pyzbar
class BarcodeScanner:
def __init__(self):
self.camera = cv2.VideoCapture(0)
self.camera.set(3, 1280)
self.camera.set(4, 720)
def start_capture(self):
while True:
frame_status, frame = self.camera.read()
if not frame_status:
print("视频流异常")
break
decoded_items = pyzbar.decode(frame)
for item in decoded_items:
print(f"内容: {item.data.decode('utf-8')}")
print(f"类型: {item.type}")
print(f"位置: {item.rect}")
points = np.array(item.polygon, np.int32)
points = points.reshape((-1, 1, 2))
cv2.polylines(frame, [points], True, (255, 0, 0), 2)
cv2.putText(
frame,
item.data.decode('utf-8'),
(item.rect.left, item.rect.top - 10),
cv2.FONT_HERSHEY_DUPLEX,
0.9,
(0, 255, 0),
2
)
cv2.imshow('Scanner', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
self.camera.release()
cv2.destroyAllWindows()
break
if __name__ == "__main__":
scanner = BarcodeScanner()
scanner.start_capture()
核心模块解析
1. 依赖库导入
import cv2
import numpy as np
from pyzbar import pyzbar
cv2:提供图像处理功能numpy:支持多维数组运算pyzbar:实现码制解码算法
2. 设备初始化
self.camera = cv2.VideoCapture(0)
self.camera.set(3, 1280)
self.camera.set(4, 720)
- 初始化视频采集设备
- 设置输出分辨率参数
3. 实时处理流程
while True:
frame_status, frame = self.camera.read()
if not frame_status:
break
decoded_items = pyzbar.decode(frame)
for item in decoded_items:
# 数据解析与可视化处理
- 持续获取视频帧数据
- 使用解码引擎提取码制信息
4. 可视化渲染
cv2.polylines(frame, [points], True, (255, 0, 0), 2)
cv2.putText(frame, item.data.decode('utf-8'), ...)
- 绘制检测区域边界
- 渲染识别结果文本
5. 交互控制
if cv2.waitKey(1) & 0xFF == ord('q'):
self.camera.release()
cv2.destroyAllWindows()
- 键盘事件监听
- 资源释放与窗口关闭
技术特性
本方案支持以下功能特性:
- 多种码制识别(包括QR Code、EAN-13等)
- 实时视频流处理能力
- 识别结果可视化展示
- 系统资源智能管理