1.把飞桨OCR推理模型转换为ONNX模型
主要有两种使用方式:
-
方法一:在线转换;
- VisualDL - 在线的Paddle2ONNX模型转换。
- 魔塔
- huggingface
-
方法二:离线转换,pip安装工具,即可本地转换使用。
- 借助
paddle2onnx
库实现 - 借助PaddleOCRModelConverter转换
- 借助
飞桨模型地址示例:
-
https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_infer.tar
-
https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_det_infer.tar
-
https://raw.githubusercontent.com/PaddlePaddle/PaddleOCR/release/2.7/ppocr/utils/ppocr_keys_v1.txt
2.ONNX模型的pre-process和post-process
python版入口代码:https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/model_zoo/ocr/infer.py
python文本检测:https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/model_zoo/ocr/utils/predict_det.py
python文本识别:https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/model_zoo/ocr/utils/predict_rec.py
java版本:https://github.com/mymagicpower/AIAS/tree/main/1_image_sdks/ocr_v4_sdk
下面是一些DJL中的pre-post的pipeline可以借鉴
NDArray array = image.toNDArray(manager);
Pipeline pipeline = new Pipeline();
pipeline.add(new CenterCrop());
pipeline.add(new Resize(224, 224));
pipeline.add(new ToTensor());
NDList list = pipeline.transform(new NDList(array));
线程配置
您可以在 Criteria 中使用以下设置进行线程优化
Criteria.builder()
.optOption("interOpNumThreads", <num_of_thread>)
.optOption("intraOpNumThreads", <num_of_thread>)
...
提示:一开始将两者都设置为1以查看性能。然后,将其中之一设置为total_cores
/total_java_inference_thread
以查看性能如何。
3.推理
方式一 RapidOCR
将PaddleOCR中的模型转换为ONNX格式,使用Python/C++/Java/C#
将它移植到各个平台。
Github: https://github.com/RapidAI/RapidOCR
Java版本:https://github.com/MyMonsterCat/RapidOcr-Java
在线demo: https://www.modelscope.cn/studios/liekkas/RapidOCRDemo/summary
方式二 DJL
直接看这个repo:https://github.com/mymagicpower/AIAS/tree/main/1_image_sdks/ocr_v4_sdk