如何用Python从桌面读取二维码信息详解

 更新时间:2021年10月13日 11:00:50   作者:初遇我ㄖ寸の热情呢?  
二维码作为一种信息传递的工具,在当今社会发挥了重要作用,下面这篇文章主要给大家介绍了关于如何用Python从桌面读取二维码信息的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

前言

日常生活中,我们通常会拿出智能手机扫描二维码。但是当我们在电脑上工作时,手机可能不是扫描网页上出现的二维码的最佳选择。

  • 原因一:从显示器屏幕上拍摄的照片具有干扰 QR 码识别的莫尔图案。
  • 原因二:你可能希望直接在 PC 上使用解码后的信息,例如用于打开网站的 URL。

本文将使用 Python 实现一个简单的工具,以方便在桌面屏幕上识别二维码。

安装

所需的 Python 包包括PIL、OpenCV、Dynamsoft Barcode Reader和Qt。

python3 -m pip install pillow opencv-python dbr pyside2

条码 SDK

需要解锁Dynamsoft Barcode SDK 的功能,您可以申请30 天免费试用许可。

从屏幕扫描二维码

由于我已经使用 Qt for Python、OpenCV 和 Dynamsoft Barcode Reader实现了一个GUI 条形码阅读器,剩下的就是添加屏幕截图功能。实现截图功能的步骤:

  • 创建一个自定义 Qt 小部件并将其放在屏幕顶部。
  • paintEvent()在移动鼠标的同时绘制所选区域的功能。
  • 释放鼠标后,调用PIL.ImageGrab.grab()以获取所选区域的图像。

添加用于剪切事件的按钮

我们design.ui在 Qt Creator 中打开文件并添加两个按钮来触发截图事件。

保存文件并重新编译design.ui为design.py:

pyside2-uic design.ui -o design.py

在 中app_advanced.py,两个新按钮现在应该可以识别了。将它们连接到插槽函数:

self.ui.pushButton_area.clicked.connect(self.snipArea)
self.ui.pushButton_full.clicked.connect(self.snipFull)

创建自定义 Qt 小部件

创建一个SnippingTool.py文件,我们在其中创建一个自定义 Qt 小部件:

import numpy as np
import cv2
from PIL import ImageGrab
from PySide2 import QtWidgets, QtCore, QtGui
from PySide2.QtCore import Qt

class SnippingWidget(QtWidgets.QWidget):
    is_snipping = False

    def __init__(self, parent=None, app=None):
        super(SnippingWidget, self).__init__()
        self.parent = parent
        self.setWindowFlags(Qt.WindowStaysOnTopHint)

        self.screen = app.primaryScreen()
        self.setGeometry(0, 0, self.screen.size().width(), self.screen.size().height())
        self.begin = QtCore.QPoint()
        self.end = QtCore.QPoint()
        self.onSnippingCompleted = None

    def start(self):
        SnippingWidget.is_snipping = True
        self.setWindowOpacity(0.3)
        QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
        self.show()

小部件的大小应与屏幕分辨率相同,可从primaryScreen()函数中获取。

接下来,我们处理鼠标事件:

def mousePressEvent(self, event):
    self.begin = event.pos()
    self.end = self.begin
    self.update()

def mouseMoveEvent(self, event):
    self.end = event.pos()
    self.update()

def mouseReleaseEvent(self, event):
    SnippingWidget.is_snipping = False
    QtWidgets.QApplication.restoreOverrideCursor()
    x1 = min(self.begin.x(), self.end.x())
    y1 = min(self.begin.y(), self.end.y())
    x2 = max(self.begin.x(), self.end.x())
    y2 = max(self.begin.y(), self.end.y())

    self.repaint()
    QtWidgets.QApplication.processEvents()
    self.close()

当鼠标移动时,我们画一个矩形来表示paintEvent()函数中的选定区域:

def paintEvent(self, event):
    if SnippingWidget.is_snipping:
        brush_color = (128, 128, 255, 100)
        lw = 3
        opacity = 0.3
    else:
        self.begin = QtCore.QPoint()
        self.end = QtCore.QPoint()
        brush_color = (0, 0, 0, 0)
        lw = 0
        opacity = 0

    self.setWindowOpacity(opacity)
    qp = QtGui.QPainter(self)
    qp.setPen(QtGui.QPen(QtGui.QColor('black'), lw))
    qp.setBrush(QtGui.QColor(*brush_color))
    rect = QtCore.QRectF(self.begin, self.end)
    qp.drawRect(rect)

拍摄屏幕图像

PIL 是用于从屏幕捕获图像的 Python 库。松开鼠标后,我们根据矩形的坐标对选中区域进行截图。

img = ImageGrab.grab(bbox=(x1, y1, x2, y2))

try:
    img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
except:
    img = None

拍摄全屏图像很容易:

img = ImageGrab.grab(bbox=(0, 0, self.screen.size().width(), self.screen.size().height()))

隐藏和显示应用程序窗口

一旦截图小部件准备好,我们就可以在按钮点击事件中调用它。注意:为避免遮挡屏幕,应用程序窗口应在启动截图小部件前最小化,并在截图完成后恢复:

def onSnippingCompleted(self, frame):
    self.setWindowState(Qt.WindowMaximized)
    if frame is None:
        return 

    frame, self._results = self._barcodeManager.decode_frame(frame)
    self.showResults(frame, self._results)

def snipArea(self):
    self.setWindowState(Qt.WindowMinimized)
    self.snippingWidget.start()    

def snipFull(self):
    self.setWindowState(Qt.WindowMinimized)
    self.snippingWidget.fullscreen() 

测试屏幕二维码阅读器

运行条码识别程序:

python3 app_advanced.py

在百度搜索二维码。

点击Select Area按钮扫描搜索引擎返回的二维码(一个或多个)。

您还可以一键进行全屏条码识别。您还可以一键进行全屏条码识别。

总结

到此这篇关于如何用Python从桌面读取二维码信息的文章就介绍到这了,更多相关Python读取二维码信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python处理csv数据的方法

    python处理csv数据的方法

    这篇文章主要介绍了python处理csv数据的方法,实例分析了Python处理csv数据的技巧,需要的朋友可以参考下
    2015-03-03
  • pymysql模块使用简介与示例

    pymysql模块使用简介与示例

    这篇文章主要介绍了pymysql模块使用的相关资料,帮助大家更好的利用python操作MySQL数据库,感兴趣的朋友可以了解下
    2020-11-11
  • Python图像处理之图片文字识别功能(OCR)

    Python图像处理之图片文字识别功能(OCR)

    Tesseract 是一个OCR 库,目前由Google 赞助(Google 也是一家以OCR 和机器学习技术闻名于世的公司)。这篇文章主要介绍了Python图像处理之图片文字识别功能 OCR的相关知识,需要的朋友可以参考下
    2019-07-07
  • python 使用plt画图,去除图片四周的白边方法

    python 使用plt画图,去除图片四周的白边方法

    今天小编就为大家分享一篇python 使用plt画图,去除图片四周的白边方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 检测tensorflow是否使用gpu进行计算的方式

    检测tensorflow是否使用gpu进行计算的方式

    今天小编就为大家分享一篇检测tensorflow是否使用gpu进行计算的方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python实现在遍历列表时,直接对dict元素增加字段的方法

    python实现在遍历列表时,直接对dict元素增加字段的方法

    今天小编就为大家分享一篇python实现在遍历列表时,直接对dict元素增加字段的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python 多种日期时间处理函数实例详解

    python 多种日期时间处理函数实例详解

    Python提供了丰富的日期和时间处理函数,可以帮助你轻松地解析、格式化、计算和操作日期和时间,在实际应用中,根据具体需求选择合适的函数,可以提高工作效率并简化代码,本文给大家介绍python多种日期时间处理函数介绍,感兴趣的朋友一起看看吧
    2024-03-03
  • PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解

    PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解

    这篇文章主要介绍了PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 浅谈Python编程中3个常用的数据结构和算法

    浅谈Python编程中3个常用的数据结构和算法

    这篇文章主要介绍了浅谈Python编程中3个常用的数据结构和算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • python实现对excel表中的某列数据进行排序的代码示例

    python实现对excel表中的某列数据进行排序的代码示例

    这篇文章主要给大家介绍了如何使用python实现对excel表中的某列数据进行排序,文中有相关的代码示例供大家参考,具有一定的参考价值,需要的朋友可以参考下
    2023-11-11

最新评论