- 要求
- 在Raspberry Pi中安装OpenCV
- 安装其他必需的软件包
- Raspberry pi QR Code阅读器硬件设置
- Raspberry Pi QR Code阅读器的Python代码
- 测试Raspberry Pi QR码扫描仪
QR码(快速响应代码)是一种矩阵条形码,其中包含有关其所附项目的信息,例如位置数据,标识符或标识网站或应用程序的跟踪器等。它是一种机器可读的光学标签为2D图像形式,并且具有不同的样式。要了解有关QR码以及如何生成QR码的更多信息,请遵循我们之前的教程。
在本教程中,我们将使用OpenCV和ZBar库构建基于Raspberry Pi的QR Code Scanner。ZBar是检测和解码不同类型的条形码和QR码的最佳库。OpenCV用于从视频流中获取新帧并进行处理。一旦OpenCV捕获了一个帧,我们就可以将其传递给专用的Python条形码解码库,例如ZBar,它解码条形码并将其转换为相应的信息。
要求
- Raspberry Pi 3(任何版本)
- Pi相机模组
在继续进行此Raspberry Pi 3 QR码扫描器之前,首先,我们需要在该项目中安装OpenCV,条形码解码库ZBar,imutils和其他一些依赖项。OpenCV在这里用于数字图像处理。数字图像处理的最常见应用是对象检测,面部识别和人员计数器。
在Raspberry Pi中安装OpenCV
这里,OpenCV库将用于Raspberry Pi QR扫描仪。要安装OpenCV,首先,更新Raspberry Pi。
sudo apt-get更新
然后安装在Raspberry Pi上安装OpenCV所需的依赖项。
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev -y sudo apt-get install libatlas-base-dev -y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –y sudo apt-get安装libqt4-test –y
之后,使用以下命令在Raspberry Pi中安装OpenCV。
pip3安装opencv-contrib-python == 4.1.0.25
我们以前将OpenCV与Raspberry pi一起使用,并在其上创建了很多教程。
- 使用CMake在Raspberry Pi上安装OpenCV
- 使用Raspberry Pi和OpenCV进行实时人脸识别
- 使用Raspberry Pi和OpenCV进行车牌识别
- 使用OpenCV和Raspberry Pi进行人群估计
我们还从初学者开始创建了一系列OpenCV教程。
安装其他必需的软件包
安装 ZBar
Zbar是检测和解码不同类型的条形码和QR码的最佳库。使用以下命令安装库:
pip3安装pyzbar
安装 imutils
imutils用于通过OpenCV简化基本的图像处理功能,例如平移,旋转,调整大小,构图和显示Matplotlib图像。使用以下命令安装imutils:
pip3安装imutils
安装 argparse
使用以下命令安装argparse库。 argparse 负责解析命令行参数。
pip3安装argparse
Raspberry pi QR Code阅读器硬件设置
在这里,对于使用Raspberry Pi Camera的QR码扫描仪,我们仅需要Raspberry Pi和Pi相机,您只需要将相机色带连接器连接到Raspberry pi中提供的相机插槽中即可
Pi相机可用于构建各种有趣的项目,例如Raspberry Pi监控相机,访客监控系统,家庭安全系统等。
Raspberry Pi QR Code阅读器的Python代码
页面末尾提供了Raspberry Pi QR阅读器的完整代码。在对Raspberry Pi进行编程之前,让我们了解代码。
因此,像往常一样,通过导入所有必需的包来启动代码。
从imutils.video导入从pyzbar导入VideoStream导入pyzbar导入argparse导入datetime导入imutils导入时间导入cv2
然后构造参数解析器并解析参数。命令行参数包含有关CSV文件路径的信息。CSV(逗号分隔值)文件包含我们视频流中每个条形码的时间戳和有效载荷。
ap = argparse.ArgumentParser()ap.add_argument(“-o”,“ --output”,type = str,default =“ barcodes.csv”,help =“输出包含条形码的CSV文件的路径”)args = vars( ap.parse_args())
之后,如果使用USB网络摄像头,请初始化视频流并取消注释行。
#vs = VideoStream(src = 0).start()vs = VideoStream(usePiCamera = True).start()time.sleep(2.0)
现在进入 循环, 从视频流中抓取一帧并将其大小调整为400像素。抓住框架后,调用 pyzbar.decode 函数检测并解码QR码。
frame = vs.read()frame = imutils.resize(frame,width = 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”字符串,然后使用条形码.type函数提取条形码的类型。
条形码数据=条码数据.decode(“ utf-8”)条码类型=条码类型
之后,将提取的条形码数据和条形码类型保存在名为text的变量中,然后在图像上绘制条形码数据和类型。
text =“ {}({})”。format(barcodeData,条形码类型)cv2.putText(frame,text,(x,y-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,255),2)
现在显示带有条形码数据和条形码类型的输出。
cv2.imshow(“条形码阅读器”,框架)
现在,在最后一步中,检查是否按下了键“ s”,然后中断主循环并开始清理过程。
key = cv2.waitKey(1)&0xFF#如果按下`s`键,则在key == ord(“ s”)的情况下中断循环:break print(“ cleaning…”)csv.close( )cv2.destroyAllWindows()vs.stop()
测试Raspberry Pi QR码扫描仪
设置完成后,启动QR码阅读器程序。您将看到一个窗口,显示来自摄像机的实时视图,现在您可以在PI摄像机的前面显示条形码。当pi解码条形码时,它将在其周围绘制一个带有条形码数据和条形码类型的红色框,如下图所示:
这是您仅使用Raspberry Pi板和Pi相机或USB相机即可轻松构建Raspberry Pi相机QR码阅读器的方法。
下面给出了该项目的工作视频和完整代码。