最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

日常生活中,我們通常會拿出智能手機掃描二維碼。但是當(dāng)我們在電腦上工作時,手機可能不是掃描網(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()在移動鼠標(biāo)的同時繪制所選區(qū)域的功能。
  • 釋放鼠標(biāo)后,調(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)在應(yīng)該可以識別了。將它們連接到插槽函數(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()

小部件的大小應(yīng)與屏幕分辨率相同,可從primaryScreen()函數(shù)中獲取。

接下來,我們處理鼠標(biāo)事件:

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

當(dāng)鼠標(biāo)移動時,我們畫一個矩形來表示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 庫。松開鼠標(biāo)后,我們根據(jù)矩形的坐標(biāo)對選中區(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()))

隱藏和顯示應(yīng)用程序窗口

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

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

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

相關(guān)文章

  • Python 的七個HTTP請求庫對比小結(jié)

    Python 的七個HTTP請求庫對比小結(jié)

    本文主要介紹了Python 的七個HTTP請求庫對比小結(jié),文中通過圖表,示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 基于Python實現(xiàn)GeoServer矢量文件批量發(fā)布

    基于Python實現(xiàn)GeoServer矢量文件批量發(fā)布

    由于矢量圖層文件較多,手動發(fā)布費時費力,python支持的關(guān)于geoserver包又由于年久失修,無法在較新的geoserver版本中正常使用。本文為大家準(zhǔn)備了Python自動化發(fā)布矢量文件的代碼,需要的可以參考一下
    2022-07-07
  • Python讀寫yaml文件

    Python讀寫yaml文件

    這篇文章主要介紹了Python讀寫yaml文件,yaml?是專門用來寫配置文件的語言,非常簡潔和強大,之前用ini也能寫配置文件,有點類似于json格式,下面關(guān)于Python讀寫yaml文件的詳細(xì)資料,需要的小伙伴可以參考一下
    2022-03-03
  • Python?實現(xiàn)循環(huán)最快方式(for、while?等速度對比)

    Python?實現(xiàn)循環(huán)最快方式(for、while?等速度對比)

    這篇文章主要介紹了Python?利用for、while?實現(xiàn)循環(huán)最快方式,文章主要對for、while?等速度對比詳細(xì)介紹,具有一定的參考價值?,需要的小伙伴可以參考一下
    2022-01-01
  • Python中的集合介紹

    Python中的集合介紹

    今天小編就為大家分享一篇關(guān)于Python中的集合介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Python中turtle庫的使用實例

    Python中turtle庫的使用實例

    這篇文章主要介紹了Python中turtle庫的使用實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 基于python對B站收藏夾按照視頻發(fā)布時間進行排序的問題

    基于python對B站收藏夾按照視頻發(fā)布時間進行排序的問題

    這篇文章主要介紹了基于python對B站收藏夾按照視頻發(fā)布時間進行排序,在實現(xiàn)過程中中間程序可能因為各種原因掛掉,因此在中間加入了儲存中間狀態(tài)的功能,否則每次掛掉都要重新爬速度非常慢,本文給大家介紹具體使用方法,一起看看吧
    2021-05-05
  • Python爬蟲框架Scrapy安裝使用步驟

    Python爬蟲框架Scrapy安裝使用步驟

    這篇文章主要介紹了Python爬蟲框架Scrapy的安裝和使用步驟,重點在解決依賴問題上,需要的朋友可以參考下
    2014-04-04
  • 詳解python中的index函數(shù)用法

    詳解python中的index函數(shù)用法

    這篇文章主要介紹了詳解python中的index函數(shù)用法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Python?Pandas輕松實現(xiàn)數(shù)據(jù)清理

    Python?Pandas輕松實現(xiàn)數(shù)據(jù)清理

    在當(dāng)今的數(shù)據(jù)驅(qū)動時代,數(shù)據(jù)清理是數(shù)據(jù)分析、機器學(xué)習(xí)項目中至關(guān)重要的一步,本文將帶大家輕松上手使用Python和Pandas進行數(shù)據(jù)清理,希望對大家有所幫助
    2024-12-12

最新評論

宁陵县| 汝州市| 察雅县| 丹凤县| 乌兰浩特市| 繁峙县| 泽州县| 灵丘县| 察隅县| 平度市| 鄂托克前旗| 民权县| 岚皋县| 诸暨市| 邹城市| 深州市| 阳城县| 家居| 营山县| 涞水县| 龙江县| 平乐县| 临邑县| 大石桥市| 福海县| 廉江市| 凯里市| 土默特右旗| 黔江区| 获嘉县| 威信县| 许昌市| 神农架林区| 应用必备| 天门市| 通城县| 吴忠市| 团风县| 遵义县| 贵德县| 吉林省|