OCR 圖形轉文字的識別技術也是架構在深度學習的理論之上,是人工智慧的應用之一。OCR 技術的辨識過程分成三部分:文本偵測、文本識別、文字分類,每一部分都用到神經網路模型來訓練。本文不打算講模型訓練的過程,而是介紹訓練後的網路模型如何部署到應用端,在 Windows 上的 OCR 軟體如何開發。就核心基礎來說,神經網路的模型是基於百度的 PaddleOCR 所訓練得來,它在 Github 上有開放原始碼,除了用百度的模型之外,也可以自建模型訓練。訓練後,百度提供一套推理模型部署的方法,根據技術文件的步驟操作可以在 Windows 環境下編譯出 OCR 的應用程式,不過文件操作還是以 Linux 環境為主。底下我把在 Windows 的編譯過程寫下來。
資料下載
(1) OpenCV:到官網上面下載 Windows 版本,裡面包含程式碼和編譯後的函數庫。
(2) PaddleOCR 原始碼:到 Github 上面下載,至少 v2.5 版本以上的代碼。
(3) Paddle Inference 推理預測庫:這是模型的函數庫,可在百度官網下載 https://paddleinference.paddlepaddle.org.cn/user_guides/download_lib.html#windows,裡面分CPU 和 GPU (CUDA) 的版本,本文是下載 CPU 版本進行編譯。
(4) 模型架構:OCR 需要下載三個模型架構,分別是偵測、辨識、和分類。在 Github 上面可以下載各種模型架構,https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/models_list.md。
將上述的資料準備好後,如下圖所示,依序放到資料夾裡。接著,我們用 Visual Studio 2019 來開始編譯 OCR 應用程式。
圖一:開發前需要準備的資料庫 |
編譯前,先確定 VS2019 有沒有安裝 CMake 元件,系統還要安裝 Git for Windows,沒有 Git 的話,在執行 CMake 過程會出錯。一切就緒後,上圖的目錄中\Paddle\PaddleOCR-2.5.0\deploy\cpp_infer 有一個 CMakeLists.txt 檔案,從 VS2019 IDE 環境下開啟這個 CMake 檔案,會出現如下圖二所示。點選步驟一的 CMake 設定後,便會產生出步驟二的設定檔,然後出現下圖三的配置畫面。
圖二:執行 CMake 檔案 |
設定檔方面有幾點要注意,編譯模式是 Release 或 Debug,如果打算一步步除錯檢視程式碼的話,底下的欄位要選擇 RelWithDebInfo,這樣編譯後會產出 .pdb 檔。再來,三個函數庫的目錄定義要設定(下圖黃框標示),把 OpenCV 函數庫和 Paddle Inference 推理預測庫的目錄填好。最後,就是把 CMake 產生器選好,儲存這個配置檔案後,CMake 便自動開始產出編譯的 makefile,我們再執行 VS2019 選單上面 build 建置這個 ppocr 項目,看看編譯過程有沒有錯誤?成功後會產出 ppocr.exe 執行檔。
圖三:CMakeLists 的設定 |
執行 OCR
當編譯產出 ppocr.exe 之後,我們在 CMD-line 運行看看,應該會彈出錯誤視窗說缺少甚麼 DLL,這是因為 CMake 沒有把 Paddle Inference 第三方支援的函數庫複製過來。將 paddle_inference.dll、paddle2onnx.dll、onnxruntime.dll 放到與執行檔同一目錄,再執行看看。另外,試著從 VS 2019 IDE 設置斷點,如上圖二,看看能否除錯的方式運行 ppocr,這對我們熟悉程式碼有幫助。
OCR 它有不少參數可以設定,試著輸入 "ppocr --help" 會列出所有參數的簡單說明。 底下指令是執行 OCR 完整的指令輸入,如一開始提到的分成三部分:檢測、辨識、分類,分別給定推理預測的模型架構,執行後就能看到結果。
ppocr --det_model_dir=D:\Paddle\ch_PP-OCRv3_det_infer --rec_model_dir=D:\Paddle\ch_PP-OCRv3_rec_infer --cls_model_dir=D:\Paddle\ch_ppocr_mobile_v2.0_cls_infer --image_dir=D:\yijen\source\repos\python\ppocr_img\imgs\12.jpg --rec_char_dict_path=.\ppocr_keys_v1.txt --use_angle_cls=true --det=true --rec=true --cls=true
全站熱搜
留言列表