PPOCR是由百度開發(fā)的一款開源深度學習OCR(光學字符識別)模型,專注于文本檢測、識別與理解任務,具備多場景、多語言的字符識別能力。該模型基于大規(guī)模多樣化的文本圖像數(shù)據(jù)訓練而成,能夠有效應對復雜背景、模糊字跡、傾斜變形及特殊字體等挑戰(zhàn),在圖像轉(zhuǎn)文本任務中展現(xiàn)出優(yōu)異的準確性和魯棒性。其支持多種圖像格式輸入和輕量化部署特性,使其廣泛應用于文檔數(shù)字化、票據(jù)識別、車牌識別、工業(yè)質(zhì)檢、智能辦公等多個領(lǐng)域。
PPOCR的開源生態(tài)為OCR技術(shù)的研究與應用提供了重要支撐,尤其在與移動端、嵌入式設備結(jié)合時,通過模型壓縮與優(yōu)化可實現(xiàn)高效的端側(cè)文本識別,進一步拓展了其在智能終端、物聯(lián)網(wǎng)設備、自動化系統(tǒng)等場景中的實用價值。隨著端側(cè)計算能力的持續(xù)提升,PPOCR有望在更多實時文本交互場景中發(fā)揮關(guān)鍵作用,推動OCR技術(shù)的普惠化與商業(yè)化落地。
一、環(huán)境搭建
1. Anaconda安裝及使用
1.1Anaconda介紹
Anaconda是一個流行的開源軟件包管理和環(huán)境管理系統(tǒng),用于科學計算、數(shù)據(jù)分析和大數(shù)據(jù)處理,特別是在Python環(huán)境中。它包含了許多常用的科學計算和數(shù)據(jù)分析的軟件包,并提供了一個方便的方式來管理這些軟件包的安裝、更新和環(huán)境配置。以下是Anaconda的一些主要特點和用途:
軟件包管理
Anaconda提供了一個名為conda的包管理工具,可以輕松安裝、更新和刪除軟件包。它支持數(shù)千個科學計算和數(shù)據(jù)分析相關(guān)的軟件包,如NumPy、Pandas、Matplotlib等。
環(huán)境管理
Anaconda允許用戶創(chuàng)建和管理多個獨立的Python環(huán)境。每個環(huán)境可以有不同版本的Python和不同的軟件包集合,這樣可以避免版本沖突和環(huán)境污染。
跨平臺
Anaconda可以在Windows、macOS和Linux上運行,使其成為開發(fā)人員和研究人員之間共享和復制數(shù)據(jù)分析項目的理想工具。
集成開發(fā)環(huán)境(IDE)
Anaconda還包含了Jupyter Notebook等強大的交互式開發(fā)工具,使用戶能夠在瀏覽器中創(chuàng)建和分享文檔,結(jié)合代碼、公式、可視化和解釋性文本。
大數(shù)據(jù)支持
Anaconda不僅適用于單機環(huán)境,還支持分布式計算平臺,如Apache Spark,從而能夠處理大規(guī)模數(shù)據(jù)和復雜的計算任務。
總之,Anaconda提供了一個全面的解決方案,使得科學計算和數(shù)據(jù)分析的開發(fā)和部署變得更加簡單和高效。
1.2Anaconda安裝
我們提供的虛擬機系統(tǒng)內(nèi)已預裝了Python 3.10及RKNN-Toolkit 2.1.0,專為模型轉(zhuǎn)換與量化打造。若使用其他版本Python或相關(guān)工具的需求,推薦在虛擬機中另行安裝Anaconda,以此避免環(huán)境沖突實現(xiàn)環(huán)境的完全隔離。
虛擬機系統(tǒng)使用的是“ELF 2開發(fā)板資料包”中提供的開發(fā)環(huán)境(路徑:ELF 2開發(fā)板資料包\08-開發(fā)環(huán)境)您可以選擇從網(wǎng)絡上下載Linux 版本的Miniconda,推薦訪問清華大學的鏡像庫進行下載。
具體網(wǎng)址為:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/
另外,您也可以在“ELF 2開發(fā)板資料包”的“06-常用工具\06-2 環(huán)境搭建工具\AI 安裝腳本”路徑下找到名為“Miniconda3-4.7.12.1-Linux-x86_64.sh”的執(zhí)行腳本。只需將該腳本上傳至虛擬機中,并執(zhí)行它即可完成Miniconda的安裝。
首先對執(zhí)行腳本賦予執(zhí)行權(quán)限并執(zhí)行腳本:
elf@ubuntu:~$ chmod +x Miniconda3-4.7.12.1-Linux-x86_64.sh elf@ubuntu:~$ ./Miniconda3-4.7.12.1-Linux-x86_64.sh
按enter按鍵,之后輸入yes,然后再設置安裝路徑,進行安裝。

安裝完之后如下圖所示:

重新打開終端。命令行之前出現(xiàn)(base)代表安裝成功。

1.3Anaconda基本使用
以下是關(guān)于conda操作指令的跨平臺說明及在虛擬機上的示范:conda的操作指令是跨平臺的,這意味著它們既可以在Linux系統(tǒng)上運行,也可以在Windows系統(tǒng)上執(zhí)行。接下來將在虛擬機環(huán)境中進行示范。
查看虛擬環(huán)境列表:
condaenvlist

創(chuàng)建新的虛擬環(huán)境:
conda create --name<虛擬環(huán)境名稱>python=<版本號>
例如:conda create --name myenv python=3.10
說明:此命令會創(chuàng)建一個名為<虛擬環(huán)境名稱>的新虛擬環(huán)境,并安裝指定版本的Python。如果不指定Python版本,則會安裝Anaconda發(fā)行版中附帶的Python版本。

激活虛擬環(huán)境:
例如:conda activate myenv
說明:激活虛擬環(huán)境后,在該環(huán)境下安裝的包將僅在該環(huán)境中可用,從而避免了不同項目之間的依賴沖突。

退出虛擬環(huán)境:
condadeactivate
說明:此命令用于退出當前激活的虛擬環(huán)境,返回到基礎(chǔ)環(huán)境(base環(huán)境)。如再次執(zhí)行命令,則會退出base環(huán)境。

給虛擬環(huán)境安裝庫:
pip install <包名> conda install <包名>
例如:conda install numpy 或 pip install numpy
說明:通常推薦使用conda安裝庫,因為它會自動處理依賴關(guān)系。但在某些情況下,如果conda中沒有可用的包版本,也可以使用pip進行安裝。

刪除虛擬環(huán)境:
condaenvremove --name <虛擬環(huán)境名稱>
例如:conda env remove --name myenv
說明:此命令會刪除指定的虛擬環(huán)境及其下安裝的所有包。

1.4. 創(chuàng)建用于部署的虛擬環(huán)境
創(chuàng)建新的虛擬環(huán)境:
elf@ubuntu:~$ conda create --name RKLLM-Toolkit-pyth3.10python=3.10
conda create --name <虛擬環(huán)境名稱> python=<版本號>
說明:此命令會創(chuàng)建一個名為<虛擬環(huán)境名稱>的新虛擬環(huán)境,并安裝指定版本的Python。如果不指定Python版本,則會安裝Anaconda發(fā)行版中附帶的Python版本。
激活虛擬環(huán)境:
elf@ubuntu:~$conda activateRKLLM-Toolkit-pyth3.10
conda activate <虛擬環(huán)境名稱>
說明:激活虛擬環(huán)境后,在該環(huán)境下安裝的包將僅在該環(huán)境中可用,從而避免了不同項目之間的依賴沖突。

2.RKNN-Toolkit2介紹及安裝
2.1RKNN-Toolkit2介紹
RKNN-Toolkit2是由瑞芯微電子開發(fā)的一套深度學習模型優(yōu)化和推理工具。它支持多種深度學習框架(如Caffe、TensorFlow、PyTorch 等)的模型轉(zhuǎn)換為RKNN格式,并提供了模型轉(zhuǎn)換、量化、推理等功能。RKNN-Toolkit2主要面向在瑞芯微SoC上進行AI應用開發(fā),但也可以用于PC平臺進行模型的轉(zhuǎn)換、量化、推理等操作。
2.2RKNN-Toolkit2安裝
將以下兩個文件拷貝到虛擬機中進行安裝。
文件一:rknn_toolkit2-2.1.0+708089d1-cp310-cp310-linux_x86_64.whl ??rknn_toolkit2-2.1.0+708089d1-cp310-cp310-linux_x86_64.zip
文件二:requirements_cp310-2.1.0.txt ??requirements_cp310-2.1.0.txt
也可以在 ELF 2 開發(fā)板資料包\03-例程源碼\03-4 AI例程源碼\rknn-toolkit2-2.1.0\rknn-toolkit2\packages路徑下找到rknn_toolkit2-2.1.0+708089d1-cp310-cp310-linux_x86_64.whl 和requirements_cp310-2.1.0.txt
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/qwen2_vl$pip install -r requirements_cp310-2.1.0.txt -ihttps://mirrors.tuna.tsinghua.edu.cn/pypi/web/simplesome-package

(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/qwen2_vl$pip install rknn_toolkit2-2.1.0+708089d1-cp310-cp310-linux_x86_64.whl -ihttps://mirrors.tuna.tsinghua.edu.cn/pypi/web/simplesome-package

注意:在安裝中如果出現(xiàn)庫版本沖突問題,再次執(zhí)行安裝命令會解決庫版本沖突的報錯問題。
3.RKNN-Toolkit-Lite2介紹及安裝
3.1RKNN-Toolkit-Lite2介紹
RKNN-Toolkit-Lite2 是Rockchip為其輕量級神經(jīng)網(wǎng)絡處理單元提供的一款工具包。它專注于簡化和加速深度學習模型在Rockchip硬件平臺上的部署和推理過程。與RKNN-Toolkit2相比,RKNN-Toolkit-Lite2主要針對輕量級應用和較小的計算需求進行優(yōu)化。
3.2開發(fā)板安裝RKNN-Toolkit-Lite2
將以下文件拷貝到板卡中進行安裝。
文件:rknn_toolkit_lite2-2.1.0-cp310-cp310-linux_aarch64.whl
也可以在ELF 2開發(fā)板資料包\03-例程源碼\03-4 AI例程源碼\rknn-toolkit2-2.1.0\rknn-toolkit-lite2\packages路徑下找到rknn_toolkit_lite2-2.1.0-cp310-cp310-linux_aarch64.whl 。
elf@elf2-desktop:~$ sudo apt-get update elf@elf2-desktop:~$ sudo apt-get install python3-pip elf@elf2-desktop:~$ pip install rknn_toolkit_lite2-2.1.0-cp310-cp310-linux_aarch64.whl -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package

為了確認rknnlite庫是否已成功安裝,請啟動Python交互式環(huán)境,并嘗試導入該庫。
elf@elf2-desktop:~$ python3 Python 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from rknnlite.api import RKNNLite >>>

未出現(xiàn)報錯代表安裝成功。
4.交叉編譯工具安裝
推薦使用交叉編譯工具gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu;交叉編譯工具往往向下兼容而無法向上兼容,因此不要使用10.2 以下的版本。
鏈接:Downloads | 10.2-2020.11 – Arm Developer
您也可以在ELF 2開發(fā)板資料包\03-例程源碼\03-4 AI例程源碼\路徑下找到gcc-arm-10.2-2020.11- x86_64-aarch64-none-linux-gnu.tar.xz。
5.虛擬機內(nèi)存資源擴展
在交叉編譯PPOCR時,編譯器因內(nèi)存不足被強制終止。可通過增加8GB交換空間解決。
創(chuàng)建新的交換文件:
# 創(chuàng)建8GB的交換文件(根據(jù)需求調(diào)整大小) elf@ubuntu:~$ sudo dd if=/dev/zero of=/swapfile2 bs=1M count=8192 # 設置正確的權(quán)限 elf@ubuntu:~$ sudo chmod 600 /swapfile2 # 格式化為交換文件 elf@ubuntu:~$ sudo mkswap /swapfile2 # 啟用新的交換文件 elf@ubuntu:~$ sudo swapon /swapfile2
驗證是否生效:
elf@ubuntu:~$ free-h total used free shared buff/cache available Mem: 15Gi 719Mi 6.5Gi 7.0Mi 8.4Gi 14Gi Swap: 9Gi 469Mi 9.5Gi
二、下載PPOCR模型
請將rknn_model_zoo-2.1.0.zip壓縮包首先上傳至虛擬機中,隨后使用以下指令進行解壓操作,并為解壓后的rknn_model_zoo-2.1.0文件夾設置適當?shù)臋?quán)限。
RKNN Model Zoo下載地址:airockchip/rknn_model_zoo at v2.1.0
您也可以在 ELF 2 開發(fā)板資料包\03-例程源碼\03-4 AI例程源碼\路徑下找到rknn_model_zoo-2.1.0.zip。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work$ unzip rknn_model_zoo-2.1.0.zip (RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work$ chmod -R 755 rknn_model_zoo-2.1.0
進入rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Det/model路徑下載PPOCR-Det模型。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Det/model$./download_model.sh

進入rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Rec/model路徑下載PPOCR-Det模型。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Rec/model$./download_model.sh

三、模型轉(zhuǎn)換成rknn格式
進入rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Det/python路徑下,執(zhí)行以下命令進行OCR檢測模型轉(zhuǎn)換。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Det/python$python3 convert.py ../model/ppocrv4_det.onnx rk3588
進入rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Rec/python路徑下,執(zhí)行以下命令進行OCR識別模型轉(zhuǎn)換。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0/examples/PPOCR/PPOCR-Rec/python$python3 convert.py ../model/ppocrv4_rec.onnx rk3588
四、應用編譯
確定模型正常轉(zhuǎn)換完成后,需要先將CPP目錄的例程編譯出來,然后將編譯出來的文件夾推送到開發(fā)板中進行板端部署推理。進入rknn_model_zoo-2.1.0路徑下,先執(zhí)行環(huán)境變量,然后編譯例程。
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work$ export GCC_COMPILER=/home/elf/work/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu (RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/rknn_model_zoo-2.1.0$ ./build-linux.sh -t rk3588 -a aarch64 -d PPOCR-System
五、板卡部署及測試
編譯完成會在modelzoo目錄下的install/rk3588_linux_aarch64/rknn_PPOCR-System_demo生成可執(zhí)行文件、庫文件、模型文件等。將模型和可執(zhí)行文件等都拷貝到開發(fā)板上。
注意:庫文件拷貝到板卡的/usr/lib/目錄,可執(zhí)行文件、模型以及測試文件可以拷貝到板卡任意路徑。
elf@elf2-desktop:~$ ./rknn_ppocr_system_demo model/ppocrv4_det.rknn model/ppocrv4_rec.rknn model/test.jpg model input num: 1, output num: 1 input tensors: index=0, name=x, n_dims=4, dims=[1, 480, 480, 3], n_elems=691200, size=691200, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-14, scale=0.018658 output tensors: index=0, name=sigmoid_0.tmp_0, n_dims=4, dims=[1, 1, 480, 480], n_elems=230400, size=230400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 model is NHWC input fmt model input height=480, width=480, channel=3 model input num: 1, output num: 1 input tensors: index=0, name=x, n_dims=4, dims=[1, 48, 320, 3], n_elems=46080, size=92160, fmt=NHWC, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000 output tensors: index=0, name=softmax_11.tmp_0, n_dims=3, dims=[1, 40, 6625, 0], n_elems=265000, size=530000, fmt=UNDEFINED, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000 model is NHWC input fmt model input height=48, width=320, channel=3 origin size=500x500 crop size=496x496 input image: 500 x 500, subsampling: 4:4:4, colorspace: YCbCr, orientation: 1 src width=500 height=500 fmt=0x1 virAddr=0x0x39c28320 fd=0 dst width=480 height=480 fmt=0x1 virAddr=0x0x39cdf4e0 fd=0 color=0x0 rga_api version 1.10.1_[0] Error on improcess STATUS=-1 RGA error message: Unsupported function: src unsupport width stride 500, rgb888 width stride should be 16 aligned! try convert image use cpu finish DRAWING OBJECT [0] @ [(28, 37), (302, 39), (301, 71), (27, 69)] regconize result: 純臻營養(yǎng)護發(fā)素, score=0.998116 [1] @ [(26, 82), (172, 82), (172, 104), (26, 104)] regconize result: 產(chǎn)品信息/參數(shù), score=0.994699 [2] @ [(27, 112), (332, 112), (332, 134), (27, 134)] regconize result: (45元/每公斤,100公斤起訂), score=0.961024 [3] @ [(28, 142), (282, 144), (281, 163), (27, 162)] regconize result: 每瓶22元,1000瓶起訂), score=0.989327 [4] @ [(25, 179), (298, 177), (300, 194), (26, 195)] regconize result: 【品牌】:代加工方式/OEMODM, score=0.986156 [5] @ [(26, 209), (234, 209), (234, 228), (26, 228)] regconize result: 【品名】:純臻營養(yǎng)護發(fā)素, score=0.996216 [6] @ [(26, 240), (241, 240), (241, 259), (26, 259)] regconize result: 【產(chǎn)品編號】:YM-X-3011, score=0.983581 [7] @ [(413, 233), (429, 233), (429, 305), (413, 305)] regconize result: ODMOEM, score=0.992676 [8] @ [(25, 270), (179, 270), (179, 289), (25, 289)] regconize result: 【凈含量】:220ml, score=0.990945 [9] @ [(26, 303), (252, 303), (252, 321), (26, 321)] regconize result: 【適用人群】:適合所有膚質(zhì), score=0.995380 [10] @ [(26, 333), (341, 333), (341, 351), (26, 351)] regconize result: 【主要成分】:鯨蠟硬脂醇、燕麥β-葡聚, score=0.958008 [11] @ [(27, 363), (283, 365), (282, 384), (26, 382)] regconize result: 糖、椰油酰胺丙基甜菜堿、泛酸, score=0.963414 [12] @ [(368, 368), (476, 368), (476, 388), (368, 388)] regconize result: (成品包材), score=0.989339 [13] @ [(27, 394), (362, 396), (361, 414), (26, 413)] regconize result: 【主要功能】:可緊致頭發(fā)磷層,從而達到, score=0.973067 [14] @ [(27, 428), (371, 428), (371, 446), (27, 446)] regconize result: 即時持久改善頭發(fā)光澤的效果,給干燥的頭, score=0.997995 [15] @ [(27, 459), (136, 459), (136, 478), (27, 478)] regconize result: 發(fā)足夠的滋養(yǎng), score=0.998616 SAVE TO ./out.jpg write_image path: ./out.jpg width=500 height=500 channel=3 data=0x39c28320
至此,就已完成PPOC在ELF 2開發(fā)板上的本地部署。希望本次實踐能對屏幕前的各位小伙伴有所幫助,如有任何問題,歡迎隨時交流。
-
單片機
+關(guān)注
關(guān)注
6078文章
45534瀏覽量
672268 -
嵌入式
+關(guān)注
關(guān)注
5203文章
20552瀏覽量
335800 -
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
614瀏覽量
30031 -
嵌入式開發(fā)板
+關(guān)注
關(guān)注
5文章
112瀏覽量
19833 -
RK3588
+關(guān)注
關(guān)注
8文章
571瀏覽量
7480
發(fā)布評論請先 登錄
ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開發(fā)板上進行根系統(tǒng)的定制
ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開發(fā)板上進行UART引腳復用配置
ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開發(fā)板實現(xiàn)I2C功能復用
飛凌精靈(ElfBoard)技術(shù)貼|如何在ELF-RK3506開發(fā)板上實現(xiàn)GPIO復用
添越智創(chuàng)基于 RK3588 開發(fā)板部署測試 DeepSeek 模型全攻略
迅為RK3588開發(fā)板使用RKNN-Toolkit-lite2運行測試程序
rk3588有哪些開發(fā)板?
技術(shù)分享|iTOP-RK3588開發(fā)板Ubuntu20系統(tǒng)旋轉(zhuǎn)屏幕方案
ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開發(fā)板用戶空間更換開機Logo
ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開發(fā)板實現(xiàn)GPIO功能復用
ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開發(fā)板上完成PPOC本地化部署
評論