一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

python例子:圖片識(shí)別文字程序

 奧莉芙小異 2024-08-17 發(fā)布于江西
作品介紹
作品名稱:圖片識(shí)別文字程序
開發(fā)環(huán)境:PyCharm 2023.3.4 + python3.7
用到的庫(kù):PyQt5、sys、os、requests、base64、PIL、pyperclip

圖片


實(shí)現(xiàn)過程
一、閱讀器UI設(shè)計(jì)

1、安裝模塊和配置工具,參考《python例子:翻譯器(簡(jiǎn)單》;

2、運(yùn)行工具QtDesigner,利用QtDesigner工具箱設(shè)計(jì)出界面效果(所需要的控件可查看右邊區(qū)域),保存效果為文件dc.ui;

圖片

3、對(duì)文件dc.ui執(zhí)行pyUIC(ui轉(zhuǎn)化為py代碼),執(zhí)行完生成文件dc.py。

二、代碼設(shè)計(jì)

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 sysimport os# 引入第三方模塊import requests, base64from PIL import Imageimport 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ù)制信息成功')
7全部代碼如下。
from PyQt5.QtWidgets import *from PyQt5.QtGui import *
# 引入自定義模塊import dc# 引入內(nèi)置模塊import sysimport os# 引入第三方模塊import requests, base64from PIL import Imageimport 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

為了方便使用,可以打包成exe;在項(xiàng)目下執(zhí)行語(yǔ)句“pyinstaller -F discernImg.py”,打包成功后項(xiàng)目中新增dist文件,exe文件即為打包后的程序。

圖片







    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    97人妻精品一区二区三区免| 国产男女激情在线视频| 麻豆剧果冻传媒一二三区| 91一区国产中文字幕| 中日韩美女黄色一级片 | 成人午夜视频精品一区| 欧美成人欧美一级乱黄| 亚洲妇女作爱一区二区三区| 国产高清一区二区不卡| 在线播放欧美精品一区| 欧美日韩一级aa大片| 久久99亚洲小姐精品综合| 精品一区二区三区人妻视频| 偷自拍亚洲欧美一区二页| 亚洲一区二区三区四区性色av| 国内外免费在线激情视频| 亚洲熟女乱色一区二区三区| 国产精品福利一级久久| 亚洲精品成人综合色在线| 国产亚洲成av人在线观看| 欧美日韩有码一二三区| 亚洲伦片免费偷拍一区| 亚洲专区中文字幕在线| 精品国产亚洲区久久露脸| 韩国日本欧美国产三级| 肥白女人日韩中文视频| 亚洲国产成人av毛片国产| 亚洲精品国产第一区二区多人| 国产免费操美女逼视频| 国产色偷丝袜麻豆亚洲| 欧美精品二区中文乱码字幕高清| 国产精品欧美激情在线播放| 久久碰国产一区二区三区| 欧美精品亚洲精品日韩精品| 少妇丰满a一区二区三区| 国产一区欧美一区二区| 不卡视频在线一区二区三区| 久久这里只有精品中文字幕| 91精品蜜臀一区二区三区| 激情五月激情婷婷丁香| 亚洲日本韩国一区二区三区|