基于Python實(shí)現(xiàn)圖像文字識別OCR工具
引言
最近在技術(shù)交流群里聊到一個(gè)關(guān)于圖像文字識別的需求,在工作、生活中常常會(huì)用到,比如票據(jù)、漫畫、掃描件、照片的文本提取。
博主基于 PyQt + PaddleOCR 寫了一個(gè)桌面端的OCR工具,用于快速實(shí)現(xiàn)圖片中文本區(qū)域自動(dòng)檢測+文本自動(dòng)識別。
識別效果如下圖所示:

所有框選區(qū)域?yàn)镺CR算法自動(dòng)檢測,右側(cè)列表有每個(gè)框?qū)?yīng)的文字內(nèi)容;
點(diǎn)擊右側(cè)“識別結(jié)果”中的文本記錄,然后點(diǎn)擊“復(fù)制到剪貼板”即可復(fù)制該文本內(nèi)容。
功能列表
- 文本區(qū)域檢測+文字識別
- 文本區(qū)域可視化
- 文字內(nèi)容列表
- 圖像、文件夾加載
- 圖像滾輪縮放查看
- 繪制區(qū)域、編輯區(qū)域
- 復(fù)制文本識別結(jié)果
OCR部分
圖像文字檢測+文字識別算法,主要借助 paddleocr 實(shí)現(xiàn)。
創(chuàng)建或者選擇一個(gè)虛擬環(huán)境,安裝需要用到的第三方庫。
conda create -n ocr conda activate ocr
① 安裝框架
如果你沒有NVIDIA GPU,或GPU不支持CUDA,可以安裝CPU版本:
# CPU版本 pip install paddlepaddle==2.1.0 -i https://mirror.baidu.com/pypi/simple
如果你的GPU安裝過CUDA9或CUDA10,cuDNN 7.6+,可以選擇下面這個(gè)GPU版本:
# GPU版本 python3 -m pip install paddlepaddle-gpu==2.1.0 -i https://mirror.baidu.com/pypi/simple
② 安裝 PaddleOCR
安裝paddleocr:
pip install "paddleocr>=2.0.1" # 推薦使用2.0.1+版本
版面分析,需要安裝 Layout-Parser:
pip3 install -U https://paddleocr.bj.bcebos.com/whl/layoutparser-0.0.0-py3-none-any.whl
③ 測試安裝是否成功
安裝完成后,測試一張圖片--image_dir ./imgs/11.jpg,采用中英文檢測+方向分類器+識別全流程:
paddleocr --image_dir ./imgs/11.jpg --use_angle_cls true --use_gpu false
輸出一個(gè)list:

④ 在python中調(diào)用
from paddleocr import PaddleOCR, draw_ocr
# Paddleocr目前支持的多語言語種可以通過修改lang參數(shù)進(jìn)行切換
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory
img_path = './imgs/11.jpg'
result = ocr.ocr(img_path, cls=True)
for line in result:
print(line)
輸出結(jié)果是一個(gè)list,每個(gè)item包含了文本框,文字和識別置信度:
[[[24.0, 36.0], [304.0, 34.0], [304.0, 72.0], [24.0, 74.0]], [‘純臻營養(yǎng)護(hù)發(fā)素', 0.964739]]
[[[24.0, 80.0], [172.0, 80.0], [172.0, 104.0], [24.0, 104.0]], [‘產(chǎn)品信息/參數(shù)', 0.98069626]]
[[[24.0, 109.0], [333.0, 109.0], [333.0, 136.0], [24.0, 136.0]], ['(45元/每公斤,100公斤起訂)', 0.9676722]]
…
界面部分
界面部分基于 pyqt5 實(shí)現(xiàn)。
pyqt GUI程序開發(fā)入門和環(huán)境配置,詳見這篇博客。
主要步驟:
1. 界面布局設(shè)計(jì)
在QtDesigner中拖拽控件,完成程序界面布局,并保存*.ui文件。

2. 利用 pyuic 自動(dòng)生成界面代碼
在 pycharm 的項(xiàng)目文件結(jié)構(gòu)中找到*.ui文件,右鍵——External Tools——pyuic,會(huì)在ui文件同級目錄下自動(dòng)生成界面 ui 的 python 代碼。

3. 編寫界面業(yè)務(wù)類
業(yè)務(wù)類 MainWindow 實(shí)現(xiàn)程序邏輯和算法功能,與前面第2步生成的ui實(shí)現(xiàn)解耦,避免每次修改ui文件會(huì)影響業(yè)務(wù)代碼。ui界面上的控件可以通過self._ui.xxxObjectName 訪問。
class MainWindow(QMainWindow):
FIT_WINDOW, FIT_WIDTH, MANUAL_ZOOM = 0, 1, 2
def __init__(self):
super().__init__() # 調(diào)用父類構(gòu)造函數(shù),創(chuàng)建QWidget窗體
self._ui = Ui_MainWindow() # 創(chuàng)建ui對象
self._ui.setupUi(self) # 構(gòu)造ui
self.setWindowTitle(__appname__)
# 加載默認(rèn)配置
config = get_config()
self._config = config
# 單選按鈕組
self.checkBtnGroup = QButtonGroup(self)
self.checkBtnGroup.addButton(self._ui.checkBox_ocr)
self.checkBtnGroup.addButton(self._ui.checkBox_det)
self.checkBtnGroup.addButton(self._ui.checkBox_recog)
self.checkBtnGroup.addButton(self._ui.checkBox_layoutparser)
self.checkBtnGroup.setExclusive(True)
4. 實(shí)現(xiàn)界面業(yè)務(wù)邏輯
對主界面上的按鈕、列表、繪圖控件進(jìn)行信號槽連接。自定義的槽函數(shù)不用專門聲明,如果是自定義的信號,需要在類__init__()前加上 yourSignal= pyqtSignal(args)。
這里以按鈕響應(yīng)函數(shù)、列表響應(yīng)函數(shù)為例。按鈕點(diǎn)擊的信號是 clicked,listWidget列表切換選擇的信號是 itemSelectionChanged 。
# 按鈕響應(yīng)函數(shù) self._ui.btnOpenImg.clicked.connect(self.openFile) self._ui.btnOpenDir.clicked.connect(self.openDirDialog) self._ui.btnNext.clicked.connect(self.openNextImg) self._ui.btnPrev.clicked.connect(self.openPrevImg) self._ui.btnStartProcess.clicked.connect(self.startProcess) self._ui.btnCopyAll.clicked.connect(self.copyToClipboard) self._ui.btnSaveAll.clicked.connect(self.saveToFile) self._ui.listWidgetResults.itemSelectionChanged.connect(self.onItemResultClicked)
5. 運(yùn)行看看效果
運(yùn)行 python main.py 即可啟動(dòng)GUI程序。
打開圖片→選擇語言模型ch(中文)→選擇文本檢測+識別→點(diǎn)擊開始,檢測完的文本區(qū)域會(huì)自動(dòng)畫框,并在右側(cè)識別結(jié)果——文本Tab頁的列表中顯示。

所有檢測出文本的區(qū)域列表,在識別結(jié)果——區(qū)域Tab頁:

軟件代碼
由于時(shí)間有限,軟件細(xì)節(jié)功能還需進(jìn)一步完善。
代碼已開源到 gitlab 上,歡迎感興趣的朋友提出建議,一起修改完善。
https://gitee.com/signal926/ocr-gui-demo
參考鏈接
畫框、區(qū)域列表:labelme
icons:material-design-icons
https://gitee.com/paddlepaddle/PaddleOCR/blob/release/2.3/doc/doc_ch/quickstart.md
以上就是基于Python實(shí)現(xiàn)圖像文字識別OCR工具的詳細(xì)內(nèi)容,更多關(guān)于Python圖像文字識別的資料請關(guān)注腳本之家其它相關(guān)文章!
- python調(diào)用文字識別OCR輕松搞定驗(yàn)證碼
- Python免費(fèi)驗(yàn)證碼識別之ddddocr識別OCR自動(dòng)庫實(shí)現(xiàn)
- Python通用驗(yàn)證碼識別OCR庫之ddddocr驗(yàn)證碼識別
- Python通用驗(yàn)證碼識別OCR庫ddddocr的安裝使用教程
- python?ocr簡單示例之識別驗(yàn)證碼
- python實(shí)戰(zhàn)教程之OCR文字識別方法匯總
- Python使用paddleOCR批量識別pdf的方法
- python使用ddddocr庫識別滑動(dòng)驗(yàn)證碼簡單代碼示例
- Python利用cnocr庫實(shí)現(xiàn)pdf文件的文字識別
- python利用ddddocr包ocr識別圖片碼的實(shí)現(xiàn)
相關(guān)文章
利用python實(shí)現(xiàn)xml與數(shù)據(jù)庫讀取轉(zhuǎn)換的方法
這篇文章主要給大家介紹了關(guān)于利用python實(shí)現(xiàn)xml與數(shù)據(jù)庫讀取轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-06-06
python之wxPython應(yīng)用實(shí)例
這篇文章主要介紹了python之wxPython應(yīng)用實(shí)例,以加載圖片為例講述了wxPython的用法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09
Python實(shí)現(xiàn)一個(gè)自助取數(shù)查詢工具
在數(shù)據(jù)生產(chǎn)應(yīng)用部門,取數(shù)分析是一個(gè)很常見的需求,實(shí)際上業(yè)務(wù)人員需求時(shí)刻變化,最高效的方式是讓業(yè)務(wù)部門自己來取,減少不必要的重復(fù)勞動(dòng),本文介紹如何用Python實(shí)現(xiàn)一個(gè)自助取數(shù)查詢工具2021-06-06
python的tkinter布局之簡單的聊天窗口實(shí)現(xiàn)方法
這篇文章主要介紹了python的tkinter布局之簡單的聊天窗口實(shí)現(xiàn)方法,對于tkinter用法做了初步的介紹與應(yīng)用展示,需要的朋友可以參考下2014-09-09
Python中sklearn實(shí)現(xiàn)交叉驗(yàn)證示例分析
這篇文章主要介紹了Python中sklearn實(shí)現(xiàn)交叉驗(yàn)證,本文python的版本為3.8,各個(gè)版本之間函數(shù)名字略有不同,但是原理都是一樣的,集成開發(fā)環(huán)境使用的是Anaconda的Spyder,需要的朋友可以參考下2023-08-08
numpy數(shù)組之存取文件的實(shí)現(xiàn)示例
這篇文章主要介紹了numpy數(shù)組之存取文件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
Python RuntimeWarning:invalid value encounter
這篇文章主要介紹了Python RuntimeWarning:invalid value encountered in double_scalars處理,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
vscode帶命令行參數(shù)進(jìn)行調(diào)試的方法
文章介紹了如何在VSCode中使用命令行參數(shù)進(jìn)行調(diào)試,并描述了如何通過修改`launch.json`文件來簡化調(diào)試過程2025-01-01
python3操作微信itchat實(shí)現(xiàn)發(fā)送圖片
這篇文章主要為大家詳細(xì)介紹了python3操作微信itchat實(shí)現(xiàn)發(fā)送圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02

