基于PyQt5實(shí)現(xiàn)圖轉(zhuǎn)文功能(示例代碼)
PyQt是Qt框架的Python語言實(shí)現(xiàn),是最強(qiáng)大的GUI庫之一。PyQt提供了一個設(shè)計(jì)良好的窗口控件集合,具有更方便的操作性。學(xué)過VB的同學(xué)會知道,相比與VB的使用,在界面設(shè)計(jì)上元素更豐富。
本文就是基于PyQt5完成的圖轉(zhuǎn)文功能,先看界面:
一、界面PicZ.ui可參考之前的文章如何實(shí)現(xiàn),程序代碼如下:
from PyQt5 import QtCore, QtGui, QtWidgets import base64 import os from return_png import img as retu # 引入img變量,賦別名為pdf_cf class Ui_PicZ(object): def setupUi(self, PicZ): tmp = open('return.png', 'wb') # 創(chuàng)建臨時的文件 tmp.write(base64.b64decode(retu)) # 把這個one圖片解碼出來,寫入文件中去。 tmp.close() PicZ.setObjectName("PicZ") PicZ.resize(1400, 814) PicZ.setMinimumSize(QtCore.QSize(1400, 814)) PicZ.setMaximumSize(QtCore.QSize(1400, 814)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) PicZ.setPalette(palette) self.Reback = QtWidgets.QToolButton(PicZ) self.Reback.setGeometry(QtCore.QRect(10, 10, 51, 41)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush) self.Reback.setPalette(palette) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("return.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.Reback.setIcon(icon) self.Reback.setIconSize(QtCore.QSize(100, 100)) self.Reback.setAutoRaise(True) self.Reback.setObjectName("Reback") self.label = QtWidgets.QLabel(PicZ) self.label.setGeometry(QtCore.QRect(88, 8, 141, 41)) font = QtGui.QFont() font.setFamily("微軟雅黑") font.setPointSize(16) font.setBold(True) font.setWeight(75) self.label.setFont(font) self.label.setObjectName("label") self.frame = QtWidgets.QFrame(PicZ) self.frame.setGeometry(QtCore.QRect(20, 60, 1351, 161)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) self.frame.setPalette(palette) self.frame.setAutoFillBackground(True) self.frame.setFrameShape(QtWidgets.QFrame.Box) self.frame.setFrameShadow(QtWidgets.QFrame.Plain) self.frame.setLineWidth(1) self.frame.setMidLineWidth(0) self.frame.setObjectName("frame") self.scwd = QtWidgets.QPushButton(self.frame) self.scwd.setGeometry(QtCore.QRect(570, 30, 191, 61)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) self.scwd.setPalette(palette) font = QtGui.QFont() font.setFamily("微軟雅黑") font.setPointSize(16) font.setBold(True) font.setWeight(75) self.scwd.setFont(font) self.scwd.setAutoFillBackground(True) self.scwd.setAutoDefault(False) self.scwd.setDefault(False) self.scwd.setFlat(True) self.scwd.setObjectName("scwd") self.label_2 = QtWidgets.QLabel(self.frame) self.label_2.setGeometry(QtCore.QRect(490, 110, 371, 21)) font = QtGui.QFont() font.setFamily("微軟雅黑") self.label_2.setFont(font) self.label_2.setObjectName("label_2") self.frame_2 = QtWidgets.QFrame(PicZ) self.frame_2.setGeometry(QtCore.QRect(1050, 280, 321, 301)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) self.frame_2.setPalette(palette) self.frame_2.setAutoFillBackground(True) self.frame_2.setFrameShape(QtWidgets.QFrame.NoFrame) self.frame_2.setFrameShadow(QtWidgets.QFrame.Plain) self.frame_2.setLineWidth(1) self.frame_2.setMidLineWidth(0) self.frame_2.setObjectName("frame_2") self.label_3 = QtWidgets.QLabel(self.frame_2) self.label_3.setGeometry(QtCore.QRect(20, 20, 191, 31)) font = QtGui.QFont() font.setFamily("微軟雅黑") font.setPointSize(14) font.setBold(False) font.setWeight(50) self.label_3.setFont(font) self.label_3.setObjectName("label_3") self.xzwd = QtWidgets.QPushButton(self.frame_2) self.xzwd.setGeometry(QtCore.QRect(30, 100, 271, 61)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) self.xzwd.setPalette(palette) font = QtGui.QFont() font.setFamily("微軟雅黑") font.setPointSize(14) font.setBold(True) font.setWeight(75) self.xzwd.setFont(font) self.xzwd.setAutoFillBackground(True) self.xzwd.setAutoDefault(False) self.xzwd.setDefault(False) self.xzwd.setFlat(True) self.xzwd.setObjectName("xzwd") self.label_4 = QtWidgets.QLabel(PicZ) self.label_4.setGeometry(QtCore.QRect(20, 280, 500, 500)) self.label_4.setFrameShape(QtWidgets.QFrame.Box) self.label_4.setText("") self.label_4.setObjectName("label_4") self.label_5 = QtWidgets.QLabel(PicZ) self.label_5.setGeometry(QtCore.QRect(530, 280, 500, 500)) self.label_5.setFrameShape(QtWidgets.QFrame.Box) self.label_5.setText("") self.label_5.setObjectName("label_5") self.label_7 = QtWidgets.QLabel(PicZ) self.label_7.setGeometry(QtCore.QRect(210, 250, 71, 21)) font = QtGui.QFont() font.setFamily("微軟雅黑") self.label_7.setFont(font) self.label_7.setObjectName("label_7") self.label_8 = QtWidgets.QLabel(PicZ) self.label_8.setGeometry(QtCore.QRect(730, 250, 71, 21)) font = QtGui.QFont() font.setFamily("微軟雅黑") self.label_8.setFont(font) self.label_8.setObjectName("label_8") self.retranslateUi(PicZ) QtCore.QMetaObject.connectSlotsByName(PicZ) os.remove("return.png") def retranslateUi(self, PicZ): _translate = QtCore.QCoreApplication.translate PicZ.setWindowTitle(_translate("PicZ", "圖片轉(zhuǎn)文字")) self.Reback.setText(_translate("PicZ", "...")) self.label.setText(_translate("PicZ", "圖轉(zhuǎn)文")) self.scwd.setText(_translate("PicZ", "+ 上傳圖片")) self.label_2.setText(_translate("PicZ", "<html><head/><body><p>上傳圖片至此 支持格式:jpg, png,bmp,gif,tiff等</p></body></html>")) self.label_3.setText(_translate("PicZ", "操作")) self.xzwd.setText(_translate("PicZ", "下載Word文檔")) self.label_7.setText(_translate("PicZ", "圖片顯示")) self.label_8.setText(_translate("PicZ", "識別結(jié)果"))
二、main.py實(shí)現(xiàn)主要功能程序如下:
class textwindow(QtWidgets.QWidget,Ui_PicZ): def __init__(self): super(textwindow,self).__init__() self.setupUi(self) def re_back(self): self.close() def sctp(self): fileName, fileType = QtWidgets.QFileDialog.getOpenFileName(self, "選取文件", os.getcwd(),"自定義(*.jpg;*.png;*.jpeg;*);;All Files(*)") image = QPixmap(fileName) f = str(fileName) self.p, self.s = f.split(".") resImg1 = image.scaled(QSize(500, 500)) self.label_4.setPixmap(resImg1) self.label_4.setScaledContents(True) self.text = pytesseract.image_to_string(f, lang="chi_sim+eng", config='--psm 6') # 打印識別后的文本d self.label_5.setText(self.text) def xzwj(self): document=Document() document.add_paragraph(self.text) document.save("{}_圖轉(zhuǎn)文.docx".format(self.p)) root = tkinter.Tk() root.withdraw() tkinter.messagebox.showinfo("提示", "成功下載到源文件所在文件夾")
說明如下:
(1) def sctp(self): 其中的sctp為按鈕的objectName屬性名字;def xzwj(self):其中的xzwj為按鈕的objectName屬性名字;
(2) 可通過點(diǎn)擊按鈕實(shí)現(xiàn)本地文件上傳;
fileName, fileType = QtWidgets. QFileDialog.getOpenFileName(self, "選取文件", os.getcwd(), "自定義(*.jpg;*.png;*.jpeg;*);;All Files(*)")
(3) 利用label組件顯示圖片,同時自適應(yīng)圖片;
(4) 關(guān)鍵點(diǎn)為借助pytesseract模塊實(shí)現(xiàn)離線模式圖轉(zhuǎn)文,在安裝過程中務(wù)必安裝語言包,否則功能不會實(shí)現(xiàn),具體如何安裝,大家可自行搜索;
(5) 最關(guān)鍵可實(shí)現(xiàn)圖轉(zhuǎn)文結(jié)果頁會在label組件中顯示。
三、最后在主程序中加入以上子程序。
if __name__ =="__main__": import sys app = QtWidgets.QApplication(sys.argv) win = mywindow() pt = textwindow() win.show() win.Pic_SB.clicked.connect(win.pic_main) win.Pic_SB.clicked.connect(pt.show) pt.Reback.clicked.connect(pt.re_back) pt.Reback.clicked.connect(win.show) pt.scwd.clicked.connect(pt.sctp) pt.xzwd.clicked.connect(pt.xzwj) sys.exit(app.exec_())
四、總結(jié)
本文介紹的圖轉(zhuǎn)文功能還有一些待完善地方就是pytesseract該模塊,不會很清晰的顯示所有文字,不是對所有照片都好用,有時還會死機(jī)。當(dāng)然我們可以在后續(xù)階段逐漸完善。
到此這篇關(guān)于基于PyQt5實(shí)現(xiàn)圖轉(zhuǎn)文功能(示例代碼)的文章就介紹到這了,更多相關(guān)PyQt5圖轉(zhuǎn)文內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python打印9宮格、25宮格等奇數(shù)格 滿足橫豎斜相加和相等
這篇文章主要為大家詳細(xì)介紹了python打印9宮格、25宮格等奇數(shù)格,滿足橫豎斜相加和相等,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07探索Python元類的魅力:靈活定制類的創(chuàng)建過程
在Python編程中,元類(Metaclass)是一項(xiàng)高級特性,它允許我們在定義類的時候動態(tài)地控制類的創(chuàng)建過程。元類提供了一種強(qiáng)大的機(jī)制,可以對類進(jìn)行定制化,擴(kuò)展其功能,并在類的實(shí)例化過程中執(zhí)行額外的操作,本文將深入解析2023-10-10Python深度學(xué)習(xí)之Keras模型轉(zhuǎn)換成ONNX模型流程詳解
這篇文章主要介紹了Python深度學(xué)習(xí)之Keras模型轉(zhuǎn)換成ONNX模型流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-09-09Python二維數(shù)組實(shí)現(xiàn)求出3*3矩陣對角線元素的和示例
今天小編就為大家分享一篇Python二維數(shù)組實(shí)現(xiàn)求出3*3矩陣對角線元素的和示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11yolov5 win10 CPU與GPU環(huán)境搭建過程
這篇文章主要介紹了yolov5 win10 CPU與GPU環(huán)境搭建過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04tensorflow實(shí)現(xiàn)KNN識別MNIST
這篇文章主要為大家詳細(xì)介紹了tensorflow實(shí)現(xiàn)KNN識別MNIST,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03Python3之讀取連接過的網(wǎng)絡(luò)并定位的方法
下面小編就為大家分享一篇Python3之讀取連接過的網(wǎng)絡(luò)并定位的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04利用Python實(shí)現(xiàn)端口掃描器的全過程
這篇文章主要給大家介紹了關(guān)于如何利用Python實(shí)現(xiàn)端口掃描器的相關(guān)資料,用來檢測目標(biāo)服務(wù)器上有哪些端口開放,本文適用于有 Python和計(jì)算機(jī)網(wǎng)絡(luò)語言基礎(chǔ)的用戶,需要的朋友可以參考下2021-08-08