看网页的时候出现二维码怎么快速识别?一般人可能会掏出手机。手机识别有两个问题:1,对着屏幕,会有摩尔纹的干扰。2,识别结果不能在电脑上立刻使用。如果做个截屏小工具来识别,会方便很多。
安装Python依赖包
pip install pillow opencv-python dbr pyside2
屏幕截图识别二维码的步骤
- 用Qt搭建UI
- 创建一个自定义的全屏Qt widget
- 监听鼠标事件,获得区域
- 用PIL里的接口根据坐标抓图
- 调用Dynamsoft Barcode Reader的接口识别二维码
代码实现
打开UI编辑器(路径:Python37\Lib\site-packages\PySide2\designer.exe)创建界面。
- 两个按钮分别用于区域截图和全屏截图
- 中间区域是用于显示图片的
QLabel
把UI编译成python文件:
pyside2-uic design.ui -o design.py
把UI导入到python工程中:
from design import Ui_MainWindow
class MainWindow(QMainWindow):
def __init__(self, license):
super(MainWindow, self).__init__()
self.setWindowState(Qt.WindowMaximized)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setAcceptDrops(True)
新建SnippingTool.py
文件。在里面创建一个自定义的Qt Widget:
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(