• ubuntu20:pyqt5 截屏,图片识别文字


    前置条件

    ubuntu 20.04 安装pyqt5

    
    import sys
    sys.path.append("/home/wargame/.local/lib/python3.8/site-packages")
    
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    
    class WScreenShot(QWidget):
        def __init__(self, parent=None):
            super(WScreenShot, self).__init__(parent)
            self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
            self.setStyleSheet('''background-color:black; ''')
            self.setWindowOpacity(0.4)
            # 1 透明度的有效范围从1.0 完全不透明到0.0 完全透明
            # 2 默认情况下是不透明状态,属性值为1.0
    
            desktopRect = QDesktopWidget().screenGeometry()
            # 获取屏幕的信息
            # screenGeometry()函数提供有关可用屏幕几何的信息
            self.setGeometry(desktopRect)
            # setGeometry (9,9, 50, 25)
            # 从屏幕上(9,9)位置开始(即为最左上角的点),显示一个50*25的界面(宽50,高25)
            # setGeometry之后一定要调用show函数,否则可能看不到控件存在
            self.setCursor(Qt.ArrowCursor)  # 设置鼠标形状
    
            self.blackMask = QBitmap(desktopRect.size())
            self.blackMask.fill(Qt.black)
            self.mask = self.blackMask.copy()
    
    
            self.isDrawing = False
            self.startPoint = QPoint()
            self.endPoint = QPoint()
            self.setMouseTracking(False)
            self.startX, self.startY = 0, 0  # the point where you start
            self.endX, self.endY = 0, 0  # the point where you end
    
        def paintEvent(self, event):
            if self.isDrawing:
                self.mask = self.blackMask.copy()
                pp = QPainter(self.mask)
                pen = QPen()
                pen.setStyle(Qt.NoPen)
                pp.setPen(pen)
                brush = QBrush(Qt.white)
                pp.setBrush(brush)
                pp.drawRect(QRect(self.startPoint, self.endPoint))  # 画图
                self.setMask(QBitmap(self.mask))
    
        def mousePressEvent(self, event):
            if event.button() == Qt.LeftButton:
                self.startPoint = event.pos()
                self.startX, self.startY = event.x(), event.y()
                # print("mousepress: ", self.startPoint)
                self.endPoint = self.startPoint
                self.isDrawing = True
    
        def mouseMoveEvent(self, event):
            if self.isDrawing:
                self.endPoint = event.pos()
                self.endX, self.endY = event.x(), event.y()
                self.update()
    
        def mouseReleaseEvent(self, event):
            if event.button() == Qt.LeftButton:
                self.endPoint = event.pos()
                # print("mouse release: ", self.endPoint)
                # PySide2
                # screenshot = QPixmap.grabWindow(QApplication.desktop().winId())
                # PyQt5
                # screenshot = QApplication.primaryScreen().grabWindow(0)
                # 通用
                screenshot = QApplication.primaryScreen().grabWindow(QApplication.desktop().winId())
                # rect = QRect(self.startPoint, self.endPoint)
                rect = QRect(self.startX, self.startY + 28, self.endX-self.startX, self.endY-self.startY)
                # print("last rect:", rect)
                outputRegion = screenshot.copy(rect)
                outputRegion.save('111.jpg', format='JPG', quality=100)
                # print("ok")
                self.close()
    
    
    def screenshot():
        app = QApplication(sys.argv)
        win = WScreenShot()
        win.show()
        app.exec_()
    
    
    if __name__ == '__main__':
        screenshot()
    
    

    添加快捷键执行,执行完毕后会在家目录下生成一个固定名字的jpg图片

    对该图片进行识别

    tesseract-ocr 安装

    cnocr

    这个效果比较好

    from cnocr import CnOcr
    ocr = CnOcr()
    res = ocr.ocr('111.jpg')
    print("Predicted Chars:", res)
    
    

    预测后直接将预测结果复制到剪贴板,可以直接使用, 或者调用驱动浏览器搜索

    注意:
    pyqt5 代码来源于网络,获取鼠标的位置不准确,手动调整了参数,需要熟悉qt5 后更新, 完善后可以生成可执行文件后使用

  • 相关阅读:
    如何简单使用tensorboard展示(二)
    如何简单使用tensorboard展示(一)
    Cypress 系列之----03 常用API
    Cypress 系列之----02 自定义命令Custom Commands
    Windows下启动Jmeter出现Not able to find Java executable or version问题解决方案
    linux命令行下文件名中包含特殊符号如何的处理方法
    jenkins高级篇 pipeline系列之-—01简介
    Jenkins部署报错问题解决----git低版本引发的问题
    存储过程--使用变量循环调用
    jenkins高级篇 pipeline 系列之-—06 实现自动打增量包
  • 原文地址:https://www.cnblogs.com/g2thend/p/14333468.html
Copyright © 2020-2023  润新知