English | 简体中文
虽然PaddleOCR提供了TensorRT部署支持, 但是其代码比较复杂, 比较难解耦. 本项目提供了相对简洁的代码, 展示如何使用TensorRT C++ API和ONNX进行PaddleOCR文字识别算法的部署.
- Ubuntu 18.04
- CUDA 10.2
- cuDNN 8.4
- OpenCV 3.4.15
- TensorRT 8.4.1.5
首先需要将Paddle训练模型导出为Paddle推理模型, 再将推理模型转为ONNX模型, 这些在PaddleOCR官方文档有详细过程.
本项目采用的示例模型是官方模型ch_PP-OCRv2_rec和ch_PP-OCRv3_rec (官方文档-模型列表), 直接下载列表中对应的推理模型并转为ONNX模型.
- 在CMakeLists.txt中14-15行设置自己路径。
# TODO: Specify the path to TensorRT root dir
set(TensorRT_DIR "/usr/yyx/tensorrt/TensorRT/")
- 根据需要在main.cpp中14-23行修改参数.
// TODO: Specify your precision here.
options.FP16 = false;
// TODO: Specify your input dimension here.
options.inputDimension = {3,48,320}; // Modify to {3,32,320} when using ppocrv2
// TODO: Specify your character_dict here.
std::string label_path = "../data/ppocr_keys_v1.txt";
// TODO: Specify your test image here.
const std::string inputImage = "../data/word_2.png";
// TODO: Specify your model here.
const std::string onnxModelpath = "../data/modelv3.onnx"; // Modify to "../data/modelv2.onnx" when using ppocrv2
- 编译运行
mkdir build
cd build
cmake ..
make
./demo
本项目使用ch_PP-OCRv2_rec官方推理模型导出为ONNX后在data/word_2.png上的推理结果:
yourself score: 0.95626300573349
ch_PP-OCRv2_rec官方训练模型采用PaddleOCR库中tools/infer_rec.py在data/word_2.png上的推理结果:
{"Student": {"label": "yourself", "score": 0.9562630653381348}
"Teacher": {"label": "yourself", "score": 0.9850824475288391}}
本项目使用ch_PP-OCRv3_rec官方推理模型导出为ONNX后在data/word_2.png上的推理结果:
yourself score: 0.9922693371772766
ch_PP-OCRv3_rec官方训练模型采用PaddleOCR库中tools/infer_rec.py在data/word_2.png上的推理结果:
{"Student": {"label": "yourself", "score": 0.9922693371772766}
"Teacher": {"label": "yourself", "score": 0.9903509020805359}}
-
tensorrt-cpp-api 提供了简洁的TensorRT C++ API教程.
-
PaddleOCRv2_TensorRT 提供部分PaddleOCR预处理和后处理方法的C++实现.
-
PaddleOCR 打造了一套丰富且实用的OCR工具库, 助力开发者训练出更好的模型, 并应用落地.