pip 安装 opencv 教程 https://hotdog29.com/?p=550

今天的博客文章分为四个部分。

在第一部分中,我将向您展示如何安装ZBar库 (使用Python绑定)。

ZBar库将与OpenCV一起用于扫描和解码条形码和QR码。

一旦正确配置了ZBar和OpenCV,我将演示如何在单个图像中扫描条形码和QR码。

从单个图像开始将为我们提供准备下一步所需的练习:使用OpenCV和ZBar实时读取条形码和QR码,

最后,我将演示如何将我们的实时条形码扫描器部署到Raspberry Pi。

安装ZBar(使用Python绑定)进行条形码解码

使用Python 3(官方 zbar Python绑定仅支持Python 2.7)
检测并准确定位条形码中图像的位置。
安装必要的软件是一个简单的三步过程。

步骤1: 从 apt 或 brew 存储库 安装 zbar

为Ubuntu或Raspbian安装ZBar
可以使用以下命令完成为Ubuntu安装ZBar:

$ sudo apt-get install libzbar0

步骤2(可选):创建虚拟环境并安装OpenCV

你有两个选择:

使用已准备好OpenCV的现有虚拟环境(跳过此步骤并转到 步骤3)。
或者创建一个新的,孤立的虚拟环境,包括安装OpenCV。
虚拟环境是Python开发的最佳实践,我强烈建议您使用它们。:

标题第3步:安装 pyzbar

$ pip install pyzbar

如果您尝试将pyzbar安装 到Python的系统版本中,请确保您也使用 sudo 命令。

在单个图像中使用OpenCV解码条形码和QR码

在我们实现实时条形码和QR码读取之前,让我们首先从单个图像扫描仪开始

打开一个新文件,将其命名为 barcode_scanner_image .py 并插入以下代码:

from pyzbar import pyzbar
import argparse
import cv2
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,help="path to input image")
args = vars(ap.parse_args())

在 第2-4行,我们导入我们所需的包。

无论 pyzbar 和 CV2 (OpenCV的)需要按照前一节中的说明进行安装。

相比之下, argparse 包含在Python安装中,它负责解析命令行参数。

我们为此脚本(- image )提供了一个 必需的命令行参数, 并在第7-10行进行了解析 。

您将在本节末尾看到如何在传递包含输入图像路径的命令行参数时运行脚本。

现在,让我们拍摄输入图像并将pyzbar放入 工作:

# load the input image
image = cv2.imread(args["image"])
# find the barcodes in the image and decode each of the barcodes
barcodes = pyzbar.decode(image)

在 第13行,我们 通过其路径加载输入 图像(包含在我们方便的 args 字典中)。

从那里,我们称之为 pyzbar 。解码 查找和解码 条码 中 的图像 (第16行)。这就是ZBar的所有魔力发生的地方。

我们还没有完成 - 现在我们需要解析条形码 变量中包含的信息 :

# loop over the detected barcodes
for barcode in barcodes:# extract the bounding box location of the barcode and draw the# bounding box surrounding the barcode on the image(x, y, w, h) = barcode.rectcv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)# the barcode data is a bytes object so if we want to draw it on# our output image we need to convert it to a string firstbarcodeData = barcode.data.decode("utf-8")barcodeType = barcode.type# draw the barcode data and barcode type on the imagetext = "{} ({})".format(barcodeData, barcodeType)cv2.putText(image, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 0, 255), 2)# print the barcode type and data to the terminalprint("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData))
# show the output image
cv2.imshow("Image", image)
cv2.waitKey(0)

从第19行开始,我们遍历检测到的 条形码 。

在这个循环中,我们继续:

从条形码中提取边界框 (x,y) -坐标 。矩形 对象(第22行),使我们能够定位和确定,其中在所述输入图像的当前条形码。
绘制 在检测到的条形码周围的 图像上绘制一个边界框矩形 (第23行)。
将条形码解码 为 “utf-8” 字符串并提取条形码类型(第27和28行)。打电话是至关重要的 。解码(“utf-8” ) 函数对象将字节数组转换为字符串。您可以通过删除/评论来进行实验,看看会发生什么 - 我会将此作为实验让您尝试。
在图像上格式化并绘制 barcodeData 和 barcodeType(第31-33行)。
最后,将相同的数据和类型信息输出到终端以进行调试(第36行)。
我们来测试我们的OpenCV条形码扫描仪。您应该使用此博客文章底部的 “下载”部分下载代码和示例图像。

从那里,打开终端并执行以下命令:

An OpenCV barcode and QR code scanner with ZBarPython

$ python barcode_scanner_image.py --image barcode_example.png
[INFO] Found QRCODE barcode: {"author": "Adrian", "site": "PyImageSearch"}
[INFO] Found QRCODE barcode: https://www.pyimagesearch.com/
[INFO] Found QRCODE barcode: PyImageSearch
[INFO] Found CODE128 barcode: AdrianRosebrock
$ python barcode_scanner_image.py --image barcode_example.png
[INFO] Found QRCODE barcode: {"author": "Adrian", "site": "PyImageSearch"}
[INFO] Found QRCODE barcode: https://www.pyimagesearch.com/
[INFO] Found QRCODE barcode: PyImageSearch
[INFO] Found CODE128 barcode: AdrianRosebrock

正如您在终端中看到的那样,所有四个条形码都被找到并正确解码!

有关已处理图像的信息,请参阅 图1,该图像已覆盖红色矩形和我们软件找到的每个条形码的文本。

使用OpenCV实时读取条形码和QR码
在上一节中,我们学习了如何为单个图像创建Python + OpenCV条形码扫描程序。

我们的条形码和QR码扫描仪运行良好 - 但它提出了一个问题,我们可以实时检测和解码条形码+ QR码吗?

要查找,请打开一个新文件,将其命名为 barcode_scanner_video .py ,然后插入以下代码:

An OpenCV barcode and QR code scanner with ZBarPython

# import the necessary packages
from imutils.video import VideoStream
from pyzbar import pyzbar
import argparse
import datetime
import imutils
import time
import cv2# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-o", "--output", type=str, default="barcodes.csv",help="path to output CSV file containing barcodes")
args = vars(ap.parse_args())

在 第2-8行,我们导入了我们所需的包。

此时,回想一下上面的解释,你应该识别 pyzbar , argparse 和 cv2 。

我们还将使用 VideoStream 以高效的线程方式处理捕获视频帧。您可以在此处了解有关VideoStream类的更多信息。如果您 的系统上没有安装 imutils,只需使用以下命令:

An OpenCV barcode and QR code scanner with ZBarShell

$ pip install imutils

我们将解析一个 可选的命令行参数 - output ,其中包含输出逗号分隔值(CSV)文件的路径。该文件将包含来自我们视频流的每个检测到的和解码的条形码的时间戳和有效负载。如果未指定此参数,则CSV文件将放在当前工作目录中,名称为 “barcodes.csv” (第11-14行)。

从那里,让我们初始化我们的视频流并打开我们的CSV文件:

# initialize the video stream and allow the camera sensor to warm up
print("[INFO] starting video stream...")
# vs = VideoStream(src=0).start()
vs = VideoStream(usePiCamera=True).start()
time.sleep(2.0)# open the output CSV file for writing and initialize the set of
# barcodes found thus far
csv = open(args["output"], "w")
found = set()

在 第18行和第19行, 我们初始化并启动我们的 VideoStream 。你可以:

使用USB网络摄像头(取消注释 第18行和注释 第19行)
或者,如果您使用Raspberry Pi,您可以使用PiCamera(取消注释 第19行和注释 第18行)。
我选择使用我的Raspberry Pi PiCamera,如下一节所示。

然后我们暂停两秒钟,让相机可以预热(第20行)。

我们将在CSV文件中写入我们找到的所有条形码(但确保不会写入重复项)。这是记录条形码的一个示例。`
实际操作是任意的 - 我们只是使用CSV文件作为示例。

您可以随意更新代码以包含您可能希望的任何通知。

我们 在第24行打开 csv文件进行写入 。如果要修改要附加到文件的代码,只需将第二个参数从 “w” 更改为 “a” (但您必须以不同的方式搜索文件中的重复项)。

我们还 为 找到的 条形码初始化一 组。此集将包含唯一的条形码,同时防止重复。

让我们开始捕捉+处理帧:

# loop over the frames from the video stream
while True:# grab the frame from the threaded video stream and resize it to# have a maximum width of 400 pixelsframe = vs.read()frame = imutils.resize(frame, width=400)# find the barcodes in the frame and decode each of the barcodesbarcodes = pyzbar.decode(frame)

在 第28行,我们开始循环并继续抓取并调整 视频流中的帧大小 (第31和32行)。

从那里,我们称之为 pyzbar 。解码 以检测和解码帧中的任何QR +条形码 。

让我们继续循环检测到的 条形码 :

 # loop over the detected barcodesfor barcode in barcodes:# extract the bounding box location of the barcode and draw# the bounding box surrounding the barcode on the image(x, y, w, h) = barcode.rectcv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)# the barcode data is a bytes object so if we want to draw it# on our output image we need to convert it to a string firstbarcodeData = barcode.data.decode("utf-8")barcodeType = barcode.type# draw the barcode data and barcode type on the imagetext = "{} ({})".format(barcodeData, barcodeType)cv2.putText(frame, text, (x, y - 10),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)# if the barcode text is currently not in our CSV file, write# the timestamp + barcode to disk and update the setif barcodeData not in found:csv.write("{},{}\n".format(datetime.datetime.now(),barcodeData))csv.flush()found.add(barcodeData)

如果您阅读上一节,此循环应该看起来非常熟悉。

实际上, 线38-52 是相同的那些 单个图像脚本。有关此代码块的详细介绍,请参阅单图像条形码检测和扫描部分。

56-60行是新的。在这些行中,我们检查是否找到了唯一的(以前未找到的)条形码(第56行)。

如果是这种情况,我们会将时间戳和数据写入 csv 文件(第57-59行)。我们还将barcodeData附加 到 find 集合,作为处理重复项的简单方法。

在实时条形码扫描器脚本的其余行中,我们显示框架,检查是否按下了退出键,并执行清理:

# close the output CSV file do a bit of cleanup
print("[INFO] cleaning up...")
csv.close()
cv2.destroyAllWindows()
vs.stop()# show the output framecv2.imshow("Barcode Scanner", frame)key = cv2.waitKey(1) & 0xFF# if the `q` key was pressed, break from the loopif key == ord("q"):break

在 第63行,我们显示输出 帧 。

然后在 第64-68行,我们检查键,如果 按下“q”,我们就会 跳出 主执行循环。

最后,我们在第72-74行进行清理 。

$ python barcode_scanner_video.py
[INFO] starting video stream...

现在可以呈现条形码到相机,当你完成后,可以打开 条形码的.csv 文件(或者如果你愿意可以执行

tail -f barcodes.csv

在单独的终端查看的数据,因为它实时输入CSV文件

文章出处:https://www.pyimagesearch.com/2018/05/21/an-opencv-barcode-and-qr-code-scanner-with-zbar/

项目源代码下载连接:http://t.dripemail2.com/c/eyJhY2NvdW50X2lkIjoiNDc2ODQyOSIsImRlbGl2ZXJ5X2lkIjoiNDk0MzYzNDU0OSIsInVybCI6Imh0dHA6Ly9weWltZy5jby91czFmYT9fX3M9MXVnZ2ZucnpnNGFzamthZHpyYzMifQ

感谢 Adrian Rosebrock

pip 安装 opencv 教程 https://hotdog29.com/?p=550

绑定ZBar的OpenCV条形码和QR码扫描器相关推荐

  1. Android 系列 5.7使用Google ZXing条形码扫描器扫描条形码或QR码

    5.7使用Google ZXing条形码扫描器扫描条形码或QR码 问题 您希望应用程序能够扫描条形码或QR码("QR"原本代表"快速反应"). 解 使用Inte ...

  2. Android 系列 5 7使用Google ZXing条形码扫描器扫描条形码或QR码

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 5.7使 ...

  3. Opencv+Zbar二维码识别(标准条形码/二维码识别)

    使用Opencv+Zbar组合可以很容易的识别图片中的二维码,特别是标准的二维码,这里标准指的是二维码成像清晰,图片中二维码的空间占比在40%~100%之间,这样标准的图片,Zbar识别起来很容易,不 ...

  4. 使用大恒水星相机利用OpenCV+ Zbar 解QR码在ROS下定位的实现

    使用大恒水星相机利用OpenCV+ Zbar 解QR码在ROS下定位的实现 本次的程序功能实现是在师兄原有程序的基础上,经我继续开发的.主要完成的功能是使用QR码定位,将位姿信息通过ROS中的tf变换 ...

  5. 基于ZBar,OpenCV和Python的二维码识别

    0 前言 今天分享一个之前做过的二维码识别,参考:https://www.pyimagesearch.com/2018/05/21/an-opencv-barcode-and-qr-code-scan ...

  6. OpenCV在相机或图像中检测QR码的实例(附完整代码)

    OpenCV在相机或图像中检测QR码的实例 OpenCV在相机或图像中检测QR码的实例 OpenCV在相机或图像中检测QR码的实例 #include "opencv2/objdetect.h ...

  7. 基于OpenCV的二维码和条形码识别

    你好啊 今天我们来学习利用OpenCV识别二维码和条形码,首先我们需要准备一个二维码,我准备个两个 接下来我们需要下载几个包,numpy,opencv,和pyzbar(这个工具包可以识别二维码,条形码 ...

  8. OpenCV4.x图像处理实例-条形码和二维码(QR码)检测

    条形码和二维码(QR码)检测 文章目录 条形码和二维码(QR码)检测 1.实例介绍 2.静态图像检测解码 3.视频流检测解码 1.实例介绍 条形码和二维码在日常生活中广泛应用.本次实例将详细介绍如何从 ...

  9. 【C#】最全单据打印(打印模板、条形码二维码、字体样式、项目源码)

    系列文章 [C#]编号生成器(定义单号规则.固定字符.流水号.业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/12912978 ...

最新文章

  1. 细节:js 创建对象的几种模式举例
  2. sqlserver 类似oracle的rownum功能: row_number
  3. 里计算两个数的总和_2个公式,在Excel里面去掉最高分和最低分计算平均值
  4. 笔记:深入理解JVM 第3章 垃圾回收器与内存分配策略
  5. c#语言中读取txt文件,简单的c#文本文件读写-.NET教程,C#语言
  6. UVA - 820 Internet Bandwidth(最大流模板题)
  7. 零基础的同学看过来,如何系统学习前端,保证让你不亏
  8. 图像算法十:轮廓匹配match_contours() 得到精确的旋转角度
  9. 在html中做表格以及给表格设置高宽字体居中和表格线的粗细
  10. java .net 图形界面_Aspose.Words for .NET是一个无图形用户界面的.NET和JAVA Word文档的报告控件...
  11. java学习笔记day14—HTML
  12. 看看五年MacBook使用经验平常都用那些软件
  13. 极小化极大(Minimax)算法原理
  14. 不是技术牛人,如何拿到国内IT巨头的Offer(未整理版本)
  15. 使用springboot上传附件
  16. 2018(农历年)封山之作,和我一起嚼烂Git(两万字长文)
  17. mybatis+spring+springmvc ssm整合
  18. COGS 2211. [BZOJ3653]谈笑风生
  19. LED显示屏测试软件 v2.0
  20. laravel维护模式 MaintenanceMode

热门文章

  1. qq拼音纯净版下载QQPinyin_Setup_1.3.1265.400
  2. 【原创】怎样关联多个 Excel 档工作表(Sheet)中的数据
  3. 部署SDN控制器对接OVS网元实现转控分离实战 附ODL控制器
  4. HTML 通过GIF实现loading动画(非进度条版)。
  5. 深信服2020校招前端一面面经
  6. 一个完整的MSI包的配置文件XML的内容形式和查看方法ORCA
  7. 5G NR QoS 控制
  8. 虚拟机三种网络连接方式(桥接、NAT、仅主机、vlan)、Fusioncompute中的网络配置(OVS、DVS)
  9. 用Python实现四叉树(quad tree)
  10. C语言学习记录——辗转相除法