实时警报通知:微信告警通知的重要性解析
923
2022-12-19
构建一个基于Raspberry Pi的二维码扫描器
要求
Pi 相机模块
在树莓派中安装 OpenCV
这里 OpenCV 库将用于 Raspberry Pi QR 扫描仪。要安装 OpenCV,首先,更新 Raspberry Pi。
sudo apt-get 更新
然后安装在 Raspberry Pi 上安装 OpenCV 所需的依赖项。
之后,使用以下命令在 Raspberry Pi 中安装 OpenCV。
安装其他必需的软件包
安装ZBar
Zbar 是检测和解码不同类型条码和二维码的最佳库。使用以下命令安装库:
pip3 安装 pyzbar
安装imutils
imutils 用于使基本的图像处理功能,如平移、旋转、调整大小、骨架化和使用 OpenCV 更轻松地显示 Matplotlib 图像。使用以下命令安装 imutils:
pip3 安装 imutils
安装argparse
使用以下命令安装 argparse 库。argparse负责解析命令行参数。
pip3 安装 argparse
树莓派二维码阅读器硬件设置
在这里,我们只需要 Raspberry Pi 和 Pi 相机,用于使用 Raspberry Pi 相机的 QR 码扫描仪,您只需将相机色带连接器连接到 Raspberry pi 中提供的相机插槽中
Pi 摄像头可用于构建各种有趣的项目,如Raspberry Pi 监控摄像头、访客监控系统、家庭安全系统等。
Raspberry Pi 二维码阅读器的 Python 代码
因此,像往常一样,通过导入所有必需的包来启动代码。
从 imutils.video 导入 VideoStream从 pyzbar 导入 pyzbar导入参数解析导入日期时间导入 imutils进口时间导入cv2
#vs = VideoStream(src=0).start()vs = VideoStream(usePiCamera=True).start()时间.sleep(2.0)
现在在循环中,从视频流中抓取一帧并将其调整为 400 像素。一旦它抓取到帧,调用pyzbar.decode函数来检测和解码 QR 码。
帧 = vs.read()框架 = imutils.resize(框架,宽度 = 400)条形码 = pyzbar.decode(frame)
现在,循环检测到的条形码以提取条形码的位置并在图像上的条形码周围绘制边界框。
对于条形码中的条形码: (x, y, w, h) = 条形码.rect cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
然后使用解码(“utf-8”)函数将检测到的条形码解码为“utf-8”字符串,然后使用barcode.type函数提取条形码的类型。
条码数据 = 条码.data.decode(“utf-8”)
条码类型 = 条码类型
之后,将提取的条形码数据和条形码类型保存在一个名为 text 的变量中,并在图像上绘制条形码数据和类型。
text = “{} ({})”.format(barcodeData,barcodeType)
cv2.putText(框架,文本,(x,y - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
现在显示带有条形码数据和条形码类型的输出。
cv2.imshow(“条码阅读器”, frame)
现在在最后一步,检查是否按下了键‘s’,然后中断主循环并开始清理过程。
# 如果 `s` 键被按下,退出循环
如果键 == ord(“s”):
休息
print(“[INFO] 清理。..”)
csv.close()
cv2.destroyAllWindows()
与停止()
测试 Raspberry Pi 二维码扫描器
设置完成后,启动 QR 码阅读器程序。您将看到一个窗口,显示来自您的摄像头的实时视图,现在您可以在 PI 摄像头前显示条形码。当 pi 解码条码时,它会在其周围绘制一个带有条码数据和条码类型的红色框,如下图所示:
这就是您只需使用 Raspberry Pi 板和 Pi 相机或 USB 相机即可轻松构建Raspberry Pi 相机 QR 码阅读器的方法。
从 imutils.video 导入 VideoStream 从 pyzbar 导入 pyzbar 导入参数解析 导入日期时间 导入 imutils 进口时间 导入简历2 ap = argparse.ArgumentParser() ap.add_argument("-o", "--output", type=str, default="barcodes.csv", help="输出包含条形码的 CSV 文件的路径") args = vars(ap.parse_args()) #vs = VideoStream(src=0).start() #如果您使用的是网络摄像头,请取消注释 vs = VideoStream(usePiCamera=True).start() # 用于 Pi 相机 时间.sleep(2.0) csv = open(args["输出"], "w") 找到 = 设置() 而真: 帧 = vs.read() 框架 = imutils.resize(框架,宽度 = 400) 条形码 = pyzbar.decode(frame) 对于条形码中的条形码: (x, y, w, h) = 条形码.rect cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2) 条码数据 = 条码.data.decode("utf-8") 条码类型 = 条码类型 text = "{} ({})".format(barcodeData,barcodeType) 打印(文本) cv2.putText(框架,文本,(x,y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2) # 如果条形码文本当前不在我们的 CSV 文件中,则写入 # 时间戳+条形码到磁盘并更新集合 如果没有找到barcodeData: csv.write("{},{}\n".format(datetime.datetime.now(), 条形码数据)) csv.flush() found.add(barcodeData) cv2.imshow("条码阅读器", frame) 键 = cv2.waitKey(1) & 0xFF # 如果 `s` 键被按下,退出循环 如果键 == ord("s"): 休息 print("[INFO] 清理...") csv.close() cv2.destroyAllWindows() 与停止()
发表评论
暂时没有评论,来抢沙发吧~