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)