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

    文章

    371

    浏览量

    26084
  • OpenCV
    +关注

    关注

    29

    文章

    611

    浏览量

    40786
  • 扫描器
    +关注

    关注

    0

    文章

    130

    浏览量

    11755
  • RaspberryPi
    +关注

    关注

    1

    文章

    37

    浏览量

    8976
收藏 人收藏

    评论

    相关推荐

    [原创]Honeywell Xenon 1902gHD无线二维影像扫描器

      Honeywell Xenon 1902gHD无线二维影像扫描器广州万碧是美国霍尼韦尔Honeywell系列条码扫描器中国地区经销商,部分型号列表:Xenon 1900手持式
    发表于 06-02 23:24

    [原创]Honeywell Xenon 1900手持式二维影像扫描器

      Honeywell Xenon 1900手持式二维影像扫描器广州万碧是美国霍尼韦尔Honeywell系列条码扫描器中国地区经销商,部分型号列表:Xenon 1900手持式二维
    发表于 06-06 21:57

    分享二维码扫描软件

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

    二维码

    我现在正在做一个二维码的解读,有做过这个和正在做的吗?希望能起交流 qq:1459884266
    发表于 11-30 10:48

    二维码的算法?

    想用51做一个能将简单数字生成二维码图片在LED彩屏显示。问二维码的算法?51单片机能处理吗?请教高手了。
    发表于 03-30 20:14

    二维码识别

    `利用笔记本电脑的摄像头采集二维码图像并识别,显示二维码的信息!下载了labview视觉与运动模块的可以下来看看!里面有2张二维码,用二维码生成器做的(百度应用),用手机拍
    发表于 08-27 16:52

    扫描器识别二维码

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

    二维码读取

    本帖最后由 hbstr 于 2016-7-7 13:09 编辑 想编放在二维码扫描仪里面的小程序,如超市扫描,最终可以达到货物汇总
    发表于 07-07 13:08

    用stm32f103能否实现二维码扫描功能

    我是新人准备做一个项目需要扫描二维码,能否用f103系列实现二维码扫描功能,求大神指点迷津
    发表于 08-08 21:06

    请问ov7670摄像头能扫描二维码

    ov7670摄像头能扫描二维码
    发表于 04-17 06:35

    如何通过机智云接口生成设备对应的二维码

    摘要:机智云APP SDK中预留了扫描二维码绑定接口,APP可以通过扫描GPRS设备(WiFi设备也可)
    发表于 09-20 08:19

    二维码软件中制作Dot Code二维码的步骤

      在二维码软件中,点击软件左侧的“二维码”按钮,在画布上绘制二维码样式,双击二维码,在图形属性-条码选项卡中,设置条码类型为Dot Code。    在选项卡中,点击“修改”按钮,删
    发表于 12-02 15:45

    单片机显示二维码的原理及实现

    单片机显示二维码的原理及实现二维码是什么?二维码又称二维条码,常见的二维码为QR Code,
    发表于 02-23 06:38

    OpenHarmony应用实现二维码识别

    根据context获取CameraManager,然后获取支持的相机(摄像头)。如果没有支持的相机,则然后。 如有支持的相机,则默认使用相机列表中的第一个。实际应用中,对于二维码扫描,需要使用后置相机
    发表于 08-23 17:00

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

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