通用文字识别(中英文)
1 介绍
1.1 简介
通用文字识别样例基于Vision SDK进行开发,主要支持识别文本小图上的中英文字样。
1.2 支持的产品
本项目支持昇腾Atlas 300I pro、Atlas 300V pro。
1.3 支持的版本
本样例配套的Vision SDK版本、CANN版本、Driver/Firmware版本如下所示:
| Vision SDK版本 | CANN版本 | Driver/Firmware版本 |
|---|---|---|
| 26.0.0 | 9.0.0 | 26.0.RC1 |
1.4 三方依赖
| 软件名称 | 版本 |
|---|---|
| paddle2onnx | 1.3.1 |
| paddlepaddle | 2.6.0 |
| onnx | 1.14.1 |
1.4 代码目录结构说明
|-- mxVision
| |-- GeneralTextRecognition
| | |-- C++
| | | |-- CMakeLists.txt
| | | |-- main.cpp
| | | |-- run.sh
| | |-- License.md
| | |-- README.md
| | |-- THIRD PARTY OPEN SOURCE SOFTWARE NOTICE.md
| | |-- data
| | | |-- OCR.pipeline
| | | |-- config
| | | | |-- cls
| | | | | |-- cls.cfg
| | | | | |-- ic15.names
| | | | |-- det
| | | | | |-- det.cfg
| | | | |-- rec
| | | | |-- rec_cfg.txt
| | | |-- model
| | | |-- cls_aipp.cfg
| | | |-- det_aipp.cfg
| | | |-- rec_aipp.cfg
| | | |-- run.sh
| | |-- main_ocr.py
| | |-- src
| | |-- Clipper
| | | |-- CMakeLists.txt
| | |-- DBPostProcess
| | | |-- CMakeLists.txt
| | | |-- DBPostProcess.cpp
| | | |-- DBPostProcess.h
1.5 相关约束
本项目支持通用文字识别,支持图片格式为jpg、jpeg、png。
2 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh # toolkit默认安装路径,根据实际安装路径修改
source /usr/local/mxVision/set_env.sh # sdk安装路径,根据实际安装路径修改
3 准备模型
步骤1: 模型下载。
本样例采用PaddleOCR的release/2.1分支作为基准,预训练模型请下载"PP-OCR 2.0 series model list(Update on Dec 15)"->"Chinese and English general OCR model (143.4M)" 对应的三个推理模型:
步骤2: 将下载的3个模型tar包移动至<Project_Root>/data/model目录下。其中,Project_Root为样例代码根目录。
步骤3: 执行<Project_Root>/data/model下的run.sh脚本,等待片刻。
bash run.sh
如果执行成功,界面上会显示3段如下内容(非连续显示),表示om模型已经转换完成:
ATC start working now, please wait for a moment.
.....
ATC run success, welcome to the next use.
4 编译与运行
4.1 编译准备
步骤1: 编译clipper动态库。
在Clipper网站下载clipper_ver6.4.2.zip压缩包,解压后将路径cpp下的 clipper.hpp、clipper.cpp 到<Project_Root>/src/Clipper目录下。在该目录依次执行如下命令:
mkdir build
cd build
cmake ..
make -j
make install
步骤2: 编译后处理动态库DBPostProcess。
进入到<Project_Root>/src/DBPostProcess路径目录下。依次执行如下命令:
mkdir build
cd build
cmake ..
make -j
make install
步骤3: 权限设置。
DB后处理目前支持两种缩放方式:拉伸缩放Resizer_Stretch、 等比例缩放Resizer_KeepAspectRatio_Fit。 因此,需要确保编译生成的libclipper.so和libDBPostProcess.so文件权限不高于640, 如果文件权限不满足要求,
进入到<Project_Root>/lib目录, 执行如下命令修改文件权限:
chmod 640 libclipper.so libDBPostProcess.so
执行命令,添加环境变量,其中<Project_Root>需替换为实际项目路径:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<Project_Root>/lib
步骤4: 准备字典数据。
下载文字识别模型的字典, 由于样例使用的CRNN模型,对应的字典从1开始,0代表为空,请在下载的字典首行添加一行"blank",并将修改后的字典保存到<Project_Root>/data/config/rec目录,文件命名为ppocr_keys_v1.txt, 修改示例如下:
blank
'
疗
绚
诚
娇
.
.
.
步骤5: 修改配置根目录下的配置文件。
将<Project_Root>/data/OCR.pipeline内所有deviceId字段值替换为实际使用的device的id值,可用的deviceId值可以使用如下命令查看:
npu-smi info
文本检测使用的DBNet后处理由步骤2编译得到,默认生成到"<Project_Root>/lib/libDBpostprocess.so",如有修改,请修改<Project_Root>/data/OCR.pipeline的对应配置,OCR.pipeline示例如下:
# 44行 "modelPath": "<Project_Root>/data/model/Dynamic24_ch_ppocr_server_v2.0_det_infer.om"
.
.
# 55行 "postProcessConfigPath": "<Project_Root>/data/config/det/det.cfg",
# 56行 "postProcessLibPath": "<Project_Root>/lib/libDBPostProcess.so"
.
.
# 199行 "labelPath": "<Project_Root>/data/config/rec/ppocr_keys_v1.txt",
最后,请将pipline下的所有<Project_Root>路径更换为实际的项目路径,例如/root/GeneralTextRecognition/data/config/rec/rec_cfg.txt,/root/GeneralTextRecognition为实际项目路径。
步骤6: 准备测试图片,在根目录下创建input_data目录,并将包含中英文的JPG或PNG图片拷贝到input_data目录下
4.2 c++样例运行
步骤1: 按照4.1小节中完成编译准备。
步骤2: 执行样例程序。
进入到<Project_Root>/C++目录,执行如下命令:
bash run.sh
步骤3: 查看结果。
运行完成后,会通过屏幕输出文字识别结果,示例如下:
[OCR0] GetResult ... {"MxpiTextsInfo": [{"text":["识别结果111"]}]} ..
4.2 Python样例运行
步骤1: 按照4.1小节中完成编译准备。
步骤2: 执行样例程序。
提供简易python运行样例,进入到<Project_Root>/python目录,执行如下命令:
python3 main_ocr.py
步骤3: 查看结果。
运行完成后,会通过屏幕输出文字识别结果,示例如下:
... {"MxpiTextsInfo": [{"text":["识别结果111"]}]} ..