diff --git a/docs/api_docs/python/ocr.md b/docs/api_docs/python/ocr.md
index 4174694af..622918203 100644
--- a/docs/api_docs/python/ocr.md
+++ b/docs/api_docs/python/ocr.md
@@ -1,3 +1,41 @@
# OCR API
-comming soon...
+## fastdeploy.vision.ocr.DBDetector
+
+```{eval-rst}
+.. autoclass:: fastdeploy.vision.ocr.DBDetector
+ :members:
+ :inherited-members:
+```
+
+## fastdeploy.vision.ocr.Classifier
+
+```{eval-rst}
+.. autoclass:: fastdeploy.vision.ocr.Classifier
+ :members:
+ :inherited-members:
+```
+
+## fastdeploy.vision.ocr.Recognizer
+
+```{eval-rst}
+.. autoclass:: fastdeploy.vision.ocr.Recognizer
+ :members:
+ :inherited-members:
+```
+
+## fastdeploy.vision.ocr.PPOCRv2
+
+```{eval-rst}
+.. autoclass:: fastdeploy.vision.ocr.PPOCRv2
+ :members:
+ :inherited-members:
+```
+
+## fastdeploy.vision.ocr.PPOCRv3
+
+```{eval-rst}
+.. autoclass:: fastdeploy.vision.ocr.PPOCRv3
+ :members:
+ :inherited-members:
+```
diff --git a/docs/api_docs/python/requirements.txt b/docs/api_docs/python/requirements.txt
index 73b4a140f..4f8fa23fe 100644
--- a/docs/api_docs/python/requirements.txt
+++ b/docs/api_docs/python/requirements.txt
@@ -3,3 +3,4 @@ recommonmark
sphinx_markdown_tables
sphinx_rtd_theme
furo
+myst_parser
diff --git a/examples/vision/ocr/PP-OCRv2/cpp/README.md b/examples/vision/ocr/PP-OCRv2/cpp/README.md
index f612d6601..654787256 100644
--- a/examples/vision/ocr/PP-OCRv2/cpp/README.md
+++ b/examples/vision/ocr/PP-OCRv2/cpp/README.md
@@ -1,6 +1,6 @@
-# PPOCRSystemv2 C++部署示例
+# PPOCRv2 C++部署示例
-本目录下提供`infer.cc`快速完成PPOCRSystemv2在CPU/GPU,以及GPU上通过TensorRT加速部署的示例。
+本目录下提供`infer.cc`快速完成PPOCRv2在CPU/GPU,以及GPU上通过TensorRT加速部署的示例。
在部署前,需确认以下两个步骤
@@ -19,14 +19,14 @@ make -j
# 下载模型,图片和字典文件
-wget https://bj.bcebos.com/paddlehub/fastdeploy/ch_PP-OCRv2_det_infer.tar.gz
-tar -xvf ch_PP-OCRv2_det_infer.tar.gz
+wget https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_infer.tar
+tar -xvf ch_PP-OCRv2_det_infer.tar
-wget https://bj.bcebos.com/paddlehub/fastdeploy/ch_ppocr_mobile_v2.0_cls_infer.tar.gz
-tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar.gz
+https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
+tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar
-wget https://bj.bcebos.com/paddlehub/fastdeploy/ch_PP-OCRv2_rec_infer.tar.gz
-tar -xvf ch_PP-OCRv2_rec_infer.tar.gz
+wgethttps://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_infer.tar
+tar -xvf ch_PP-OCRv2_rec_infer.tar
wget https://gitee.com/paddlepaddle/PaddleOCR/raw/release/2.6/doc/imgs/12.jpg
@@ -48,17 +48,17 @@ wget https://gitee.com/paddlepaddle/PaddleOCR/raw/release/2.6/ppocr/utils/ppocr_
-## PPOCRSystemv2 C++接口
+## PPOCRv2 C++接口
-### PPOCRSystemv2类
+### PPOCRv2类
```
-fastdeploy::application::ocrsystem::PPOCRSystemv2(fastdeploy::vision::ocr::DBDetector* det_model,
+fastdeploy::pipeline::PPOCRv2(fastdeploy::vision::ocr::DBDetector* det_model,
fastdeploy::vision::ocr::Classifier* cls_model,
fastdeploy::vision::ocr::Recognizer* rec_model);
```
-PPOCRSystemv2 的初始化,由检测,分类和识别模型串联构成
+PPOCRv2 的初始化,由检测,分类和识别模型串联构成
**参数**
@@ -67,10 +67,10 @@ PPOCRSystemv2 的初始化,由检测,分类和识别模型串联构成
> * **Recognizer**(model): OCR中的识别模型
```
-fastdeploy::application::ocrsystem::PPOCRSystemv2(fastdeploy::vision::ocr::DBDetector* det_model,
+fastdeploy::pipeline::PPOCRv2(fastdeploy::vision::ocr::DBDetector* det_model,
fastdeploy::vision::ocr::Recognizer* rec_model);
```
-PPOCRSystemv2 的初始化,由检测,识别模型串联构成(无分类器)
+PPOCRv2 的初始化,由检测,识别模型串联构成(无分类器)
**参数**
diff --git a/examples/vision/ocr/PP-OCRv2/cpp/infer.cc b/examples/vision/ocr/PP-OCRv2/cpp/infer.cc
index bf0ff5f27..9d628689b 100644
--- a/examples/vision/ocr/PP-OCRv2/cpp/infer.cc
+++ b/examples/vision/ocr/PP-OCRv2/cpp/infer.cc
@@ -37,12 +37,12 @@ void InitAndInfer(const std::string& det_model_dir, const std::string& cls_model
assert(cls_model.Initialized());
assert(rec_model.Initialized());
- // The classification model is optional, so the OCR system can also be connected in series as follows
- // auto ocr_system_v2 = fastdeploy::application::ocrsystem::PPOCRSystemv2(&det_model, &rec_model);
- auto ocr_system_v2 = fastdeploy::application::ocrsystem::PPOCRSystemv2(&det_model, &cls_model, &rec_model);
+ // The classification model is optional, so the PP-OCR can also be connected in series as follows
+ // auto ppocr_v2 = fastdeploy::pipeline::PPOCRv2(&det_model, &rec_model);
+ auto ppocr_v2 = fastdeploy::pipeline::PPOCRv2(&det_model, &cls_model, &rec_model);
- if(!ocr_system_v2.Initialized()){
- std::cerr << "Failed to initialize OCR system." << std::endl;
+ if(!ppocr_v2.Initialized()){
+ std::cerr << "Failed to initialize PP-OCR." << std::endl;
return;
}
@@ -50,14 +50,14 @@ void InitAndInfer(const std::string& det_model_dir, const std::string& cls_model
auto im_bak = im.clone();
fastdeploy::vision::OCRResult result;
- if (!ocr_system_v2.Predict(&im, &result)) {
+ if (!ppocr_v2.Predict(&im, &result)) {
std::cerr << "Failed to predict." << std::endl;
return;
}
std::cout << result.Str() << std::endl;
- auto vis_im = fastdeploy::vision::Visualize::VisOcr(im_bak, result);
+ auto vis_im = fastdeploy::vision::VisOcr(im_bak, result);
cv::imwrite("vis_result.jpg", vis_im);
std::cout << "Visualized result saved in ./vis_result.jpg" << std::endl;
}
diff --git a/examples/vision/ocr/PP-OCRv2/python/README.md b/examples/vision/ocr/PP-OCRv2/python/README.md
index ee845f2ca..c51f8781f 100644
--- a/examples/vision/ocr/PP-OCRv2/python/README.md
+++ b/examples/vision/ocr/PP-OCRv2/python/README.md
@@ -1,23 +1,23 @@
-# PPOCRSystemv2 Python部署示例
+# PPOCRv2 Python部署示例
在部署前,需确认以下两个步骤
- 1. 软硬件环境满足要求,参考[FastDeploy环境要求](../../../../../docs/cn/build_and_install/download_prebuilt_libraries.md)
- 2. FastDeploy Python whl包安装,参考[FastDeploy Python安装](../../../../../docs/cn/build_and_install/download_prebuilt_libraries.md)
-本目录下提供`infer.py`快速完成PPOCRSystemv2在CPU/GPU,以及GPU上通过TensorRT加速部署的示例。执行如下脚本即可完成
+本目录下提供`infer.py`快速完成PPOCRv2在CPU/GPU,以及GPU上通过TensorRT加速部署的示例。执行如下脚本即可完成
```
# 下载模型,图片和字典文件
-wget https://bj.bcebos.com/paddlehub/fastdeploy/ch_PP-OCRv2_det_infer.tar.gz
-tar -xvf ch_PP-OCRv2_det_infer.tar.gz
+wget https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_infer.tar
+tar -xvf ch_PP-OCRv2_det_infer.tar
-wget https://bj.bcebos.com/paddlehub/fastdeploy/ch_ppocr_mobile_v2.0_cls_infer.tar.gz
-tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar.gz
+https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
+tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar
-wget https://bj.bcebos.com/paddlehub/fastdeploy/ch_PP-OCRv2_rec_infer.tar.gz
-tar -xvf ch_PP-OCRv2_rec_infer.tar.gz
+wgethttps://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_infer.tar
+tar -xvf ch_PP-OCRv2_rec_infer.tar
wget https://gitee.com/paddlepaddle/PaddleOCR/raw/release/2.6/doc/imgs/12.jpg
@@ -39,12 +39,12 @@ python infer.py --det_model ch_PP-OCRv2_det_infer --cls_model ch_ppocr_mobile_v2
运行完成可视化结果如下图所示
-## PPOCRSystemv2 Python接口
+## PPOCRv2 Python接口
```
-fd.vision.ocr.PPOCRSystemv2(det_model=det_model, cls_model=cls_model, rec_model=rec_model)
+fd.vision.ocr.PPOCRv2(det_model=det_model, cls_model=cls_model, rec_model=rec_model)
```
-PPOCRSystemv2的初始化,输入的参数是检测模型,分类模型和识别模型,其中cls_model可选,如无需求,可设置为None
+PPOCRv2的初始化,输入的参数是检测模型,分类模型和识别模型,其中cls_model可选,如无需求,可设置为None
**参数**
@@ -55,7 +55,7 @@ PPOCRSystemv2的初始化,输入的参数是检测模型,分类模型和识别
### predict函数
> ```
-> result = ocr_system.predict(im)
+> result = ppocr_v2.predict(im)
> ```
>
> 模型预测接口,输入是一张图片
diff --git a/examples/vision/ocr/PP-OCRv2/python/infer.py b/examples/vision/ocr/PP-OCRv2/python/infer.py
index 0eaf1bd84..984ede8e7 100644
--- a/examples/vision/ocr/PP-OCRv2/python/infer.py
+++ b/examples/vision/ocr/PP-OCRv2/python/infer.py
@@ -110,15 +110,15 @@ rec_model = fd.vision.ocr.Recognizer(
rec_label_file,
runtime_option=runtime_option)
-# 创建OCR系统,串联3个模型,其中cls_model可选,如无需求,可设置为None
-ocr_system = fd.vision.ocr.PPOCRSystemv2(
+# 创建PP-OCR,串联3个模型,其中cls_model可选,如无需求,可设置为None
+ppocr_v2 = fd.vision.ocr.PPOCRv2(
det_model=det_model, cls_model=cls_model, rec_model=rec_model)
# 预测图片准备
im = cv2.imread(args.image)
#预测并打印结果
-result = ocr_system.predict(im)
+result = ppocr_v2.predict(im)
print(result)
diff --git a/examples/vision/ocr/PP-OCRv3/cpp/README.md b/examples/vision/ocr/PP-OCRv3/cpp/README.md
index 91b0fea0d..16a628876 100644
--- a/examples/vision/ocr/PP-OCRv3/cpp/README.md
+++ b/examples/vision/ocr/PP-OCRv3/cpp/README.md
@@ -1,6 +1,6 @@
-# PPOCRSystemv3 C++部署示例
+# PPOCRv3 C++部署示例
-本目录下提供`infer.cc`快速完成PPOCRSystemv3在CPU/GPU,以及GPU上通过TensorRT加速部署的示例。
+本目录下提供`infer.cc`快速完成PPOCRv3在CPU/GPU,以及GPU上通过TensorRT加速部署的示例。
在部署前,需确认以下两个步骤
@@ -22,8 +22,8 @@ make -j
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar
tar -xvf ch_PP-OCRv3_det_infer.tar
-wget https://bj.bcebos.com/paddlehub/fastdeploy/ch_ppocr_mobile_v2.0_cls_infer.tar.gz
-tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar.gz
+https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
+tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar
tar -xvf ch_PP-OCRv3_rec_infer.tar
@@ -48,17 +48,17 @@ wget https://gitee.com/paddlepaddle/PaddleOCR/raw/release/2.6/ppocr/utils/ppocr_
-## PPOCRSystemv3 C++接口
+## PPOCRv3 C++接口
-### PPOCRSystemv3类
+### PPOCRv3类
```
-fastdeploy::application::ocrsystem::PPOCRSystemv3(fastdeploy::vision::ocr::DBDetector* det_model,
+fastdeploy::pipeline::PPOCRv3(fastdeploy::vision::ocr::DBDetector* det_model,
fastdeploy::vision::ocr::Classifier* cls_model,
fastdeploy::vision::ocr::Recognizer* rec_model);
```
-PPOCRSystemv3 的初始化,由检测,分类和识别模型串联构成
+PPOCRv3 的初始化,由检测,分类和识别模型串联构成
**参数**
@@ -67,10 +67,10 @@ PPOCRSystemv3 的初始化,由检测,分类和识别模型串联构成
> * **Recognizer**(model): OCR中的识别模型
```
-fastdeploy::application::ocrsystem::PPOCRSystemv3(fastdeploy::vision::ocr::DBDetector* det_model,
+fastdeploy::pipeline::PPOCRv3(fastdeploy::vision::ocr::DBDetector* det_model,
fastdeploy::vision::ocr::Recognizer* rec_model);
```
-PPOCRSystemv3 的初始化,由检测,识别模型串联构成(无分类器)
+PPOCRv3 的初始化,由检测,识别模型串联构成(无分类器)
**参数**
diff --git a/examples/vision/ocr/PP-OCRv3/cpp/infer.cc b/examples/vision/ocr/PP-OCRv3/cpp/infer.cc
index a48fb6bc0..333dbaa3f 100644
--- a/examples/vision/ocr/PP-OCRv3/cpp/infer.cc
+++ b/examples/vision/ocr/PP-OCRv3/cpp/infer.cc
@@ -37,12 +37,12 @@ void InitAndInfer(const std::string& det_model_dir, const std::string& cls_model
assert(cls_model.Initialized());
assert(rec_model.Initialized());
- // The classification model is optional, so the OCR system can also be connected in series as follows
- // auto ocr_system_v3 = fastdeploy::application::ocrsystem::PPOCRSystemv3(&det_model, &rec_model);
- auto ocr_system_v3 = fastdeploy::application::ocrsystem::PPOCRSystemv3(&det_model, &cls_model, &rec_model);
+ // The classification model is optional, so the PP-OCR can also be connected in series as follows
+ // auto ppocr_v3 = fastdeploy::pipeline::PPOCRv3(&det_model, &rec_model);
+ auto ppocr_v3 = fastdeploy::pipeline::PPOCRv3(&det_model, &cls_model, &rec_model);
- if(!ocr_system_v3.Initialized()){
- std::cerr << "Failed to initialize OCR system." << std::endl;
+ if(!ppocr_v3.Initialized()){
+ std::cerr << "Failed to initialize PP-OCR." << std::endl;
return;
}
@@ -50,14 +50,14 @@ void InitAndInfer(const std::string& det_model_dir, const std::string& cls_model
auto im_bak = im.clone();
fastdeploy::vision::OCRResult result;
- if (!ocr_system_v3.Predict(&im, &result)) {
+ if (!ppocr_v3.Predict(&im, &result)) {
std::cerr << "Failed to predict." << std::endl;
return;
}
std::cout << result.Str() << std::endl;
- auto vis_im = fastdeploy::vision::Visualize::VisOcr(im_bak, result);
+ auto vis_im = fastdeploy::vision::VisOcr(im_bak, result);
cv::imwrite("vis_result.jpg", vis_im);
std::cout << "Visualized result saved in ./vis_result.jpg" << std::endl;
}
diff --git a/examples/vision/ocr/PP-OCRv3/python/README.md b/examples/vision/ocr/PP-OCRv3/python/README.md
index 0c33e28b2..0fda05e28 100644
--- a/examples/vision/ocr/PP-OCRv3/python/README.md
+++ b/examples/vision/ocr/PP-OCRv3/python/README.md
@@ -1,11 +1,11 @@
-# PPOCRSystemv3 Python部署示例
+# PPOCRv3 Python部署示例
在部署前,需确认以下两个步骤
- 1. 软硬件环境满足要求,参考[FastDeploy环境要求](../../../../../docs/cn/build_and_install/download_prebuilt_libraries.md)
- 2. FastDeploy Python whl包安装,参考[FastDeploy Python安装](../../../../../docs/cn/build_and_install/download_prebuilt_libraries.md)
-本目录下提供`infer.py`快速完成PPOCRSystemv3在CPU/GPU,以及GPU上通过TensorRT加速部署的示例。执行如下脚本即可完成
+本目录下提供`infer.py`快速完成PPOCRv3在CPU/GPU,以及GPU上通过TensorRT加速部署的示例。执行如下脚本即可完成
```
@@ -13,8 +13,8 @@
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar
tar xvf ch_PP-OCRv3_det_infer.tar
-wget https://bj.bcebos.com/paddlehub/fastdeploy/ch_ppocr_mobile_v2.0_cls_infer.tar.gz
-tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar.gz
+https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
+tar -xvf ch_ppocr_mobile_v2.0_cls_infer.tar
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar
tar xvf ch_PP-OCRv3_rec_infer.tar
@@ -38,12 +38,12 @@ python infer.py --det_model ch_PP-OCRv3_det_infer --cls_model ch_ppocr_mobile_v2
运行完成可视化结果如下图所示
-## PPOCRSystemv3 Python接口
+## PPOCRv3 Python接口
```
-fd.vision.ocr.PPOCRSystemv3(det_model=det_model, cls_model=cls_model, rec_model=rec_model)
+fd.vision.ocr.PPOCRv3(det_model=det_model, cls_model=cls_model, rec_model=rec_model)
```
-PPOCRSystemv3的初始化,输入的参数是检测模型,分类模型和识别模型,其中cls_model可选,如无需求,可设置为None
+PPOCRv3的初始化,输入的参数是检测模型,分类模型和识别模型,其中cls_model可选,如无需求,可设置为None
**参数**
@@ -54,7 +54,7 @@ PPOCRSystemv3的初始化,输入的参数是检测模型,分类模型和识别
### predict函数
> ```
-> result = ocr_system.predict(im)
+> result = ppocr_v3.predict(im)
> ```
>
> 模型预测接口,输入是一张图片
diff --git a/examples/vision/ocr/PP-OCRv3/python/infer.py b/examples/vision/ocr/PP-OCRv3/python/infer.py
index 2332a2e36..46df9c507 100644
--- a/examples/vision/ocr/PP-OCRv3/python/infer.py
+++ b/examples/vision/ocr/PP-OCRv3/python/infer.py
@@ -110,15 +110,15 @@ rec_model = fd.vision.ocr.Recognizer(
rec_label_file,
runtime_option=runtime_option)
-# 创建OCR系统,串联3个模型,其中cls_model可选,如无需求,可设置为None
-ocr_system = fd.vision.ocr.PPOCRSystemv3(
+# 创建PP-OCR,串联3个模型,其中cls_model可选,如无需求,可设置为None
+ppocr_v3 = fd.vision.ocr.PPOCRv3(
det_model=det_model, cls_model=cls_model, rec_model=rec_model)
# 预测图片准备
im = cv2.imread(args.image)
#预测并打印结果
-result = ocr_system.predict(im)
+result = ppocr_v3.predict(im)
print(result)
diff --git a/fastdeploy/vision.h b/fastdeploy/vision.h
index 8e1358d8a..d01e2e15c 100755
--- a/fastdeploy/vision.h
+++ b/fastdeploy/vision.h
@@ -42,8 +42,8 @@
#include "fastdeploy/vision/matting/ppmatting/ppmatting.h"
#include "fastdeploy/vision/ocr/ppocr/classifier.h"
#include "fastdeploy/vision/ocr/ppocr/dbdetector.h"
-#include "fastdeploy/vision/ocr/ppocr/ppocr_system_v2.h"
-#include "fastdeploy/vision/ocr/ppocr/ppocr_system_v3.h"
+#include "fastdeploy/vision/ocr/ppocr/ppocr_v2.h"
+#include "fastdeploy/vision/ocr/ppocr/ppocr_v3.h"
#include "fastdeploy/vision/ocr/ppocr/recognizer.h"
#include "fastdeploy/vision/segmentation/ppseg/model.h"
#endif
diff --git a/fastdeploy/vision/ocr/ocr_pybind.cc b/fastdeploy/vision/ocr/ocr_pybind.cc
index f2e25b49c..b1e234875 100644
--- a/fastdeploy/vision/ocr/ocr_pybind.cc
+++ b/fastdeploy/vision/ocr/ocr_pybind.cc
@@ -17,13 +17,13 @@
namespace fastdeploy {
void BindPPOCRModel(pybind11::module& m);
-void BindPPOCRSystemv3(pybind11::module& m);
-void BindPPOCRSystemv2(pybind11::module& m);
+void BindPPOCRv3(pybind11::module& m);
+void BindPPOCRv2(pybind11::module& m);
void BindOcr(pybind11::module& m) {
auto ocr_module = m.def_submodule("ocr", "Module to deploy OCR models");
BindPPOCRModel(ocr_module);
- BindPPOCRSystemv3(ocr_module);
- BindPPOCRSystemv2(ocr_module);
+ BindPPOCRv3(ocr_module);
+ BindPPOCRv2(ocr_module);
}
} // namespace fastdeploy
diff --git a/fastdeploy/vision/ocr/ppocr/classifier.h b/fastdeploy/vision/ocr/ppocr/classifier.h
index 110ef7f37..f810f98a3 100644
--- a/fastdeploy/vision/ocr/ppocr/classifier.h
+++ b/fastdeploy/vision/ocr/ppocr/classifier.h
@@ -20,20 +20,36 @@
namespace fastdeploy {
namespace vision {
+/** \brief All OCR series model APIs are defined inside this namespace
+ *
+ */
namespace ocr {
-
+/*! @brief Classifier object is used to load the classification model provided by PaddleOCR.
+ */
class FASTDEPLOY_DECL Classifier : public FastDeployModel {
public:
Classifier();
+ /** \brief Set path of model file, and the configuration of runtime
+ *
+ * \param[in] model_file Path of model file, e.g ./ch_ppocr_mobile_v2.0_cls_infer/model.pdmodel.
+ * \param[in] params_file Path of parameter file, e.g ./ch_ppocr_mobile_v2.0_cls_infer/model.pdiparams, if the model format is ONNX, this parameter will be ignored.
+ * \param[in] custom_option RuntimeOption for inference, the default will use cpu, and choose the backend defined in `valid_cpu_backends`.
+ * \param[in] model_format Model format of the loaded model, default is Paddle format.
+ */
Classifier(const std::string& model_file, const std::string& params_file = "",
const RuntimeOption& custom_option = RuntimeOption(),
const ModelFormat& model_format = ModelFormat::PADDLE);
-
+ /// Get model's name
std::string ModelName() const { return "ppocr/ocr_cls"; }
-
+ /** \brief Predict the input image and get OCR classification model result.
+ *
+ * \param[in] im The input image data, comes from cv::imread().
+ * \param[in] result The output of OCR classification model result will be writen to this structure.
+ * \return true if the prediction is successed, otherwise false.
+ */
virtual bool Predict(cv::Mat* img, std::tuple* result);
- // pre & post parameters
+ // Pre & Post parameters
float cls_thresh;
std::vector cls_image_shape;
int cls_batch_num;
@@ -44,9 +60,9 @@ class FASTDEPLOY_DECL Classifier : public FastDeployModel {
private:
bool Initialize();
-
+ /// Preprocess the input data, and set the preprocessed results to `outputs`
bool Preprocess(Mat* img, FDTensor* output);
-
+ /// Postprocess the inferenced results, and set the final result to `result`
bool Postprocess(FDTensor& infer_result, std::tuple* result);
};
diff --git a/fastdeploy/vision/ocr/ppocr/dbdetector.h b/fastdeploy/vision/ocr/ppocr/dbdetector.h
index ad80c1329..53bf3acee 100644
--- a/fastdeploy/vision/ocr/ppocr/dbdetector.h
+++ b/fastdeploy/vision/ocr/ppocr/dbdetector.h
@@ -20,22 +20,38 @@
namespace fastdeploy {
namespace vision {
+/** \brief All OCR series model APIs are defined inside this namespace
+ *
+ */
namespace ocr {
+/*! @brief DBDetector object is used to load the detection model provided by PaddleOCR.
+ */
class FASTDEPLOY_DECL DBDetector : public FastDeployModel {
public:
DBDetector();
-
+ /** \brief Set path of model file, and the configuration of runtime
+ *
+ * \param[in] model_file Path of model file, e.g ./ch_PP-OCRv3_det_infer/model.pdmodel.
+ * \param[in] params_file Path of parameter file, e.g ./ch_PP-OCRv3_det_infer/model.pdiparams, if the model format is ONNX, this parameter will be ignored.
+ * \param[in] custom_option RuntimeOption for inference, the default will use cpu, and choose the backend defined in `valid_cpu_backends`.
+ * \param[in] model_format Model format of the loaded model, default is Paddle format.
+ */
DBDetector(const std::string& model_file, const std::string& params_file = "",
const RuntimeOption& custom_option = RuntimeOption(),
const ModelFormat& model_format = ModelFormat::PADDLE);
-
+ /// Get model's name
std::string ModelName() const { return "ppocr/ocr_det"; }
-
+ /** \brief Predict the input image and get OCR detection model result.
+ *
+ * \param[in] im The input image data, comes from cv::imread().
+ * \param[in] boxes_result The output of OCR detection model result will be writen to this structure.
+ * \return true if the prediction is successed, otherwise false.
+ */
virtual bool Predict(cv::Mat* im,
std::vector>* boxes_result);
- // pre&post process parameters
+ // Pre & Post process parameters
int max_side_len;
float ratio_h{};
@@ -53,14 +69,14 @@ class FASTDEPLOY_DECL DBDetector : public FastDeployModel {
private:
bool Initialize();
-
+ /// Preprocess the input data, and set the preprocessed results to `outputs`
bool Preprocess(Mat* mat, FDTensor* outputs,
std::map>* im_info);
-
+ /*! @brief Postprocess the inferenced results, and set the final result to `boxes_result`
+ */
bool Postprocess(FDTensor& infer_result,
std::vector>* boxes_result,
const std::map>& im_info);
-
PostProcessor post_processor_;
};
diff --git a/fastdeploy/vision/ocr/ppocr/ocrsys_pybind.cc b/fastdeploy/vision/ocr/ppocr/ppocr_pybind.cc
similarity index 79%
rename from fastdeploy/vision/ocr/ppocr/ocrsys_pybind.cc
rename to fastdeploy/vision/ocr/ppocr/ppocr_pybind.cc
index 9c22c8aba..a88ae2fc7 100644
--- a/fastdeploy/vision/ocr/ppocr/ocrsys_pybind.cc
+++ b/fastdeploy/vision/ocr/ppocr/ppocr_pybind.cc
@@ -15,17 +15,17 @@
#include "fastdeploy/pybind/main.h"
namespace fastdeploy {
-void BindPPOCRSystemv3(pybind11::module& m) {
- // OCRSys
- pybind11::class_(
- m, "PPOCRSystemv3")
+void BindPPOCRv3(pybind11::module& m) {
+ // PPOCRv3
+ pybind11::class_(
+ m, "PPOCRv3")
.def(pybind11::init())
.def(pybind11::init())
- .def("predict", [](application::ocrsystem::PPOCRSystemv3& self,
+ .def("predict", [](pipeline::PPOCRv3& self,
pybind11::array& data) {
auto mat = PyArrayToCvMat(data);
vision::OCRResult res;
@@ -34,16 +34,16 @@ void BindPPOCRSystemv3(pybind11::module& m) {
});
}
-void BindPPOCRSystemv2(pybind11::module& m) {
- // OCRSys
- pybind11::class_(
- m, "PPOCRSystemv2")
+void BindPPOCRv2(pybind11::module& m) {
+ // PPOCRv2
+ pybind11::class_(
+ m, "PPOCRv2")
.def(pybind11::init())
.def(pybind11::init())
- .def("predict", [](application::ocrsystem::PPOCRSystemv2& self,
+ .def("predict", [](pipeline::PPOCRv2& self,
pybind11::array& data) {
auto mat = PyArrayToCvMat(data);
vision::OCRResult res;
diff --git a/fastdeploy/vision/ocr/ppocr/ppocr_system_v3.h b/fastdeploy/vision/ocr/ppocr/ppocr_system_v3.h
deleted file mode 100644
index d9e2d4584..000000000
--- a/fastdeploy/vision/ocr/ppocr/ppocr_system_v3.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#pragma once
-
-#include "fastdeploy/vision/ocr/ppocr/ppocr_system_v2.h"
-
-namespace fastdeploy {
-namespace application {
-namespace ocrsystem {
-
-class FASTDEPLOY_DECL PPOCRSystemv3 : public PPOCRSystemv2 {
- public:
- PPOCRSystemv3(fastdeploy::vision::ocr::DBDetector* det_model,
- fastdeploy::vision::ocr::Classifier* cls_model,
- fastdeploy::vision::ocr::Recognizer* rec_model) : PPOCRSystemv2(det_model, cls_model, rec_model) {
- // The only difference between v2 and v3
- recognizer_->rec_image_shape[1] = 48;
- }
-
- PPOCRSystemv3(fastdeploy::vision::ocr::DBDetector* det_model,
- fastdeploy::vision::ocr::Recognizer* rec_model) : PPOCRSystemv2(det_model, rec_model) {
- recognizer_->rec_image_shape[1] = 48;
- }
-};
-
-} // namespace ocrsystem
-} // namespace application
-} // namespace fastdeploy
diff --git a/fastdeploy/vision/ocr/ppocr/ppocr_system_v2.cc b/fastdeploy/vision/ocr/ppocr/ppocr_v2.cc
similarity index 81%
rename from fastdeploy/vision/ocr/ppocr/ppocr_system_v2.cc
rename to fastdeploy/vision/ocr/ppocr/ppocr_v2.cc
index 728b9f883..06cb47602 100644
--- a/fastdeploy/vision/ocr/ppocr/ppocr_system_v2.cc
+++ b/fastdeploy/vision/ocr/ppocr/ppocr_v2.cc
@@ -12,27 +12,26 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-#include "fastdeploy/vision/ocr/ppocr/ppocr_system_v2.h"
+#include "fastdeploy/vision/ocr/ppocr/ppocr_v2.h"
#include "fastdeploy/utils/perf.h"
#include "fastdeploy/vision/ocr/ppocr/utils/ocr_utils.h"
namespace fastdeploy {
-namespace application {
-namespace ocrsystem {
-PPOCRSystemv2::PPOCRSystemv2(fastdeploy::vision::ocr::DBDetector* det_model,
+namespace pipeline {
+PPOCRv2::PPOCRv2(fastdeploy::vision::ocr::DBDetector* det_model,
fastdeploy::vision::ocr::Classifier* cls_model,
fastdeploy::vision::ocr::Recognizer* rec_model)
: detector_(det_model), classifier_(cls_model), recognizer_(rec_model) {
recognizer_->rec_image_shape[1] = 32;
}
-PPOCRSystemv2::PPOCRSystemv2(fastdeploy::vision::ocr::DBDetector* det_model,
+PPOCRv2::PPOCRv2(fastdeploy::vision::ocr::DBDetector* det_model,
fastdeploy::vision::ocr::Recognizer* rec_model)
: detector_(det_model), recognizer_(rec_model) {
recognizer_->rec_image_shape[1] = 32;
}
-bool PPOCRSystemv2::Initialized() const {
+bool PPOCRv2::Initialized() const {
if (detector_ != nullptr && !detector_->Initialized()){
return false;
@@ -48,21 +47,21 @@ bool PPOCRSystemv2::Initialized() const {
return true;
}
-bool PPOCRSystemv2::Detect(cv::Mat* img,
+bool PPOCRv2::Detect(cv::Mat* img,
fastdeploy::vision::OCRResult* result) {
if (!detector_->Predict(img, &(result->boxes))) {
- FDERROR << "There's error while detecting image in PPOCRSystem." << std::endl;
+ FDERROR << "There's error while detecting image in PPOCR." << std::endl;
return false;
}
vision::ocr::SortBoxes(result);
return true;
}
-bool PPOCRSystemv2::Recognize(cv::Mat* img,
+bool PPOCRv2::Recognize(cv::Mat* img,
fastdeploy::vision::OCRResult* result) {
std::tuple rec_result;
if (!recognizer_->Predict(img, &rec_result)) {
- FDERROR << "There's error while recognizing image in PPOCRSystem." << std::endl;
+ FDERROR << "There's error while recognizing image in PPOCR." << std::endl;
return false;
}
@@ -71,12 +70,12 @@ bool PPOCRSystemv2::Recognize(cv::Mat* img,
return true;
}
-bool PPOCRSystemv2::Classify(cv::Mat* img,
+bool PPOCRv2::Classify(cv::Mat* img,
fastdeploy::vision::OCRResult* result) {
std::tuple cls_result;
if (!classifier_->Predict(img, &cls_result)) {
- FDERROR << "There's error while classifying image in PPOCRSystem." << std::endl;
+ FDERROR << "There's error while classifying image in PPOCR." << std::endl;
return false;
}
@@ -85,7 +84,7 @@ bool PPOCRSystemv2::Classify(cv::Mat* img,
return true;
}
-bool PPOCRSystemv2::Predict(cv::Mat* img,
+bool PPOCRv2::Predict(cv::Mat* img,
fastdeploy::vision::OCRResult* result) {
result->Clear();
if (nullptr != detector_ && !Detect(img, result)) {
@@ -120,6 +119,5 @@ bool PPOCRSystemv2::Predict(cv::Mat* img,
return true;
};
-} // namesapce ocrsystem
-} // namespace application
+} // namesapce pipeline
} // namespace fastdeploy
diff --git a/fastdeploy/vision/ocr/ppocr/ppocr_system_v2.h b/fastdeploy/vision/ocr/ppocr/ppocr_v2.h
similarity index 54%
rename from fastdeploy/vision/ocr/ppocr/ppocr_system_v2.h
rename to fastdeploy/vision/ocr/ppocr/ppocr_v2.h
index f2a8ccbed..88d3ee1a3 100644
--- a/fastdeploy/vision/ocr/ppocr/ppocr_system_v2.h
+++ b/fastdeploy/vision/ocr/ppocr/ppocr_v2.h
@@ -26,18 +26,38 @@
#include "fastdeploy/vision/ocr/ppocr/utils/ocr_postprocess_op.h"
namespace fastdeploy {
-namespace application {
-namespace ocrsystem {
-
-class FASTDEPLOY_DECL PPOCRSystemv2 : public FastDeployModel {
+/** \brief This pipeline can launch detection model, classification model and recognition model sequentially. All OCR pipeline APIs are defined inside this namespace.
+ *
+ */
+namespace pipeline {
+/*! @brief PPOCRv2 is used to load PP-OCRv2 series models provided by PaddleOCR.
+ */
+class FASTDEPLOY_DECL PPOCRv2 : public FastDeployModel {
public:
- PPOCRSystemv2(fastdeploy::vision::ocr::DBDetector* det_model,
+ /** \brief Set up the detection model path, classification model path and recognition model path respectively.
+ *
+ * \param[in] det_model Path of detection model, e.g ./ch_PP-OCRv2_det_infer
+ * \param[in] cls_model Path of classification model, e.g ./ch_ppocr_mobile_v2.0_cls_infer
+ * \param[in] rec_model Path of recognition model, e.g ./ch_PP-OCRv2_rec_infer
+ */
+ PPOCRv2(fastdeploy::vision::ocr::DBDetector* det_model,
fastdeploy::vision::ocr::Classifier* cls_model,
fastdeploy::vision::ocr::Recognizer* rec_model);
- PPOCRSystemv2(fastdeploy::vision::ocr::DBDetector* det_model,
+ /** \brief Classification model is optional, so this function is set up the detection model path and recognition model path respectively.
+ *
+ * \param[in] det_model Path of detection model, e.g ./ch_PP-OCRv2_det_infer
+ * \param[in] rec_model Path of recognition model, e.g ./ch_PP-OCRv2_rec_infer
+ */
+ PPOCRv2(fastdeploy::vision::ocr::DBDetector* det_model,
fastdeploy::vision::ocr::Recognizer* rec_model);
+ /** \brief Predict the input image and get OCR result.
+ *
+ * \param[in] im The input image data, comes from cv::imread().
+ * \param[in] result The output OCR result will be writen to this structure.
+ * \return true if the prediction successed, otherwise false.
+ */
virtual bool Predict(cv::Mat* img, fastdeploy::vision::OCRResult* result);
bool Initialized() const override;
@@ -45,12 +65,19 @@ class FASTDEPLOY_DECL PPOCRSystemv2 : public FastDeployModel {
fastdeploy::vision::ocr::DBDetector* detector_ = nullptr;
fastdeploy::vision::ocr::Classifier* classifier_ = nullptr;
fastdeploy::vision::ocr::Recognizer* recognizer_ = nullptr;
-
+ /// Launch the detection process in OCR.
virtual bool Detect(cv::Mat* img, fastdeploy::vision::OCRResult* result);
+ /// Launch the recognition process in OCR.
virtual bool Recognize(cv::Mat* img, fastdeploy::vision::OCRResult* result);
+ /// Launch the classification process in OCR.
virtual bool Classify(cv::Mat* img, fastdeploy::vision::OCRResult* result);
};
+namespace application {
+namespace ocrsystem {
+ typedef pipeline::PPOCRv2 PPOCRSystemv2;
} // namespace ocrsystem
} // namespace application
+
+} // namespace pipeline
} // namespace fastdeploy
diff --git a/fastdeploy/vision/ocr/ppocr/ppocr_v3.h b/fastdeploy/vision/ocr/ppocr/ppocr_v3.h
new file mode 100644
index 000000000..e248eca75
--- /dev/null
+++ b/fastdeploy/vision/ocr/ppocr/ppocr_v3.h
@@ -0,0 +1,62 @@
+// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#pragma once
+
+#include "fastdeploy/vision/ocr/ppocr/ppocr_v2.h"
+
+namespace fastdeploy {
+/** \brief This pipeline can launch detection model, classification model and recognition model sequentially. All OCR pipeline APIs are defined inside this namespace.
+ *
+ */
+namespace pipeline {
+/*! @brief PPOCRv3 is used to load PP-OCRv3 series models provided by PaddleOCR.
+ */
+class FASTDEPLOY_DECL PPOCRv3 : public PPOCRv2 {
+ public:
+ /** \brief Set up the detection model path, classification model path and recognition model path respectively.
+ *
+ * \param[in] det_model Path of detection model, e.g ./ch_PP-OCRv3_det_infer
+ * \param[in] cls_model Path of classification model, e.g ./ch_ppocr_mobile_v2.0_cls_infer
+ * \param[in] rec_model Path of recognition model, e.g ./ch_PP-OCRv3_rec_infer
+ */
+ PPOCRv3(fastdeploy::vision::ocr::DBDetector* det_model,
+ fastdeploy::vision::ocr::Classifier* cls_model,
+ fastdeploy::vision::ocr::Recognizer* rec_model)
+ : PPOCRv2(det_model, cls_model, rec_model) {
+ // The only difference between v2 and v3
+ recognizer_->rec_image_shape[1] = 48;
+ }
+ /** \brief Classification model is optional, so this function is set up the detection model path and recognition model path respectively.
+ *
+ * \param[in] det_model Path of detection model, e.g ./ch_PP-OCRv3_det_infer
+ * \param[in] rec_model Path of recognition model, e.g ./ch_PP-OCRv3_rec_infer
+ */
+ PPOCRv3(fastdeploy::vision::ocr::DBDetector* det_model,
+ fastdeploy::vision::ocr::Recognizer* rec_model)
+ : PPOCRv2(det_model, rec_model) {
+ // The only difference between v2 and v3
+ recognizer_->rec_image_shape[1] = 48;
+ }
+};
+
+} // namespace pipeline
+
+namespace application {
+namespace ocrsystem {
+ typedef pipeline::PPOCRv3 PPOCRSystemv3;
+} // namespace ocrsystem
+} // namespace application
+
+} // namespace fastdeploy
diff --git a/fastdeploy/vision/ocr/ppocr/recognizer.cc b/fastdeploy/vision/ocr/ppocr/recognizer.cc
index fdea6ed9c..e2a93e9a6 100644
--- a/fastdeploy/vision/ocr/ppocr/recognizer.cc
+++ b/fastdeploy/vision/ocr/ppocr/recognizer.cc
@@ -56,9 +56,6 @@ Recognizer::Recognizer(const std::string& model_file,
runtime_option.model_format = model_format;
runtime_option.model_file = model_file;
runtime_option.params_file = params_file;
- runtime_option.DeletePaddleBackendPass("matmul_transpose_reshape_fuse_pass");
- runtime_option.DeletePaddleBackendPass(
- "matmul_transpose_reshape_mkldnn_fuse_pass");
initialized = Initialize();
diff --git a/fastdeploy/vision/ocr/ppocr/recognizer.h b/fastdeploy/vision/ocr/ppocr/recognizer.h
index ebe99d1e8..3ab6731ba 100644
--- a/fastdeploy/vision/ocr/ppocr/recognizer.h
+++ b/fastdeploy/vision/ocr/ppocr/recognizer.h
@@ -20,22 +20,39 @@
namespace fastdeploy {
namespace vision {
+/** \brief All OCR series model APIs are defined inside this namespace
+ *
+ */
namespace ocr {
-
+/*! @brief Recognizer object is used to load the recognition model provided by PaddleOCR.
+ */
class FASTDEPLOY_DECL Recognizer : public FastDeployModel {
public:
Recognizer();
+ /** \brief Set path of model file, and the configuration of runtime
+ *
+ * \param[in] model_file Path of model file, e.g ./ch_PP-OCRv3_rec_infer/model.pdmodel.
+ * \param[in] params_file Path of parameter file, e.g ./ch_PP-OCRv3_rec_infer/model.pdiparams, if the model format is ONNX, this parameter will be ignored.
+ * \param[in] label_path Path of label file used by OCR recognition model. e.g ./ppocr_keys_v1.txt
+ * \param[in] custom_option RuntimeOption for inference, the default will use cpu, and choose the backend defined in `valid_cpu_backends`.
+ * \param[in] model_format Model format of the loaded model, default is Paddle format.
+ */
Recognizer(const std::string& model_file, const std::string& params_file = "",
const std::string& label_path = "",
const RuntimeOption& custom_option = RuntimeOption(),
const ModelFormat& model_format = ModelFormat::PADDLE);
-
+ /// Get model's name
std::string ModelName() const { return "ppocr/ocr_rec"; }
-
+ /** \brief Predict the input image and get OCR recognition model result.
+ *
+ * \param[in] im The input image data, comes from cv::imread().
+ * \param[in] rec_result The output of OCR recognition model result will be writen to this structure.
+ * \return true if the prediction is successed, otherwise false.
+ */
virtual bool Predict(cv::Mat* img,
std::tuple* rec_result);
- // pre & post parameters
+ // Pre & Post parameters
std::vector label_list;
int rec_batch_num;
int rec_img_h;
@@ -48,10 +65,11 @@ class FASTDEPLOY_DECL Recognizer : public FastDeployModel {
private:
bool Initialize();
-
+ /// Preprocess the input data, and set the preprocessed results to `outputs`
bool Preprocess(Mat* img, FDTensor* outputs,
const std::vector& rec_image_shape);
-
+ /*! @brief Postprocess the inferenced results, and set the final result to `rec_result`
+ */
bool Postprocess(FDTensor& infer_result,
std::tuple* rec_result);
};
diff --git a/python/fastdeploy/vision/ocr/__init__.py b/python/fastdeploy/vision/ocr/__init__.py
index 7ff77734c..98e210d3b 100644
--- a/python/fastdeploy/vision/ocr/__init__.py
+++ b/python/fastdeploy/vision/ocr/__init__.py
@@ -13,6 +13,8 @@
# limitations under the License.
from __future__ import absolute_import
+from .ppocr import PPOCRv3
+from .ppocr import PPOCRv2
from .ppocr import PPOCRSystemv3
from .ppocr import PPOCRSystemv2
from .ppocr import DBDetector
diff --git a/python/fastdeploy/vision/ocr/ppocr/__init__.py b/python/fastdeploy/vision/ocr/ppocr/__init__.py
index 53888ba04..e361a3a8a 100644
--- a/python/fastdeploy/vision/ocr/ppocr/__init__.py
+++ b/python/fastdeploy/vision/ocr/ppocr/__init__.py
@@ -24,8 +24,13 @@ class DBDetector(FastDeployModel):
params_file="",
runtime_option=None,
model_format=ModelFormat.PADDLE):
- # 调用基函数进行backend_option的初始化
- # 初始化后的option保存在self._runtime_option
+ """Load OCR detection model provided by PaddleOCR.
+
+ :param model_file: (str)Path of model file, e.g ./ch_PP-OCRv3_det_infer/model.pdmodel.
+ :param params_file: (str)Path of parameter file, e.g ./ch_PP-OCRv3_det_infer/model.pdiparams, if the model format is ONNX, this parameter will be ignored.
+ :param runtime_option: (fastdeploy.RuntimeOption)RuntimeOption for inference this model, if it's None, will use the default backend on CPU.
+ :param model_format: (fastdeploy.ModelForamt)Model format of the loaded model.
+ """
super(DBDetector, self).__init__(runtime_option)
if (len(model_file) == 0):
@@ -33,7 +38,6 @@ class DBDetector(FastDeployModel):
else:
self._model = C.vision.ocr.DBDetector(
model_file, params_file, self._runtime_option, model_format)
- # 通过self.initialized判断整个模型的初始化是否成功
assert self.initialized, "DBDetector initialize failed."
# 一些跟DBDetector模型有关的属性封装
@@ -81,8 +85,8 @@ class DBDetector(FastDeployModel):
@det_db_box_thresh.setter
def det_db_box_thresh(self, value):
assert isinstance(
- value,
- float), "The value to set `det_db_box_thresh` must be type of float."
+ value, float
+ ), "The value to set `det_db_box_thresh` must be type of float."
self._model.det_db_box_thresh = value
@det_db_unclip_ratio.setter
@@ -119,8 +123,13 @@ class Classifier(FastDeployModel):
params_file="",
runtime_option=None,
model_format=ModelFormat.PADDLE):
- # 调用基函数进行backend_option的初始化
- # 初始化后的option保存在self._runtime_option
+ """Load OCR classification model provided by PaddleOCR.
+
+ :param model_file: (str)Path of model file, e.g ./ch_ppocr_mobile_v2.0_cls_infer/model.pdmodel.
+ :param params_file: (str)Path of parameter file, e.g ./ch_ppocr_mobile_v2.0_cls_infer/model.pdiparams, if the model format is ONNX, this parameter will be ignored.
+ :param runtime_option: (fastdeploy.RuntimeOption)RuntimeOption for inference this model, if it's None, will use the default backend on CPU.
+ :param model_format: (fastdeploy.ModelForamt)Model format of the loaded model.
+ """
super(Classifier, self).__init__(runtime_option)
if (len(model_file) == 0):
@@ -128,7 +137,6 @@ class Classifier(FastDeployModel):
else:
self._model = C.vision.ocr.Classifier(
model_file, params_file, self._runtime_option, model_format)
- # 通过self.initialized判断整个模型的初始化是否成功
assert self.initialized, "Classifier initialize failed."
@property
@@ -159,7 +167,8 @@ class Classifier(FastDeployModel):
@cls_batch_num.setter
def cls_batch_num(self, value):
assert isinstance(
- value, int), "The value to set `cls_batch_num` must be type of int."
+ value,
+ int), "The value to set `cls_batch_num` must be type of int."
self._model.cls_batch_num = value
@@ -170,8 +179,14 @@ class Recognizer(FastDeployModel):
label_path="",
runtime_option=None,
model_format=ModelFormat.PADDLE):
- # 调用基函数进行backend_option的初始化
- # 初始化后的option保存在self._runtime_option
+ """Load OCR recognition model provided by PaddleOCR
+
+ :param model_file: (str)Path of model file, e.g ./ch_PP-OCRv3_rec_infer/model.pdmodel.
+ :param params_file: (str)Path of parameter file, e.g ./ch_PP-OCRv3_rec_infer/model.pdiparams, if the model format is ONNX, this parameter will be ignored.
+ :param label_path: (str)Path of label file used by OCR recognition model. e.g ./ppocr_keys_v1.txt
+ :param runtime_option: (fastdeploy.RuntimeOption)RuntimeOption for inference this model, if it's None, will use the default backend on CPU.
+ :param model_format: (fastdeploy.ModelForamt)Model format of the loaded model.
+ """
super(Recognizer, self).__init__(runtime_option)
if (len(model_file) == 0):
@@ -180,7 +195,6 @@ class Recognizer(FastDeployModel):
self._model = C.vision.ocr.Recognizer(
model_file, params_file, label_path, self._runtime_option,
model_format)
- # 通过self.initialized判断整个模型的初始化是否成功
assert self.initialized, "Recognizer initialize failed."
@property
@@ -210,33 +224,78 @@ class Recognizer(FastDeployModel):
@rec_batch_num.setter
def rec_batch_num(self, value):
assert isinstance(
- value, int), "The value to set `rec_batch_num` must be type of int."
+ value,
+ int), "The value to set `rec_batch_num` must be type of int."
self._model.rec_batch_num = value
-class PPOCRSystemv3(FastDeployModel):
+class PPOCRv3(FastDeployModel):
def __init__(self, det_model=None, cls_model=None, rec_model=None):
+ """Consruct a pipeline with text detector, direction classifier and text recognizer models
+
+ :param det_model: (FastDeployModel) The detection model object created by fastdeploy.vision.ocr.DBDetector.
+ :param cls_model: (FastDeployModel) The classification model object created by fastdeploy.vision.ocr.Classifier.
+ :param rec_model: (FastDeployModel) The recognition model object created by fastdeploy.vision.ocr.Recognizer.
+ """
assert det_model is not None and rec_model is not None, "The det_model and rec_model cannot be None."
if cls_model is None:
- self.system = C.vision.ocr.PPOCRSystemv3(det_model._model,
- rec_model._model)
+ self.system = C.vision.ocr.PPOCRv3(det_model._model,
+ rec_model._model)
else:
- self.system = C.vision.ocr.PPOCRSystemv3(
+ self.system = C.vision.ocr.PPOCRv3(
det_model._model, cls_model._model, rec_model._model)
def predict(self, input_image):
+ """Predict an input image
+
+ :param input_image: (numpy.ndarray)The input image data, 3-D array with layout HWC, BGR format
+ :return: OCRResult
+ """
return self.system.predict(input_image)
-class PPOCRSystemv2(FastDeployModel):
+class PPOCRSystemv3(PPOCRv3):
def __init__(self, det_model=None, cls_model=None, rec_model=None):
+ logging.warning(
+ "DEPRECATED: fd.vision.ocr.PPOCRSystemv3 is deprecated, "
+ "please use fd.vision.ocr.PPOCRv3 instead.")
+ super(PPOCRSystemv3, self).__init__(det_model, cls_model, rec_model)
+
+ def predict(self, input_image):
+ return super(PPOCRSystemv3, self).predict(input_image)
+
+
+class PPOCRv2(FastDeployModel):
+ def __init__(self, det_model=None, cls_model=None, rec_model=None):
+ """Consruct a pipeline with text detector, direction classifier and text recognizer models
+
+ :param det_model: (FastDeployModel) The detection model object created by fastdeploy.vision.ocr.DBDetector.
+ :param cls_model: (FastDeployModel) The classification model object created by fastdeploy.vision.ocr.Classifier.
+ :param rec_model: (FastDeployModel) The recognition model object created by fastdeploy.vision.ocr.Recognizer.
+ """
assert det_model is not None and rec_model is not None, "The det_model and rec_model cannot be None."
if cls_model is None:
- self.system = C.vision.ocr.PPOCRSystemv2(det_model._model,
- rec_model._model)
+ self.system = C.vision.ocr.PPOCRv2(det_model._model,
+ rec_model._model)
else:
- self.system = C.vision.ocr.PPOCRSystemv2(
+ self.system = C.vision.ocr.PPOCRv2(
det_model._model, cls_model._model, rec_model._model)
def predict(self, input_image):
+ """Predict an input image
+
+ :param input_image: (numpy.ndarray)The input image data, 3-D array with layout HWC, BGR format
+ :return: OCRResult
+ """
return self.system.predict(input_image)
+
+
+class PPOCRSystemv2(PPOCRv2):
+ def __init__(self, det_model=None, cls_model=None, rec_model=None):
+ logging.warning(
+ "DEPRECATED: fd.vision.ocr.PPOCRSystemv2 is deprecated, "
+ "please use fd.vision.ocr.PPOCRv2 instead.")
+ super(PPOCRSystemv2, self).__init__(det_model, cls_model, rec_model)
+
+ def predict(self, input_image):
+ return super(PPOCRSystemv2, self).predict(input_image)