欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何用Python從桌面讀取二維碼信息詳解

 更新時間:2021年10月13日 11:00:50   作者:初遇我ㄖ寸の熱情呢?  
二維碼作為一種信息傳遞的工具,在當今社會發(fā)揮了重要作用,下面這篇文章主要給大家介紹了關于如何用Python從桌面讀取二維碼信息的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

前言

日常生活中,我們通常會拿出智能手機掃描二維碼。但是當我們在電腦上工作時,手機可能不是掃描網(wǎng)頁上出現(xiàn)的二維碼的最佳選擇。

  • 原因一:從顯示器屏幕上拍攝的照片具有干擾 QR 碼識別的莫爾圖案。
  • 原因二:你可能希望直接在 PC 上使用解碼后的信息,例如用于打開網(wǎng)站的 URL。

本文將使用 Python 實現(xiàn)一個簡單的工具,以方便在桌面屏幕上識別二維碼。

安裝

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

python3 -m pip install pillow opencv-python dbr pyside2

條碼 SDK

需要解鎖Dynamsoft Barcode SDK 的功能,您可以申請30 天免費試用許可。

從屏幕掃描二維碼

由于我已經(jīng)使用 Qt for Python、OpenCV 和 Dynamsoft Barcode Reader實現(xiàn)了一個GUI 條形碼閱讀器,剩下的就是添加屏幕截圖功能。實現(xiàn)截圖功能的步驟:

  • 創(chuàng)建一個自定義 Qt 小部件并將其放在屏幕頂部。
  • paintEvent()在移動鼠標的同時繪制所選區(qū)域的功能。
  • 釋放鼠標后,調(diào)用PIL.ImageGrab.grab()以獲取所選區(qū)域的圖像。

添加用于剪切事件的按鈕

我們design.ui在 Qt Creator 中打開文件并添加兩個按鈕來觸發(fā)截圖事件。

保存文件并重新編譯design.ui為design.py:

pyside2-uic design.ui -o design.py

在 中app_advanced.py,兩個新按鈕現(xiàn)在應該可以識別了。將它們連接到插槽函數(shù):

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

創(chuàng)建自定義 Qt 小部件

創(chuàng)建一個SnippingTool.py文件,我們在其中創(chuàng)建一個自定義 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()函數(shù)中獲取。

接下來,我們處理鼠標事件:

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()函數(shù)中的選定區(qū)域:

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 庫。松開鼠標后,我們根據(jù)矩形的坐標對選中區(qū)域進行截圖。

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()))

隱藏和顯示應用程序窗口

一旦截圖小部件準備好,我們就可以在按鈕點擊事件中調(diào)用它。注意:為避免遮擋屏幕,應用程序窗口應在啟動截圖小部件前最小化,并在截圖完成后恢復:

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按鈕掃描搜索引擎返回的二維碼(一個或多個)。

您還可以一鍵進行全屏條碼識別。您還可以一鍵進行全屏條碼識別。

總結(jié)

到此這篇關于如何用Python從桌面讀取二維碼信息的文章就介紹到這了,更多相關Python讀取二維碼信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 對python For 循環(huán)的三種遍歷方式解析

    對python For 循環(huán)的三種遍歷方式解析

    今天小編就為大家分享一篇對python For 循環(huán)的三種遍歷方式解析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • matplotlib如何設置坐標軸刻度的個數(shù)及標簽的方法總結(jié)

    matplotlib如何設置坐標軸刻度的個數(shù)及標簽的方法總結(jié)

    這里介紹兩種設置坐標軸刻度的方法,一種是利用pyplot提交的api去進行設置,另一種是通過調(diào)用面向?qū)ο蟮腶pi, 即通過matplotlib.axes.Axes去設置,需要的朋友可以參考下
    2021-06-06
  • python實現(xiàn)三次密碼驗證的示例

    python實現(xiàn)三次密碼驗證的示例

    這篇文章主要介紹了python實現(xiàn)三次密碼驗證的示例,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python aiohttp百萬并發(fā)極限測試實例分析

    Python aiohttp百萬并發(fā)極限測試實例分析

    這篇文章主要介紹了Python aiohttp百萬并發(fā)極限測試,結(jié)合實例形式分析了Python異步編程基于aiohttp客戶端高并發(fā)請求的相關操作技巧與使用注意事項,需要的朋友可以參考下
    2019-10-10
  • SpringBoot中的@MessageMapping注解詳解

    SpringBoot中的@MessageMapping注解詳解

    這篇文章主要介紹了SpringBoot中的@MessageMapping注解詳解,Spring Boot 提供了對 WebSocket 的支持,其中 @MessageMapping 注解是一個常用的注解,它可以將一個 Java 方法標記為 WebSocket 的消息處理器,需要的朋友可以參考下
    2023-08-08
  • pandas中DataFrame重置索引的幾種方法

    pandas中DataFrame重置索引的幾種方法

    在pandas中,經(jīng)常對數(shù)據(jù)進行處理 而導致數(shù)據(jù)索引順序混亂,從而影響數(shù)據(jù)讀取、插入等,所以小編總結(jié)了幾種索引重置的方法,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Python基礎之條件控制操作示例【if語句】

    Python基礎之條件控制操作示例【if語句】

    這篇文章主要介紹了Python基礎之條件控制操作,結(jié)合實例形式分析了Python使用if語句進行條件控制的相關操作技巧與相關注意事項,需要的朋友可以參考下
    2019-03-03
  • 基于Python在MacOS上安裝robotframework-ride

    基于Python在MacOS上安裝robotframework-ride

    今天小編就為大家分享一篇關于基于Python在MacOS上安裝robotframework-ride,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • anaconda安裝pytorch1.7.1和torchvision0.8.2的方法(親測可用)

    anaconda安裝pytorch1.7.1和torchvision0.8.2的方法(親測可用)

    這篇文章主要介紹了anaconda安裝pytorch1.7.1和torchvision0.8.2的方法(親測可用),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Python繪制KS曲線的實現(xiàn)方法

    Python繪制KS曲線的實現(xiàn)方法

    本篇文章主要介紹了Python繪制KS曲線的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論