中英文超輕量文本識(shí)別模型PP-OCRv3在嵌入式設(shè)備上的部署
1. PaddleOCR簡(jiǎn)介
PaddleOCR 是百度飛槳(PaddlePaddle)框架下的一個(gè)文本識(shí)別模塊,旨在打造一套豐富、領(lǐng)先、且實(shí)用的 OCR (Optical Character Recognition,光學(xué)字符識(shí)別)工具庫(kù),助力開發(fā)者訓(xùn)練出更好的模型,并應(yīng)用落地。PaddleOCR 于2022年5月初發(fā)布 PP-OCRv3,與上一個(gè)版本 PP-OCRv2 相比,中文場(chǎng)景效果再提升5%,英文場(chǎng)景提升11%,80語(yǔ)種多語(yǔ)言模型平均識(shí)別準(zhǔn)確率提升5%以上。
PaddleOCR Github 地址:https://github.com/PaddlePaddle/PaddleOCR 。
2. 下載中英文超輕量文本識(shí)別模型?ch_PP-OCRv3_xx
ch_PP-OCRv3_xx 下載地址如下:
檢測(cè)模型:https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar
識(shí)別模型:https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar
有一點(diǎn)需要說(shuō)明的是,這里我們下載都是推理模型,因?yàn)槲覀冎饕怯糜谕评眍A(yù)測(cè)的。

在 Linux 系統(tǒng)中,可以使用如下命令進(jìn)行下載:

3. 下載 PaddleLite 源碼并編譯生成?paddle_lite_opt 工具
paddle_lite_opt 工具主要用于模型優(yōu)化和轉(zhuǎn)換,在這里我們首先需要把它編譯出來(lái)。
在Linux系統(tǒng)中,我們可以通過(guò)下面的命令來(lái)下載 PaddleLite 源碼:

源碼下載完成后,進(jìn)入 Paddle-Lite 目錄,執(zhí)行如下指令進(jìn)行編譯:
編譯完成后,我們?cè)?build.opt/lite/api/ 目錄下發(fā)現(xiàn)新生成的 opt 工具:

4.?將模型由 inference 格式轉(zhuǎn)換為 paddle-lite 格式
在前面的步驟中,我們完成了模型的下載,但是下載到的模型是 inference 格式的,適用于在服務(wù)器端進(jìn)行推理。而我們要在嵌入式設(shè)備中使用的話,就需要將其轉(zhuǎn)換為 paddle-lite 格式。正好我們剛剛編譯生成?paddle_lite_opt 工具,可以進(jìn)行模型的轉(zhuǎn)換。
首先,讓我們將下載到的文本檢測(cè)和文本識(shí)別模型進(jìn)行解壓:

接著,我們使用剛剛編譯生成的?paddle_lite_opt 工具進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換指令如下:
轉(zhuǎn)換完成后,我們可以在我們指定的輸出目錄中看到以 “.nb” 為后綴名的 Paddle-Lite 格式的文本檢測(cè)和文本識(shí)別模型。

5. 編譯生成 PaddleLite 預(yù)測(cè)庫(kù)
PaddleLite源碼我們?cè)谇懊娴牟襟E中已經(jīng)下載過(guò)來(lái),這里我們只需使用嵌入式設(shè)備所需的工具鏈來(lái)對(duì)其進(jìn)行編譯即可。由于不同的嵌入式設(shè)備需要的工具鏈不一樣,所以關(guān)于如何安裝工具鏈的問(wèn)題,這里就不作介紹了。我用于測(cè)試的設(shè)備,所需的工具鏈?zhǔn)?arm-linux-gnueabihf-gcc?,在此之前我已經(jīng)裝好了。

我們直接使用下面的指令進(jìn)行編譯:

編譯完成后,我們?cè)?build.lite.linux.armv7hf.gcc/inference_lite_lib.armlinux.armv7hf/ 目錄下可以發(fā)現(xiàn)已經(jīng)生成我們所需要的 PaddleLite 預(yù)測(cè)庫(kù)——libpaddle_light_api_shared.so 了。

6. 參考官方例程創(chuàng)建 ocr_demo 工程
我們創(chuàng)建的 ocr_demo 工程主要用于編譯生成可以運(yùn)行在嵌入式設(shè)備上的可執(zhí)行程序,參考的例程位于?PaddleOCR/deploy/lite/ 目錄下:

我們自己創(chuàng)建的 orc_demo 主要包含 opencv、PaddleLite 預(yù)測(cè)庫(kù) 和 測(cè)試源碼三個(gè)部分,其中,PaddleLite 預(yù)測(cè)庫(kù)就是我們?cè)谇懊娌襟E中編譯生成的,其目錄結(jié)構(gòu)如下所示:
至于 opencv 的交叉編譯,由于篇幅所限,這里我們就不作過(guò)多介紹了。接下來(lái)我們要做的是把這個(gè)例程編譯出來(lái)。改動(dòng)的地方主要是編譯規(guī)則文件?CMakeLists.txt,其全部源碼如下所示:
編譯的方法非常簡(jiǎn)單,我們只需運(yùn)行??build.sh 腳本即可,其文件內(nèi)容如下:
運(yùn)行?build.sh 腳本進(jìn)行編譯:

編譯完成可以看到生成的可執(zhí)行程序:ocr_db_crnn

7. 將?ocr_db_crnn 程序放到嵌入式設(shè)備上進(jìn)行測(cè)試
需要注意的是,要一次性把程序運(yùn)行所依賴的文件都復(fù)制過(guò)去,特別是 PaddleLite 預(yù)測(cè)庫(kù)和我們轉(zhuǎn)換好的 PaddedLite 格式的 OCR 模型。
一切準(zhǔn)備就緒后,執(zhí)行如下指令即可運(yùn)行測(cè)試程序:

至此,百度中英文超輕量文本識(shí)別模型PP-OCRv3在嵌入式設(shè)備上的部署就算是完成了。下面是文本識(shí)別的對(duì)比圖(可以看看識(shí)別的結(jié)果是否準(zhǔn)確):
