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

目录
  • 前言
  • 安装
  • 条码 SDK
  • 从屏幕扫描二维码
  • 添加用于剪切事件的按钮
  • 创建自定义 Qt 小部件
  • 拍摄屏幕图像
  • 隐藏和显示应用程序窗口
  • 测试屏幕二维码阅读器
  • 总结

前言

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

  • 原因一:从显示器屏幕上拍摄的照片具有干扰 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读取二维码信息内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python二维码操作:对QRCode和MyQR入门详解

    python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个二维码了. QRCode 生成这个二维码只用一行 import qrcode qrcode.make("不睡觉干嘛呢").get_image().show() #设置URL必须添加http:// 安装导入QRCode pip install qrcode #方法多,体量小 安装导入MyQR

  • 通过python扫描二维码/条形码并打印数据

    需提前安装好pyzbar和opencv-python库(博主的电脑安装opencv-python库比较麻烦,但大部分都不会出现该问题) 安装方法:打开命令框输入 pip install pyzbar/opencv- python 接下来介绍代码 #首先导入本次所需要的库,最后一个csv是Python自带的csv表格操作库,这里我们需要把我们扫到的二维码信息都存入csv表格里. import cv2 from pyzbar import pyzbar import csv #然后我们设置一个变量,

  • python实现二维码扫码自动登录淘宝

    一个小项目自动登录淘宝联盟抓取数据,由于之前在Github上看过类似用Python写的代码因此选择用Python来写,第一次用Python正式写程序还是被其"简单"所震撼,当然用的时候还是对其(2.7版)编码.迁移环境等问题所困扰,还好后来都解决了. 言归正传,抓取淘宝联盟的数据首先要解决的就是登录的问题,之前一般会碰到验证码的困扰,现在支持二维码扫码登录反而简单了,以下是登录的Python代码,主要是获取二维码打印,然后不断的检查扫码状态,如果过期了重新请求二维码(主要看逻辑,由于有

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

    目录 前言 安装 条码 SDK 从屏幕扫描二维码 添加用于剪切事件的按钮 创建自定义 Qt 小部件 拍摄屏幕图像 隐藏和显示应用程序窗口 测试屏幕二维码阅读器 总结 前言 日常生活中,我们通常会拿出智能手机扫描二维码.但是当我们在电脑上工作时,手机可能不是扫描网页上出现的二维码的最佳选择. 原因一:从显示器屏幕上拍摄的照片具有干扰 QR 码识别的莫尔图案. 原因二:你可能希望直接在 PC 上使用解码后的信息,例如用于打开网站的 URL. 本文将使用 Python 实现一个简单的工具,以方便在桌面

  • Python django框架输入汉字,数字,字符生成二维码实现详解

    这篇文章主要介绍了Python django框架输入汉字,数字,字符转成二维码实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 模块必备:Python环境 + pillow + qrcode 模块 核心代码<br>import qrcode qr = qrcode.QRCode( version=2, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=20, bord

  • 对python产生随机的二维数组实例详解

    最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列表解析的方法得到随机的二维数组. 具体如下: a = [[random.randint(1, 4) for j in range(1, 3)] for i in range(1, 11)] print(array(a)) 其中random.randint(1, 4)用来产生一个随机整数.此时创建了一个10行2列的数组. [[1 3] [1

  • 微信小程序 获取二维码实例详解

     微信小程序 获取二维码实例详解 理论: 接口A: 适用于需要的码数量较少的业务场景 接口地址:(永久有效,数量有限,进入path对应的页面) https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN path String 不能为空,最大长度 128 字节 width Int 430(默认) 二维码的宽度 auto_color .. line_color .. 接口B:适用于需要的码数量极多,或仅临时使用的业务场景(永

  • Python使用QRCode模块生成二维码实例详解

    Python使用QRCode模块生成二维码 QRCode官网 https://pypi.python.org/pypi/qrcode/5.1 简介 python-qrcode是个用来生成二维码图片的第三方模块,依赖于 PIL 模块和 qrcode 库. 简单用法 import qrcode img = qrcode.make('hello, qrcode') img.save('test.png') 高级用法 import qrcode qr = qrcode.QRCode( version=1

  • 使用python调用zxing库生成二维码图片详解

    (1)安装Jpype 用Python调用jar包需要安装jpype扩展,在Ubuntu上可以直接使用apt-get安装jpype扩展 $ sudo apt-get install python-jpype (2) 得到zxing  jar包 使用zxing第三方库生成二维码图片,关于zxing的介绍可以看其github地址:https://github.com/zxing/zxing/. 我们可以下载源码编译安装包,也可以直接在网上下载jar包,我的jar包是直接下载的,如下: $ wget h

  • Python使用qrcode二维码库生成二维码方法详解

    安装qrcode库 pip install qrcode 声明 import qrcode 使用qrcode QRCode 方法 qrcode.QRCode( version=1, error_correction=qrcode.ERROR_CORRECT_L, box_size=10, border=4, image_factory=None, mask_pattern=None ) 参数解释: version:控制二维码的大小,取值范围从1到40.取最小值1时,二维码大小为21*21.取值为

  • 基于Python生成个性二维码过程详解

    一.问题描述 通过调用MyQR模块来实现生成个人所需二维码. 安装: pip install myqr 二.代码实现 1.普通二维码 from MyQR import myqr # 普通二维码 myqr.run( words='http://www.cnblogs.com/mayi0312', save_name='qrcode.png' ) 效果图: 2.带图片的艺术二维码 光是二维码,太单调了点.我们可以加上我们想要的图片,使二维码更具辨识度! 准备的Logo图片: 当然,也可以选择其他个人

  • IOS 创建彩色二维码实例详解

    IOS 创建彩色二维码 因为系统创建的二维码默认都是黑色的,所以突然想改变一下二维码颜色,具体操作有点复杂,而且其中用到了好多C语言的语法,Swift不好写,所以默认用了OC.只贴了.m文件的代码,.h文件就是几个类函数的声明. #import "UIImage+CreateQRCode.h" @implementation UIImage (CreateQRCode) + (UIImage *)createQRCode:(NSString *)string andSize:(CGSi

  • IOS Swift 开发QRCore(二维码)实例详解

    1.搭个界面 2.写代码 // // ViewController.swift // GeneratorQRCode // // Created by targetcloud on 2016/12/3. // Copyright © 2016年 targetcloud. All rights reserved. // import UIKit class ViewController: UIViewController { @IBOutlet weak var qrImg: UIImageVie

随机推荐