forked from PaddlePaddle/FastDeploy
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Other] add code and docs for ppclas examples (PaddlePaddle#1312)
* add code and docs for ppclas examples * fix doc * add code for printing results * add ppcls demo and docs * modify example according to refined c api * modify example code and docs for ppcls and ppdet * modify example code and docs for ppcls and ppdet * update ppdet demo * fix demo codes * fix doc * release resource when failed * fix * fix name * fix name
- Loading branch information
Showing
14 changed files
with
926 additions
and
138 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
13 changes: 13 additions & 0 deletions
13
examples/vision/classification/paddleclas/c/CMakeLists.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
PROJECT(infer_demo C) | ||
CMAKE_MINIMUM_REQUIRED (VERSION 3.10) | ||
|
||
# 指定下载解压后的fastdeploy库路径 | ||
option(FASTDEPLOY_INSTALL_DIR "Path of downloaded fastdeploy sdk.") | ||
|
||
include(${FASTDEPLOY_INSTALL_DIR}/FastDeploy.cmake) | ||
|
||
# 添加FastDeploy依赖头文件 | ||
include_directories(${FASTDEPLOY_INCS}) | ||
|
||
add_executable(infer_demo ${PROJECT_SOURCE_DIR}/infer.c) | ||
target_link_libraries(infer_demo ${FASTDEPLOY_LIBS}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,183 @@ | ||
English | [简体中文](README_CN.md) | ||
# PaddleClas C Deployment Example | ||
|
||
This directory provides examples that `infer.c` fast finishes the deployment of PaddleClas models on CPU/GPU. | ||
|
||
Before deployment, two steps require confirmation. | ||
|
||
- 1. Software and hardware should meet the requirements. Please refer to [FastDeploy Environment Requirements](../../../../../docs/en/build_and_install/download_prebuilt_libraries.md). | ||
- 2. Download the precompiled deployment library and samples code according to your development environment. Refer to [FastDeploy Precompiled Library](../../../../../docs/en/build_and_install/download_prebuilt_libraries.md). | ||
|
||
Taking ResNet50_vd inference on Linux as an example, the compilation test can be completed by executing the following command in this directory. FastDeploy version 1.0.4 or above (x.x.x>=1.0.4) is required to support this model. | ||
|
||
```bash | ||
mkdir build | ||
cd build | ||
# Download FastDeploy precompiled library. Users can choose your appropriate version in the`FastDeploy Precompiled Library` mentioned above | ||
wget https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-linux-x64-x.x.x.tgz | ||
tar xvf fastdeploy-linux-x64-x.x.x.tgz | ||
cmake .. -DFASTDEPLOY_INSTALL_DIR=${PWD}/fastdeploy-linux-x64-x.x.x | ||
make -j | ||
|
||
# Download ResNet50_vd model file and test images | ||
wget https://bj.bcebos.com/paddlehub/fastdeploy/ResNet50_vd_infer.tgz | ||
tar -xvf ResNet50_vd_infer.tgz | ||
wget https://gitee.com/paddlepaddle/PaddleClas/raw/release/2.4/deploy/images/ImageNet/ILSVRC2012_val_00000010.jpeg | ||
|
||
|
||
# CPU inference | ||
./infer_demo ResNet50_vd_infer ILSVRC2012_val_00000010.jpeg 0 | ||
# GPU inference | ||
./infer_demo ResNet50_vd_infer ILSVRC2012_val_00000010.jpeg 1 | ||
``` | ||
|
||
The above command works for Linux or MacOS. Refer to | ||
- [How to use FastDeploy C++ SDK in Windows](../../../../../docs/cn/faq/use_sdk_on_windows.md) for SDK use-pattern in Windows | ||
|
||
## PaddleClas C Interface | ||
|
||
### RuntimeOption | ||
|
||
```c | ||
FD_C_RuntimeOptionWrapper* FD_C_CreateRuntimeOptionWrapper() | ||
``` | ||
|
||
> Create a RuntimeOption object, and return a pointer to manipulate it. | ||
> | ||
> **Return** | ||
> | ||
> * **fd_c_runtime_option_wrapper**(FD_C_RuntimeOptionWrapper*): Pointer to manipulate RuntimeOption object. | ||
|
||
|
||
```c | ||
void FD_C_RuntimeOptionWrapperUseCpu( | ||
FD_C_RuntimeOptionWrapper* fd_c_runtime_option_wrapper) | ||
``` | ||
> Enable Cpu inference. | ||
> | ||
> **Params** | ||
> | ||
> * **fd_c_runtime_option_wrapper**(FD_C_RuntimeOptionWrapper*): Pointer to manipulate RuntimeOption object. | ||
```c | ||
void FD_C_RuntimeOptionWrapperUseGpu( | ||
FD_C_RuntimeOptionWrapper* fd_c_runtime_option_wrapper, | ||
int gpu_id) | ||
``` | ||
> 开启GPU推理 | ||
> | ||
> **参数** | ||
> | ||
> * **fd_c_runtime_option_wrapper**(FD_C_RuntimeOptionWrapper*): Pointer to manipulate RuntimeOption object. | ||
> * **gpu_id**(int): gpu id | ||
|
||
### Model | ||
|
||
```c | ||
|
||
FD_C_PaddleClasModelWrapper* FD_C_CreatePaddleClasModelWrapper( | ||
const char* model_file, const char* params_file, const char* config_file, | ||
FD_C_RuntimeOptionWrapper* runtime_option, | ||
const FD_C_ModelFormat model_format) | ||
|
||
``` | ||
> Create a PaddleClas model object, and return a pointer to manipulate it. | ||
> | ||
> **Params** | ||
> | ||
> * **model_file**(const char*): Model file path | ||
> * **params_file**(const char*): Parameter file path | ||
> * **config_file**(const char*): Configuration file path, which is the deployment yaml file exported by PaddleClas. | ||
> * **runtime_option**(FD_C_RuntimeOptionWrapper*): Backend inference configuration. None by default, which is the default configuration | ||
> * **model_format**(FD_C_ModelFormat): Model format. Paddle format by default | ||
> | ||
> **Return** | ||
> * **fd_c_ppclas_wrapper**(FD_C_PaddleClasModelWrapper*): Pointer to manipulate PaddleClas object. | ||
#### Read and write image | ||
```c | ||
FD_C_Mat FD_C_Imread(const char* imgpath) | ||
``` | ||
|
||
> Read an image, and return a pointer to cv::Mat. | ||
> | ||
> **Params** | ||
> | ||
> * **imgpath**(const char*): image path | ||
> | ||
> **Return** | ||
> | ||
> * **imgmat**(FD_C_Mat): pointer to cv::Mat object which holds the image. | ||
|
||
```c | ||
FD_C_Bool FD_C_Imwrite(const char* savepath, FD_C_Mat img); | ||
``` | ||
> Write image to a file. | ||
> | ||
> **Params** | ||
> | ||
> * **savepath**(const char*): save path | ||
> * **img**(FD_C_Mat): pointer to cv::Mat object | ||
> | ||
> **Return** | ||
> | ||
> * **result**(FD_C_Bool): bool to indicate success or failure | ||
#### Prediction | ||
```c | ||
FD_C_Bool FD_C_PaddleClasModelWrapperPredict( | ||
__fd_take FD_C_PaddleClasModelWrapper* fd_c_ppclas_wrapper, FD_C_Mat img, | ||
FD_C_ClassifyResult* fd_c_ppclas_result) | ||
``` | ||
> | ||
> Predict an image, and generate classification result. | ||
> | ||
> **Params** | ||
> * **fd_c_ppclas_wrapper**(FD_C_PaddleClasModelWrapper*): pointer to manipulate PaddleClas object | ||
> * **img**(FD_C_Mat): pointer to cv::Mat object, which can be obained by FD_C_Imread interface | ||
> * **fd_c_ppclas_result** (FD_C_ClassifyResult*): The classification result, including label_id, and the corresponding confidence. Refer to [Visual Model Prediction Results](../../../../../docs/api/vision_results/) for the description of ClassifyResult | ||
|
||
#### Result | ||
|
||
```c | ||
FD_C_ClassifyResultWrapper* FD_C_CreateClassifyResultWrapperFromData( | ||
FD_C_ClassifyResult* fd_c_classify_result) | ||
``` | ||
> | ||
> Create a pointer to FD_C_ClassifyResultWrapper structure, which contains `fastdeploy::vision::ClassifyResult` object in C++. You can call methods in C++ ClassifyResult object by C API with this pointer. | ||
> | ||
> **Params** | ||
> * **fd_c_classify_result**(FD_C_ClassifyResult*): pointer to FD_C_ClassifyResult structure | ||
> | ||
> **Return** | ||
> * **fd_c_classify_result_wrapper**(FD_C_ClassifyResultWrapper*): pointer to FD_C_ClassifyResultWrapper structure | ||
```c | ||
char* FD_C_ClassifyResultWrapperStr( | ||
FD_C_ClassifyResultWrapper* fd_c_classify_result_wrapper); | ||
``` | ||
> | ||
> Call Str() methods in `fastdeploy::vision::ClassifyResult` object contained in FD_C_ClassifyResultWrapper structure,and return a string to describe information in result. | ||
> | ||
> **Params** | ||
> * **fd_c_classify_result_wrapper**(FD_C_ClassifyResultWrapper*): pointer to FD_C_ClassifyResultWrapper structure | ||
> | ||
> **Return** | ||
> * **str**(char*): a string to describe information in result | ||
|
||
- [Model Description](../../) | ||
- [Python Deployment](../python) | ||
- [Visual Model prediction results](../../../../../docs/api/vision_results/) | ||
- [How to switch the model inference backend engine](../../../../../docs/en/faq/how_to_change_backend.md) |
189 changes: 189 additions & 0 deletions
189
examples/vision/classification/paddleclas/c/README_CN.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,189 @@ | ||
[English](README.md) | 简体中文 | ||
# PaddleClas C 部署示例 | ||
|
||
本目录下提供`infer_xxx.c`来调用C API快速完成PaddleClas系列模型在CPU/GPU上部署的示例。 | ||
|
||
在部署前,需确认以下两个步骤 | ||
|
||
- 1. 软硬件环境满足要求,参考[FastDeploy环境要求](../../../../../docs/cn/build_and_install/download_prebuilt_libraries.md) | ||
- 2. 根据开发环境,下载预编译部署库和samples代码,参考[FastDeploy预编译库](../../../../../docs/cn/build_and_install/download_prebuilt_libraries.md) | ||
|
||
以Linux上ResNet50_vd推理为例,在本目录执行如下命令即可完成编译测试,支持此模型需保证FastDeploy版本1.0.4以上(x.x.x>=1.0.4) | ||
|
||
```bash | ||
mkdir build | ||
cd build | ||
# 下载FastDeploy预编译库,用户可在上文提到的`FastDeploy预编译库`中自行选择合适的版本使用 | ||
wget https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-linux-x64-x.x.x.tgz | ||
tar xvf fastdeploy-linux-x64-x.x.x.tgz | ||
cmake .. -DFASTDEPLOY_INSTALL_DIR=${PWD}/fastdeploy-linux-x64-x.x.x | ||
make -j | ||
|
||
# 下载ResNet50_vd模型文件和测试图片 | ||
wget https://bj.bcebos.com/paddlehub/fastdeploy/ResNet50_vd_infer.tgz | ||
tar -xvf ResNet50_vd_infer.tgz | ||
wget https://gitee.com/paddlepaddle/PaddleClas/raw/release/2.4/deploy/images/ImageNet/ILSVRC2012_val_00000010.jpeg | ||
|
||
|
||
# CPU推理 | ||
./infer_demo ResNet50_vd_infer ILSVRC2012_val_00000010.jpeg 0 | ||
# GPU推理 | ||
./infer_demo ResNet50_vd_infer ILSVRC2012_val_00000010.jpeg 1 | ||
``` | ||
|
||
以上命令只适用于Linux或MacOS, Windows下SDK的使用方式请参考: | ||
- [如何在Windows中使用FastDeploy C++ SDK](../../../../../docs/cn/faq/use_sdk_on_windows.md) | ||
|
||
如果用户使用华为昇腾NPU部署, 请参考以下方式在部署前初始化部署环境: | ||
- [如何使用华为昇腾NPU部署](../../../../../docs/cn/faq/use_sdk_on_ascend.md) | ||
|
||
## PaddleClas C API接口 | ||
|
||
### 配置 | ||
|
||
```c | ||
FD_C_RuntimeOptionWrapper* FD_C_CreateRuntimeOptionWrapper() | ||
``` | ||
|
||
> 创建一个RuntimeOption的配置对象,并且返回操作它的指针。 | ||
> | ||
> **返回** | ||
> | ||
> * **fd_c_runtime_option_wrapper**(FD_C_RuntimeOptionWrapper*): 指向RuntimeOption对象的指针 | ||
|
||
|
||
```c | ||
void FD_C_RuntimeOptionWrapperUseCpu( | ||
FD_C_RuntimeOptionWrapper* fd_c_runtime_option_wrapper) | ||
``` | ||
> 开启CPU推理 | ||
> | ||
> **参数** | ||
> | ||
> * **fd_c_runtime_option_wrapper**(FD_C_RuntimeOptionWrapper*): 指向RuntimeOption对象的指针 | ||
```c | ||
void FD_C_RuntimeOptionWrapperUseGpu( | ||
FD_C_RuntimeOptionWrapper* fd_c_runtime_option_wrapper, | ||
int gpu_id) | ||
``` | ||
> 开启GPU推理 | ||
> | ||
> **参数** | ||
> | ||
> * **fd_c_runtime_option_wrapper**(FD_C_RuntimeOptionWrapper*): 指向RuntimeOption对象的指针 | ||
> * **gpu_id**(int): 显卡号 | ||
|
||
### 模型 | ||
|
||
```c | ||
|
||
FD_C_PaddleClasModelWrapper* FD_C_CreatePaddleClasModelWrapper( | ||
const char* model_file, const char* params_file, const char* config_file, | ||
FD_C_RuntimeOptionWrapper* runtime_option, | ||
const FD_C_ModelFormat model_format) | ||
|
||
``` | ||
> 创建一个PaddleClas的模型,并且返回操作它的指针。 | ||
> | ||
> **参数** | ||
> | ||
> * **model_file**(const char*): 模型文件路径 | ||
> * **params_file**(const char*): 参数文件路径 | ||
> * **config_file**(const char*): 配置文件路径,即PaddleClas导出的部署yaml文件 | ||
> * **runtime_option**(FD_C_RuntimeOptionWrapper*): 指向RuntimeOption的指针,表示后端推理配置 | ||
> * **model_format**(FD_C_ModelFormat): 模型格式 | ||
> | ||
> **返回** | ||
> * **fd_c_ppclas_wrapper**(FD_C_PaddleClasModelWrapper*): 指向PaddleClas模型对象的指针 | ||
#### 读写图像 | ||
```c | ||
FD_C_Mat FD_C_Imread(const char* imgpath) | ||
``` | ||
|
||
> 读取一个图像,并且返回cv::Mat的指针。 | ||
> | ||
> **参数** | ||
> | ||
> * **imgpath**(const char*): 图像文件路径 | ||
> | ||
> **返回** | ||
> | ||
> * **imgmat**(FD_C_Mat): 指向图像数据cv::Mat的指针。 | ||
|
||
```c | ||
FD_C_Bool FD_C_Imwrite(const char* savepath, FD_C_Mat img); | ||
``` | ||
> 将图像写入文件中。 | ||
> | ||
> **参数** | ||
> | ||
> * **savepath**(const char*): 保存图像的路径 | ||
> * **img**(FD_C_Mat): 指向图像数据的指针 | ||
> | ||
> **返回** | ||
> | ||
> * **result**(FD_C_Bool): 表示操作是否成功 | ||
#### Predict函数 | ||
```c | ||
FD_C_Bool FD_C_PaddleClasModelWrapperPredict( | ||
__fd_take FD_C_PaddleClasModelWrapper* fd_c_ppclas_wrapper, FD_C_Mat img, | ||
FD_C_ClassifyResult* fd_c_ppclas_result) | ||
``` | ||
> | ||
> 模型预测接口,输入图像直接并生成分类结果。 | ||
> | ||
> **参数** | ||
> * **fd_c_ppclas_wrapper**(FD_C_PaddleClasModelWrapper*): 指向PaddleClas模型的指针 | ||
> * **img**(FD_C_Mat): 输入图像的指针,指向cv::Mat对象,可以调用FD_C_Imread读取图像获取 | ||
> * **fd_c_ppclas_result**(FD_C_ClassifyResult*): 分类结果,包括label_id,以及相应的置信度, ClassifyResult说明参考[视觉模型预测结果](../../../../../docs/api/vision_results/) | ||
|
||
#### Predict结果 | ||
|
||
```c | ||
FD_C_ClassifyResultWrapper* FD_C_CreateClassifyResultWrapperFromData( | ||
FD_C_ClassifyResult* fd_c_classify_result) | ||
``` | ||
> | ||
> 创建一个FD_C_ClassifyResultWrapper对象的指针,FD_C_ClassifyResultWrapper中包含了C++的`fastdeploy::vision::ClassifyResult`对象,通过该指针,使用C API可以访问调用对应C++中的函数。 | ||
> | ||
> | ||
> **参数** | ||
> * **fd_c_classify_result**(FD_C_ClassifyResult*): 指向FD_C_ClassifyResult对象的指针 | ||
> | ||
> **返回** | ||
> * **fd_c_classify_result_wrapper**(FD_C_ClassifyResultWrapper*): 指向FD_C_ClassifyResultWrapper的指针 | ||
```c | ||
char* FD_C_ClassifyResultWrapperStr( | ||
FD_C_ClassifyResultWrapper* fd_c_classify_result_wrapper); | ||
``` | ||
> | ||
> 调用FD_C_ClassifyResultWrapper所包含的`fastdeploy::vision::ClassifyResult`对象的Str()方法,返回相关结果内数据信息的字符串。 | ||
> | ||
> **参数** | ||
> * **fd_c_classify_result_wrapper**(FD_C_ClassifyResultWrapper*): 指向FD_C_ClassifyResultWrapper对象的指针 | ||
> | ||
> **返回** | ||
> * **str**(char*): 表示结果数据信息的字符串 | ||
|
||
|
||
|
||
- [模型介绍](../../) | ||
- [Python部署](../python) | ||
- [视觉模型预测结果](../../../../../docs/api/vision_results/) | ||
- [如何切换模型推理后端引擎](../../../../../docs/cn/faq/how_to_change_backend.md) |
Oops, something went wrong.