五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動(dòng)態(tài)

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

發(fā)布日期:2021-12-25 21:40 | 文章來(lái)源:源碼之家

日常生活中,我們通常會(huì)拿出智能手機(jī)掃描二維碼。但是當(dāng)我們?cè)陔娔X上工作時(shí),手機(jī)可能不是掃描網(wǎng)頁(yè)上出現(xiàn)的二維碼的最佳選擇。

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

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

安裝

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

python3 -m pip install pillow opencv-python dbr pyside2

條碼 SDK

需要解鎖Dynamsoft Barcode SDK 的功能,您可以申請(qǐng)30 天免費(fèi)試用許可。

從屏幕掃描二維碼

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

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

添加用于剪切事件的按鈕

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

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

pyside2-uic design.ui -o design.py

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

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

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

創(chuàng)建一個(gè)SnippingTool.py文件,我們?cè)谄渲袆?chuàng)建一個(gè)自定義 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ù)中獲取。

接下來(lái),我們處理鼠標(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)移動(dòng)時(shí),我們畫(huà)一個(gè)矩形來(lái)表示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 庫(kù)。松開(kāi)鼠標(biāo)后,我們根據(jù)矩形的坐標(biāo)對(duì)選中區(qū)域進(jìn)行截圖。

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ǎn)擊事件中調(diào)用它。注意:為避免遮擋屏幕,應(yīng)用程序窗口應(yīng)在啟動(dò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() 

測(cè)試屏幕二維碼閱讀器

運(yùn)行條碼識(shí)別程序:

python3 app_advanced.py

在百度搜索二維碼。

點(diǎn)擊Select Area按鈕掃描搜索引擎返回的二維碼(一個(gè)或多個(gè))。

您還可以一鍵進(jìn)行全屏條碼識(shí)別。您還可以一鍵進(jìn)行全屏條碼識(shí)別。

總結(jié)

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

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶(hù)服務(wù)

7x24全年不間斷在線

專(zhuān)屬顧問(wèn)服務(wù)

1對(duì)1客戶(hù)咨詢(xún)顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部