開發(fā)環(huán)境:PyCharm 2023.3.4 + python3.7用到的庫(kù):PyQt5、sys、os、requests、base64、PIL、pyperclip2、運(yùn)行工具QtDesigner,利用QtDesigner工具箱設(shè)計(jì)出界面效果(所需要的控件可查看右邊區(qū)域),保存效果為文件dc.ui;3、對(duì)文件dc.ui執(zhí)行pyUIC(ui轉(zhuǎn)化為py代碼),執(zhí)行完生成文件dc.py。1、新建文件discernImg.py,該文件為項(xiàng)目主文件,初始化頁(yè)面并顯示;2、添加內(nèi)置模塊(下面代碼使用)和主方法(用于運(yùn)行后彈出界面);提示:由于是引入dc(dc.py),而未對(duì)其修改,所以開發(fā)過程中可以隨時(shí)修改設(shè)計(jì)重新生成dc.py,不會(huì)覆蓋掉自己編寫的代碼;但要注意如果修改了表單屬性和名稱等,編寫的代碼要跟著修改。from PyQt5.QtWidgets import * from PyQt5.QtGui import *
# 引入自定義模塊 import dc # 引入內(nèi)置模塊 import sys import os # 引入第三方模塊 import requests, base64 from PIL import Image import pyperclip
class parentWindow(QWidget, dc.Ui_Form): # 初始化方法 def __init__(self): # 找到父類 首頁(yè)面 super(parentWindow, self).__init__() # 初始化頁(yè)面方法 self.setupUsei(lf) # 點(diǎn)擊選擇圖片 self.selectImg.clicked.connect(self.select_image) # 點(diǎn)擊查看圖片 self.viewImg.clicked.connect(self.view_image) # 點(diǎn)擊復(fù)制信息 self.copyData.clicked.connect(self.copy_data)
if __name__ == '__main__': # 每一個(gè)PyQt5應(yīng)用都必須創(chuàng)建一個(gè)應(yīng)用對(duì)象 app = QApplication(sys.argv) # 初始化頁(yè)面 window = parentWindow() # 顯示首頁(yè) window.show() sys.exit(app.exec_()) 3、添加圖片識(shí)別函數(shù)recgImg,用來掃描圖片獲取圖片信息;# 識(shí)別名片圖片 def recgImg(self): # 獲取baiduToken apikey = '你的apikey' seckey = '你的seckey' tokenUrl = 'https://aip./oauth/2.0/token?grant_type=client_credentials&client_id=' + apikey + '&client_secret=' + seckey res = requests.get(url=tokenUrl, headers={'content-type': 'application/json; charset=UTF-8'}).json() baiduToken = res['access_token']
''' 圖片識(shí)別(API) ''' request_url = 'https://aip./rest/2.0/ocr/v1/webimage' # 二進(jìn)制方式打開圖片文件 f = open(self.download_path[0], 'rb') img = base64.b64encode(f.read())
params = {'image': img} # access_token = '[調(diào)用鑒權(quán)接口獲取的token]' request_url = request_url + '?access_token=' + baiduToken headers = {'content-type': 'application/x-www-form-urlencoded'} response = requests.post(request_url, data=params, headers=headers) if response: # print(response.json()) return response.json() 4、實(shí)現(xiàn)點(diǎn)擊“選擇圖片”功能,用來掃描選擇的圖片,并把圖片和獲取到的圖片信息顯示到界面;# 選擇圖片執(zhí)行方法 def select_image(self): # 啟動(dòng)選擇文件對(duì)話空,查找jpg以及png圖片 self.download_path = QFileDialog.getOpenFileName(self, '選擇要識(shí)別的圖片', os.getcwd(), 'Image Files(*.jpg *.png)') # 判斷是否選擇圖片 if not self.download_path[0].strip(): QMessageBox.information(self, '提示信息', '沒有選擇名片圖片') pass else: # pixmap解析圖片 pixmap = QPixmap(self.download_path[0]) # 設(shè)置圖片 self.imgLabel.setPixmap(pixmap) # 讓圖片自適應(yīng)label大小 self.imgLabel.setScaledContents(True) try: # 識(shí)別名片圖片返回識(shí)別結(jié)果 content = self.recgImg() except: QMessageBox.information(self, '提示信息', '識(shí)別錯(cuò)誤請(qǐng)重新選擇圖片')
# 識(shí)別圖片的數(shù)據(jù)賦值 words_result = content['words_result'] # print(words_result) text = '' for item in words_result: for v in item.values(): text = text + '\n' + v self.discernText.setText(text) 5、實(shí)現(xiàn)點(diǎn)擊“查看大圖”功能,用來全屏顯示圖片;# 點(diǎn)擊查看圖片顯示大圖功能 def view_image(self): if self.download_path: # 使用電腦中的看圖工具打開圖片 img = Image.open(self.download_path[0]) # 顯示圖片 img.show() else: QMessageBox.information(self, '提示信息', '先選擇名片圖片') 6、實(shí)現(xiàn)點(diǎn)擊“復(fù)制信息”功能,用來復(fù)制識(shí)別的信息到粘貼板;# 復(fù)制圖片識(shí)別的信息 def copy_data(self): text = self.discernText.toPlainText() if not text: QMessageBox.information(self, '提示信息', '沒有可復(fù)制的信息') else: # 將文本復(fù)制到剪貼板 pyperclip.copy(text) QMessageBox.information(self, '提示信息', '復(fù)制信息成功')
from PyQt5.QtWidgets import * from PyQt5.QtGui import *
# 引入自定義模塊 import dc # 引入內(nèi)置模塊 import sys import os # 引入第三方模塊 import requests, base64 from PIL import Image import pyperclip
class parentWindow(QWidget, dc.Ui_Form): # 初始化方法 def __init__(self): # 找到父類 首頁(yè)面 super(parentWindow, self).__init__() # 初始化頁(yè)面方法 self.setupUsei(lf) # 點(diǎn)擊選擇圖片 self.selectImg.clicked.connect(self.select_image) # 點(diǎn)擊查看圖片 self.viewImg.clicked.connect(self.view_image) # 點(diǎn)擊復(fù)制信息 self.copyData.clicked.connect(self.copy_data)
# 選擇圖片執(zhí)行方法 def select_image(self): # 啟動(dòng)選擇文件對(duì)話空,查找jpg以及png圖片 self.download_path = QFileDialog.getOpenFileName(self, '選擇要識(shí)別的圖片', os.getcwd(), 'Image Files(*.jpg *.png)') # 判斷是否選擇圖片 if not self.download_path[0].strip(): QMessageBox.information(self, '提示信息', '沒有選擇名片圖片') pass else: # pixmap解析圖片 pixmap = QPixmap(self.download_path[0]) # 設(shè)置圖片 self.imgLabel.setPixmap(pixmap) # 讓圖片自適應(yīng)label大小 self.imgLabel.setScaledContents(True) try: # 識(shí)別名片圖片返回識(shí)別結(jié)果 content = self.recgImg() except: QMessageBox.information(self, '提示信息', '識(shí)別錯(cuò)誤請(qǐng)重新選擇圖片')
# 識(shí)別圖片的數(shù)據(jù)賦值 words_result = content['words_result'] # print(words_result) text = '' for item in words_result: for v in item.values(): text = text + '\n' + v self.discernText.setText(text)
# 識(shí)別名片圖片 def recgImg(self): # 獲取baiduToken apikey = 'H5EA7rOL8Q1lfM4V' seckey = 'wjEIrva1TXO35FYqFxEB' tokenUrl = 'https://aip./oauth/2.0/token?grant_type=client_credentials&client_id=' + apikey + '&client_secret=' + seckey res = requests.get(url=tokenUrl, headers={'content-type': 'application/json; charset=UTF-8'}).json() baiduToken = res['access_token']
''' 圖片識(shí)別(API) ''' request_url = 'https://aip./rest/2.0/ocr/v1/webimage' # 二進(jìn)制方式打開圖片文件 f = open(self.download_path[0], 'rb') img = base64.b64encode(f.read())
params = {'image': img} # access_token = '[調(diào)用鑒權(quán)接口獲取的token]' request_url = request_url + '?access_token=' + baiduToken headers = {'content-type': 'application/x-www-form-urlencoded'} response = requests.post(request_url, data=params, headers=headers) if response: # print(response.json()) return response.json()
# 點(diǎn)擊查看圖片顯示大圖功能 def view_image(self): if self.download_path: # 使用電腦中的看圖工具打開圖片 img = Image.open(self.download_path[0]) # 顯示圖片 img.show() else: QMessageBox.information(self, '提示信息', '先選擇名片圖片')
# 復(fù)制圖片識(shí)別的信息 def copy_data(self): text = self.discernText.toPlainText() if not text: QMessageBox.information(self, '提示信息', '沒有可復(fù)制的信息') else: # 將文本復(fù)制到剪貼板 pyperclip.copy(text) QMessageBox.information(self, '提示信息', '復(fù)制信息成功')
if __name__ == '__main__': # 每一個(gè)PyQt5應(yīng)用都必須創(chuàng)建一個(gè)應(yīng)用對(duì)象 app = QApplication(sys.argv) # 初始化頁(yè)面 window = parentWindow() # 顯示首頁(yè) window.show() sys.exit(app.exec_())
為了方便使用,可以打包成exe;在項(xiàng)目下執(zhí)行語(yǔ)句“pyinstaller -F discernImg.py”,打包成功后項(xiàng)目中新增dist文件,exe文件即為打包后的程序。
|