基于Python實現(xiàn)圖像文字識別OCR工具
引言
最近在技術交流群里聊到一個關于圖像文字識別的需求,在工作、生活中常常會用到,比如票據、漫畫、掃描件、照片的文本提取。
博主基于 PyQt + PaddleOCR 寫了一個桌面端的OCR工具,用于快速實現(xiàn)圖片中文本區(qū)域自動檢測+文本自動識別。
識別效果如下圖所示:
所有框選區(qū)域為OCR算法自動檢測,右側列表有每個框對應的文字內容;
點擊右側“識別結果”中的文本記錄,然后點擊“復制到剪貼板”即可復制該文本內容。
功能列表
- 文本區(qū)域檢測+文字識別
- 文本區(qū)域可視化
- 文字內容列表
- 圖像、文件夾加載
- 圖像滾輪縮放查看
- 繪制區(qū)域、編輯區(qū)域
- 復制文本識別結果
OCR部分
圖像文字檢測+文字識別算法,主要借助 paddleocr 實現(xiàn)。
創(chuàng)建或者選擇一個虛擬環(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+,可以選擇下面這個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
輸出一個list:
④ 在python中調用
from paddleocr import PaddleOCR, draw_ocr # Paddleocr目前支持的多語言語種可以通過修改lang參數進行切換 # 例如`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)
輸出結果是一個list,每個item包含了文本框,文字和識別置信度:
[[[24.0, 36.0], [304.0, 34.0], [304.0, 72.0], [24.0, 74.0]], [‘純臻營養(yǎng)護發(fā)素', 0.964739]]
[[[24.0, 80.0], [172.0, 80.0], [172.0, 104.0], [24.0, 104.0]], [‘產品信息/參數', 0.98069626]]
[[[24.0, 109.0], [333.0, 109.0], [333.0, 136.0], [24.0, 136.0]], ['(45元/每公斤,100公斤起訂)', 0.9676722]]
…
界面部分
界面部分基于 pyqt5 實現(xiàn)。
pyqt GUI程序開發(fā)入門和環(huán)境配置,詳見這篇博客。
主要步驟:
1. 界面布局設計
在QtDesigner中拖拽控件,完成程序界面布局,并保存*.ui文件。
2. 利用 pyuic 自動生成界面代碼
在 pycharm 的項目文件結構中找到*.ui文件,右鍵——External Tools——pyuic,會在ui文件同級目錄下自動生成界面 ui 的 python 代碼。
3. 編寫界面業(yè)務類
業(yè)務類 MainWindow 實現(xiàn)程序邏輯和算法功能,與前面第2步生成的ui實現(xiàn)解耦,避免每次修改ui文件會影響業(yè)務代碼。ui界面上的控件可以通過self._ui.xxxObjectName 訪問。
class MainWindow(QMainWindow): FIT_WINDOW, FIT_WIDTH, MANUAL_ZOOM = 0, 1, 2 def __init__(self): super().__init__() # 調用父類構造函數,創(chuàng)建QWidget窗體 self._ui = Ui_MainWindow() # 創(chuàng)建ui對象 self._ui.setupUi(self) # 構造ui self.setWindowTitle(__appname__) # 加載默認配置 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. 實現(xiàn)界面業(yè)務邏輯
對主界面上的按鈕、列表、繪圖控件進行信號槽連接。自定義的槽函數不用專門聲明,如果是自定義的信號,需要在類__init__()前加上 yourSignal= pyqtSignal(args)。
這里以按鈕響應函數、列表響應函數為例。按鈕點擊的信號是 clicked,listWidget列表切換選擇的信號是 itemSelectionChanged 。
# 按鈕響應函數 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. 運行看看效果
運行 python main.py 即可啟動GUI程序。
打開圖片→選擇語言模型ch(中文)→選擇文本檢測+識別→點擊開始,檢測完的文本區(qū)域會自動畫框,并在右側識別結果——文本Tab頁的列表中顯示。
所有檢測出文本的區(qū)域列表,在識別結果——區(qū)域Tab頁:
軟件代碼
由于時間有限,軟件細節(jié)功能還需進一步完善。
代碼已開源到 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實現(xiàn)圖像文字識別OCR工具的詳細內容,更多關于Python圖像文字識別的資料請關注腳本之家其它相關文章!
相關文章
Python Pygame實戰(zhàn)之塔防游戲的實現(xiàn)
這篇文章主要介紹了如何利用Python中的Pygame模塊制作簡單的塔防小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手試一試2022-03-03Python 3.6 性能測試框架Locust安裝及使用方法(詳解)
下面小編就為大家?guī)硪黄狿ython 3.6 性能測試框架Locust安裝及使用方法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10基于python requests selenium爬取excel vba過程解析
這篇文章主要介紹了基于python requests selenium爬取excel vba過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08解決Tensorflow使用pip安裝后沒有model目錄的問題
今天小編就為大家分享一篇解決Tensorflow使用pip安裝后沒有model目錄的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06