0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

构建一个基于Raspberry Pi的二维码扫描器

科技观察员 来源:circuitdigest 作者:Ashish Choudhary 2022-08-12 17:13 次阅读

QR码(快速响应码)是一种矩阵条形码,其中包含有关它所附加的项目的信息,如位置数据、标识符或识别网站或应用程序的跟踪器等。它是一种机器可读的光学二维图像形式的标签,具有不同的图案。在本教程中,我们将使用OpenCV和ZBar库构建一个基于RaspberryPi的二维码扫描器。

要求

树莓派 3(任何版本)

Pi 相机模块

在继续这个Raspberry Pi 3 二维码扫描器之前,我们首先需要在这个项目中安装 OpenCV、条码解码库 ZBar、imutils 和一些其他依赖项。OpenCV 在这里用于数字图像处理。数字图像处理最常见的应用是 物体检测、 人脸识别和人数统计。

在树莓派中安装 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 install libqt4-test –y

之后,使用以下命令在 Raspberry Pi 中安装 OpenCV。

pip3 安装 opencv-contrib-python==4.1.0.25

安装其他必需的软件包

安装ZBar

Zbar 是检测和解码不同类型条码和二维码的最佳库。使用以下命令安装库:

pip3 安装 pyzbar

安装imutils

imutils 用于使基本的图像处理功能,如平移、旋转、调整大小、骨架化和使用 OpenCV 更轻松地显示 Matplotlib 图像。使用以下命令安装 imutils:

pip3 安装 imutils

安装argparse

使用以下命令安装 argparse 库。argparse负责解析命令行参数

pip3 安装 argparse

树莓派二维码阅读器硬件设置

在这里,我们只需要 Raspberry Pi 和 Pi 相机,用于使用 Raspberry Pi 相机的 QR 码扫描仪,您只需将相机色带连接器连接到 Raspberry pi 中提供的相机插槽中

pYYBAGL2GOqAVDu5AAWrQfsQTB8482.png

Pi 摄像头可用于构建各种有趣的项目,如Raspberry Pi 监控摄像头、访客监控系统、家庭安全系统等。

Raspberry Pi 二维码阅读器的 Python 代码

Raspberry Pi QR 阅读器的完整代码在页面末尾给出。在我们对 Raspberry Pi 进行编程之前,让我们了解一下代码。

因此,像往常一样,通过导入所有必需的包来启动代码。

从 imutils.video 导入 VideoStream
从 pyzbar 导入 pyzbar
导入参数解析
导入日期时间
导入 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()
时间.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)

pYYBAGL2GOSAFOEJAAF2NKdoji8193.png

然后使用解码(“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)

poYBAGL2GOCAMgdyAAGWhEtumWk295.png

现在显示带有条形码数据和条形码类型的输出。

cv2.imshow(“条码阅读器”, frame)

poYBAGL2GN2AZlmCAAMcpHHaSDA085.png

现在在最后一步,检查是否按下了键‘s’,然后中断主循环并开始清理过程。

键 = cv2.waitKey(1) & 0xFF

# 如果 `s` 键被按下,退出循环

如果键 == ord(“s”):

休息

print(“[INFO] 清理。..”)

csv.close()

cv2.destroyAllWindows()

与停止()

测试 Raspberry Pi 二维码扫描器

设置完成后,启动 QR 码阅读器程序。您将看到一个窗口,显示来自您的摄像头的实时视图,现在您可以在 PI 摄像头前显示条形码。当 pi 解码条码时,它会在其周围绘制一个带有条码数据和条码类型的红色框,如下图所示:

pYYBAGL2GNiASyNRAALxnlm3I-s860.png

这就是您只需使用 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()
与停止()

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二维码
    +关注

    关注

    7

    文章

    406

    浏览量

    26365
  • OpenCV
    +关注

    关注

    29

    文章

    624

    浏览量

    41206
  • 扫描器
    +关注

    关注

    0

    文章

    153

    浏览量

    11879
  • RaspberryPi
    +关注

    关注

    1

    文章

    38

    浏览量

    9058
收藏 人收藏

    评论

    相关推荐

    分享二维码扫描软件

    卓、机锋、豌豆荚、91助手搜索“芝麻客”下载这个具备综合应用功能二维码扫描软件。 在安装完芝麻客1.01之后,以我的小米手机截图做演 步骤:安装,启动 步骤
    发表于 11-13 14:36

    扫描器识别二维码

    扫描器识别二维码
    发表于 02-23 20:55

    采用LV4500i二维码扫描器的应用集成解决方案

    在自助缴费终端日益普及的今天,结合嵌入式二维码扫描模组等专用条码识读设备硬件产品构建传统商户的O2O闭环,为线下各类移动支付应用服务提供条码支付、二维码
    的头像 发表于 10-28 18:53 1707次阅读

    读取二维码扫描设备有哪些类型

    读取二维码扫描设备的几种类型中比较简单、常用的便是收银用条码扫描枪,因此它也被称为二维码设备/二维码读取设备/
    发表于 07-06 10:09 4023次阅读

    简易的二维码扫描器视图

    修改 ZXING 条码扫描器项目,方便 ohos 二维码检测和 AR 目的。这个项目实现了 ohos 组件,它显示相机并在预览中有二维码
    发表于 04-06 11:18 2次下载

    二维码扫描器,多样化场景应用

    随着互联网技术的发展,二维码扫描器早已不是新话题。二维码核心技术的创新应用,让身边的终端设备变得日趋智能,因为其核心技术——
    的头像 发表于 08-12 17:28 1032次阅读
    <b class='flag-5'>二维码</b><b class='flag-5'>扫描器</b>,多样化场景应用

    二维码扫描器是干嘛用的?嵌入式二维码扫描器作用有哪些?

    嵌入式二维码扫描器种用于扫描和解码二维码的设备,它可以像普通扫描
    的头像 发表于 03-07 17:01 1284次阅读
    <b class='flag-5'>二维码</b><b class='flag-5'>扫描器</b>是干嘛用的?嵌入式<b class='flag-5'>二维码</b><b class='flag-5'>扫描器</b>作用有哪些?

    如何选购到性价比更高的二维码识别扫描器

    当今社会,越来越多的行业领域里都需要使用到二维码识别扫描器,比如应用在门禁安防领域的嵌入式二维码识读器用于读取手机中的门禁二维码或智慧门禁通行
    的头像 发表于 07-04 15:27 851次阅读
    如何选购到性价比更高的<b class='flag-5'>二维码</b>识别<b class='flag-5'>扫描器</b>?

    二维码扫描模块多少钱台?二维扫描模组价格?

    二维码扫描模块作为种常见的嵌入式扫设备,主要用于扫描和解码各种二维码、屏幕
    的头像 发表于 07-13 16:05 1106次阅读
    <b class='flag-5'>二维码</b><b class='flag-5'>扫描</b>模块多少钱<b class='flag-5'>一</b>台?<b class='flag-5'>二维</b><b class='flag-5'>扫描</b>模组价格?

    工业二维码扫描器在电子业生产追溯管理中的应用

    工业二维码扫描器在电子业生产追溯管理中的作用越来越重要。随着电子制造业的快速发展和需求的增长,追溯管理成为了电子产品制造企业不可或缺的环。而工业二维码
    的头像 发表于 08-01 16:13 754次阅读
    工业<b class='flag-5'>二维码</b><b class='flag-5'>扫描器</b>在电子业生产追溯管理中的应用

    二维码扫描器模块 嵌入式扫模块价格

    二维码扫描器模块就是具有二维码解码功能的嵌入式扫模块,它的作用是以命令触发或感应触发的方式快速扫描
    的头像 发表于 10-23 14:37 2782次阅读
    <b class='flag-5'>二维码</b><b class='flag-5'>扫描器</b>模块 嵌入式扫<b class='flag-5'>码</b>模块价格

    读头有哪些?嵌入自助设备专用的二维码扫描器你知道吗?

    深圳远景达(RAKINDA)科技就来给大家科普下,目前市面上适合嵌入集成到自助设备中的扫读头有哪些。扫读头有哪些?嵌入自助设备专用的二维码扫描
    的头像 发表于 01-08 14:42 443次阅读
    扫<b class='flag-5'>码</b>读头有哪些?嵌入自助设备专用的<b class='flag-5'>二维码</b><b class='flag-5'>扫描器</b>你知道吗?

    远距离二维码扫描器如何选择?看看以下三款远距离二维码模块

    。此情此景下,远距离二维码扫描器的出现让远距离扫变得更容易,因为它内置专门的扫器件负责读取解码、高精度识别,扫快得飞起。作为条码识别行
    的头像 发表于 03-21 15:41 633次阅读
    远距离<b class='flag-5'>二维码</b><b class='flag-5'>扫描器</b>如何选择?看看以下三款远距离<b class='flag-5'>二维码</b>扫<b class='flag-5'>码</b>模块

    扫描距离在1米左右的远距离扫描器,扫纸质的一二维码

    与操作不便的挑战。此时,款如EM22这样的远距离二维码扫描器便显得尤为重要,它以其自主研发的第六代UIMG核心解码技术,重新定义了二维码扫描
    的头像 发表于 09-09 13:59 220次阅读
    <b class='flag-5'>扫描</b>距离在1米左右的远距离<b class='flag-5'>扫描器</b>,扫纸质的一<b class='flag-5'>二维码</b>

    有没有可以二维码和nfc合扫描器模块?用于出入闸机

    存在着类将二维码扫描与NFC功能合二为一扫描器模块,它们不仅满足了多样化的识别需求,还极大地提升了用户体验和管理效率。这类
    的头像 发表于 09-24 15:05 143次阅读
    有没有可以<b class='flag-5'>二维码</b>和nfc合<b class='flag-5'>一</b>的<b class='flag-5'>扫描器</b>模块?用于出入闸机