Add Sdk Doxygen document. (#2157)

* doxygen c api

* fix ci

* update en doc

* update zh doc
pull/1988/merge
Chen Xin 2023-06-15 10:48:15 +08:00 committed by GitHub
parent a8775d2cf1
commit 264de4ddbc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
39 changed files with 3952 additions and 0 deletions

3
.gitignore vendored
View File

@ -169,3 +169,6 @@ csrc/mmdeploy/preprocess/elena/cuda_kernel/*
# c#
demo/csharp/*/Properties
# doxygen
docs/cppapi/docs

2817
docs/cppapi/Doxyfile 100644

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,7 @@
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import subprocess
import sys
import pytorch_sphinx_theme
@ -48,6 +49,7 @@ release = __version__
# ones.
extensions = [
'breathe',
'sphinx.ext.autodoc',
'sphinx.ext.napoleon',
'sphinx.ext.viewcode',
@ -58,6 +60,20 @@ extensions = [
'sphinxcontrib.mermaid'
] # yapf: disable
breathe_default_project = 'mmdeployapi'
breathe_projects = {'mmdeployapi': '../cppapi/docs/xml'}
def generate_doxygen_xml(app):
try:
folder = '../cppapi'
retcode = subprocess.call('cd %s; doxygen' % folder, shell=True)
if retcode < 0:
sys.stderr.write('doxygen terminated by signal %s' % (-retcode))
except Exception as e:
sys.stderr.write('doxygen execution failed: %s' % e)
autodoc_mock_imports = ['tensorrt']
autosectionlabel_prefix_document = True
@ -211,6 +227,8 @@ copybutton_prompt_is_regexp = True
def setup(app):
# Add hook for building doxygen xml when needed
app.connect('builder-inited', generate_doxygen_xml)
app.add_config_value('no_underscore_emphasis', False, 'env')
app.add_config_value('m2r_parse_relative_links', False, 'env')
app.add_config_value('m2r_anonymous_references', False, 'env')

View File

@ -28,6 +28,12 @@ You can switch between Chinese and English documents in the lower-left corner of
02-how-to-run/quantize_model.md
02-how-to-run/useful_tools.md
.. toctree::
:maxdepth: 1
:caption: SDK Usage
sdk_usage/index.rst
.. toctree::
:maxdepth: 1
:caption: Benchmark

View File

@ -0,0 +1,30 @@
====================
classifier.h
====================
.. doxygenstruct:: mmdeploy_classification_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_classifier_t
.. doxygenfunction:: mmdeploy_classifier_create
.. doxygenfunction:: mmdeploy_classifier_create_by_path
.. doxygenfunction:: mmdeploy_classifier_apply
.. doxygenfunction:: mmdeploy_classifier_release_result
.. doxygenfunction:: mmdeploy_classifier_destroy
.. doxygenfunction:: mmdeploy_classifier_create_v2
.. doxygenfunction:: mmdeploy_classifier_create_input
.. doxygenfunction:: mmdeploy_classifier_apply_v2
.. doxygenfunction:: mmdeploy_classifier_apply_async
.. doxygenfunction:: mmdeploy_classifier_get_result

View File

@ -0,0 +1,52 @@
====================
common.h
====================
.. doxygenenum:: mmdeploy_pixel_format_t
.. doxygenenum:: mmdeploy_data_type_t
.. doxygenenum:: mmdeploy_status_t
.. doxygentypedef:: mmdeploy_device_t
.. doxygentypedef:: mmdeploy_profiler_t
.. doxygenstruct:: mmdeploy_mat_t
:members:
:undoc-members:
.. doxygenstruct:: mmdeploy_rect_t
:members:
:undoc-members:
.. doxygenstruct:: mmdeploy_point_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_value_t
.. doxygentypedef:: mmdeploy_context_t
.. doxygenfunction:: mmdeploy_value_copy
.. doxygenfunction:: mmdeploy_value_destroy
.. doxygenfunction:: mmdeploy_device_create
.. doxygenfunction:: mmdeploy_device_destroy
.. doxygenfunction:: mmdeploy_profiler_create
.. doxygenfunction:: mmdeploy_profiler_destroy
.. doxygenfunction:: mmdeploy_context_create
.. doxygenfunction:: mmdeploy_context_create_by_device
.. doxygenfunction:: mmdeploy_context_destroy
.. doxygenfunction:: mmdeploy_context_add
.. doxygenfunction:: mmdeploy_common_create_input

View File

@ -0,0 +1,33 @@
====================
detector.h
====================
.. doxygenstruct:: mmdeploy_instance_mask_t
:members:
:undoc-members:
.. doxygenstruct:: mmdeploy_detection_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_detector_t
.. doxygenfunction:: mmdeploy_detector_create
.. doxygenfunction:: mmdeploy_detector_create_by_path
.. doxygenfunction:: mmdeploy_detector_apply
.. doxygenfunction:: mmdeploy_detector_release_result
.. doxygenfunction:: mmdeploy_detector_destroy
.. doxygenfunction:: mmdeploy_detector_create_v2
.. doxygenfunction:: mmdeploy_detector_create_input
.. doxygenfunction:: mmdeploy_detector_apply_v2
.. doxygenfunction:: mmdeploy_detector_apply_async
.. doxygenfunction:: mmdeploy_detector_get_result

View File

@ -0,0 +1,59 @@
====================
executor.h
====================
.. doxygentypedef:: mmdeploy_then_fn_t
.. doxygentypedef:: mmdeploy_then_fn_v2_t
.. doxygentypedef:: mmdeploy_then_fn_v3_t
.. doxygentypedef:: mmdeploy_sender_t
.. doxygentypedef:: mmdeploy_scheduler_t
.. doxygentypedef:: mmdeploy_let_value_fn_t
.. doxygenfunction:: mmdeploy_executor_inline
.. doxygenfunction:: mmdeploy_executor_system_pool
.. doxygenfunction:: mmdeploy_executor_create_thread_pool
.. doxygenfunction:: mmdeploy_executor_create_thread
.. doxygenfunction:: mmdeploy_executor_dynamic_batch
.. doxygenfunction:: mmdeploy_scheduler_destroy
.. doxygenfunction:: mmdeploy_sender_copy
.. doxygenfunction:: mmdeploy_sender_destroy
.. doxygenfunction:: mmdeploy_executor_just
.. doxygenfunction:: mmdeploy_executor_schedule
.. doxygenfunction:: mmdeploy_executor_transfer_just
.. doxygenfunction:: mmdeploy_executor_transfer
.. doxygenfunction:: mmdeploy_executor_on
.. doxygenfunction:: mmdeploy_executor_then
.. doxygenfunction:: mmdeploy_executor_let_value
.. doxygenfunction:: mmdeploy_executor_split
.. doxygenfunction:: mmdeploy_executor_when_all
.. doxygenfunction:: mmdeploy_executor_ensure_started
.. doxygenfunction:: mmdeploy_executor_start_detached
.. doxygenfunction:: mmdeploy_executor_sync_wait
.. doxygenfunction:: mmdeploy_executor_sync_wait_v2
.. doxygenfunction:: mmdeploy_executor_execute

View File

@ -0,0 +1,11 @@
====================
model.h
====================
.. doxygentypedef:: mmdeploy_model_t
.. doxygenfunction:: mmdeploy_model_create_by_path
.. doxygenfunction:: mmdeploy_model_create
.. doxygenfunction:: mmdeploy_model_destroy

View File

@ -0,0 +1,16 @@
====================
pipeline.h
====================
.. doxygentypedef:: mmdeploy_pipeline_t
.. doxygenfunction:: mmdeploy_pipeline_create_v3
.. doxygenfunction:: mmdeploy_pipeline_create_from_model
.. doxygenfunction:: mmdeploy_pipeline_apply
.. doxygenfunction:: mmdeploy_pipeline_apply_async
.. doxygenfunction:: mmdeploy_pipeline_destroy

View File

@ -0,0 +1,31 @@
====================
pose_detector.h
====================
.. doxygenstruct:: mmdeploy_pose_detection_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_pose_detector_t
.. doxygenfunction:: mmdeploy_pose_detector_create
.. doxygenfunction:: mmdeploy_pose_detector_create_by_path
.. doxygenfunction:: mmdeploy_pose_detector_apply
.. doxygenfunction:: mmdeploy_pose_detector_apply_bbox
.. doxygenfunction:: mmdeploy_pose_detector_release_result
.. doxygenfunction:: mmdeploy_pose_detector_destroy
.. doxygenfunction:: mmdeploy_pose_detector_create_v2
.. doxygenfunction:: mmdeploy_pose_detector_create_input
.. doxygenfunction:: mmdeploy_pose_detector_apply_v2
.. doxygenfunction:: mmdeploy_pose_detector_apply_async
.. doxygenfunction:: mmdeploy_pose_detector_get_result

View File

@ -0,0 +1,29 @@
====================
pose_tracker.h
====================
.. doxygentypedef:: mmdeploy_pose_tracker_t
.. doxygentypedef:: mmdeploy_pose_tracker_state_t
.. doxygenstruct:: mmdeploy_pose_tracker_param_t
:members:
:undoc-members:
.. doxygenstruct:: mmdeploy_pose_tracker_target_t
:members:
:undoc-members:
.. doxygenfunction:: mmdeploy_pose_tracker_default_params
.. doxygenfunction:: mmdeploy_pose_tracker_create
.. doxygenfunction:: mmdeploy_pose_tracker_destroy
.. doxygenfunction:: mmdeploy_pose_tracker_create_state
.. doxygenfunction:: mmdeploy_pose_tracker_destroy_state
.. doxygenfunction:: mmdeploy_pose_tracker_apply
.. doxygenfunction:: mmdeploy_pose_tracker_release_result

View File

@ -0,0 +1,29 @@
====================
rotated_detector.h
====================
.. doxygenstruct:: mmdeploy_rotated_detection_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_rotated_detector_t
.. doxygenfunction:: mmdeploy_rotated_detector_create
.. doxygenfunction:: mmdeploy_rotated_detector_create_by_path
.. doxygenfunction:: mmdeploy_rotated_detector_apply
.. doxygenfunction:: mmdeploy_rotated_detector_release_result
.. doxygenfunction:: mmdeploy_rotated_detector_destroy
.. doxygenfunction:: mmdeploy_rotated_detector_create_v2
.. doxygenfunction:: mmdeploy_rotated_detector_create_input
.. doxygenfunction:: mmdeploy_rotated_detector_apply_v2
.. doxygenfunction:: mmdeploy_rotated_detector_apply_async
.. doxygenfunction:: mmdeploy_rotated_detector_get_result

View File

@ -0,0 +1,29 @@
====================
segmentor.h
====================
.. doxygenstruct:: mmdeploy_segmentation_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_segmentor_t
.. doxygenfunction:: mmdeploy_segmentor_create
.. doxygenfunction:: mmdeploy_segmentor_create_by_path
.. doxygenfunction:: mmdeploy_segmentor_apply
.. doxygenfunction:: mmdeploy_segmentor_release_result
.. doxygenfunction:: mmdeploy_segmentor_destroy
.. doxygenfunction:: mmdeploy_segmentor_create_v2
.. doxygenfunction:: mmdeploy_segmentor_create_input
.. doxygenfunction:: mmdeploy_segmentor_apply_v2
.. doxygenfunction:: mmdeploy_segmentor_apply_async
.. doxygenfunction:: mmdeploy_segmentor_get_result

View File

@ -0,0 +1,35 @@
====================
text_detector.h
====================
.. doxygenstruct:: mmdeploy_text_detection_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_text_detector_t
.. doxygenfunction:: mmdeploy_text_detector_create
.. doxygenfunction:: mmdeploy_text_detector_create_by_path
.. doxygenfunction:: mmdeploy_text_detector_apply
.. doxygenfunction:: mmdeploy_text_detector_release_result
.. doxygenfunction:: mmdeploy_text_detector_destroy
.. doxygenfunction:: mmdeploy_text_detector_create_v2
.. doxygenfunction:: mmdeploy_text_detector_create_input
.. doxygenfunction:: mmdeploy_text_detector_apply_v2
.. doxygenfunction:: mmdeploy_text_detector_apply_async
.. doxygenfunction:: mmdeploy_text_detector_get_result
.. doxygentypedef:: mmdeploy_text_detector_continue_t
.. doxygenfunction:: mmdeploy_text_detector_apply_async_v3
.. doxygenfunction:: mmdeploy_text_detector_continue_async

View File

@ -0,0 +1,35 @@
====================
text_recognizer.h
====================
.. doxygenstruct:: mmdeploy_text_recognition_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_text_recognizer_t
.. doxygenfunction:: mmdeploy_text_recognizer_create
.. doxygenfunction:: mmdeploy_text_recognizer_create_by_path
.. doxygenfunction:: mmdeploy_text_recognizer_apply
.. doxygenfunction:: mmdeploy_text_recognizer_apply_bbox
.. doxygenfunction:: mmdeploy_text_recognizer_release_result
.. doxygenfunction:: mmdeploy_text_recognizer_destroy
.. doxygenfunction:: mmdeploy_text_recognizer_create_v2
.. doxygenfunction:: mmdeploy_text_recognizer_create_input
.. doxygenfunction:: mmdeploy_text_recognizer_apply_v2
.. doxygenfunction:: mmdeploy_text_recognizer_apply_async
.. doxygenfunction:: mmdeploy_text_recognizer_apply_async_v3
.. doxygenfunction:: mmdeploy_text_recognizer_continue_async
.. doxygenfunction:: mmdeploy_text_recognizer_get_result

View File

@ -0,0 +1,31 @@
====================
video_recognizer.h
====================
.. doxygenstruct:: mmdeploy_video_recognition_t
:members:
:undoc-members:
.. doxygenstruct:: mmdeploy_video_sample_info_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_video_recognizer_t
.. doxygenfunction:: mmdeploy_video_recognizer_create
.. doxygenfunction:: mmdeploy_video_recognizer_create_by_path
.. doxygenfunction:: mmdeploy_video_recognizer_apply
.. doxygenfunction:: mmdeploy_video_recognizer_release_result
.. doxygenfunction:: mmdeploy_video_recognizer_destroy
.. doxygenfunction:: mmdeploy_video_recognizer_create_v2
.. doxygenfunction:: mmdeploy_video_recognizer_create_input
.. doxygenfunction:: mmdeploy_video_recognizer_apply_v2
.. doxygenfunction:: mmdeploy_video_recognizer_get_result

View File

@ -0,0 +1,21 @@
====================
C API Reference
====================
.. toctree::
:maxdepth: 1
c/common
c/executor
c/model
c/pipeline
c/classifier
c/detector
c/pose_detector
c/pose_tracker
c/rotated_detector
c/segmentor
c/text_detector
c/text_recognizer
c/video_recognizer

View File

@ -0,0 +1,18 @@
========================
SDK Documentation
========================
Setup & Usage
--------------
.. toctree::
:maxdepth: 1
quick_start
API Reference
--------------
.. toctree::
:maxdepth: 1
c_api

View File

@ -0,0 +1,83 @@
# Quick Start
In terms of model deployment, most ML models require some preprocessing steps on the input data and postprocessing steps on the output to get structured output. MMDeploy sdk provides a lot of pre-processing and post-processing process. When you convert and deploy a model, you can enjoy the convenience brought by mmdeploy sdk.
## Model Conversion
You can refer to [convert model](../02-how-to-run/convert_model.md) for more details.
After model conversion with `--dump-info`, the structure of model directory (tensorrt model) is as follows. If you convert to other backend, the structure will be slightly different. The two images are for quick conversion validation.
```bash
├── deploy.json
├── detail.json
├── pipeline.json
├── end2end.onnx
├── end2end.engine
├── output_pytorch.jpg
└── output_tensorrt.jpg
```
The files related to sdk are:
- deploy.json // model information.
- pipeline.json // inference information.
- end2end.engine // model file for tensort, will be different for other backends.
SDK can read the model directory directly or you can pack the related files to zip archive for better distribution or encryption. To read the zip file, the sdk should build with `-DMMDEPLOY_ZIP_MODEL=ON`
## SDK Inference
Generally speaking, there are three steps to inference a model.
- Create a pipeline
- Load the data
- Model inference
We use `classifier` as an example to show these three steps.
### Create a pipeline
#### Load model from disk
```cpp
std::string model_path = "/data/resnet"; // or "/data/resnet.zip" if build with `-DMMDEPLOY_ZIP_MODEL=ON`
mmdeploy_model_t model;
mmdeploy_model_create_by_path(model_path, &model);
mmdeploy_classifier_t classifier{};
mmdeploy_classifier_create(model, "cpu", 0, &classifier);
```
#### Load model from memory
```cpp
std::string model_path = "/data/resnet.zip"
std::ifstream ifs(model_path, std::ios::binary); // /path/to/zipmodel
ifs.seekg(0, std::ios::end);
auto size = ifs.tellg();
ifs.seekg(0, std::ios::beg);
std::string str(size, '\0'); // binary data, should decrypt if it's encrypted
ifs.read(str.data(), size);
mmdeploy_model_t model;
mmdeploy_model_create(str.data(), size, &model);
mmdeploy_classifier_t classifier{};
mmdeploy_classifier_create(model, "cpu", 0, &classifier);
```
### Load the data
```cpp
cv::Mat img = cv::imread(image_path);
```
### Model inference
```cpp
mmdeploy_classification_t* res{};
int* res_count{};
mmdeploy_classifier_apply(classifier, &mat, 1, &res, &res_count);
```

View File

@ -12,6 +12,7 @@
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import subprocess
import sys
import pytorch_sphinx_theme
@ -48,6 +49,7 @@ release = __version__
# ones.
extensions = [
'breathe',
'sphinx.ext.autodoc',
'sphinx.ext.doctest',
'sphinx.ext.napoleon',
@ -58,6 +60,19 @@ extensions = [
'sphinx_copybutton',
'sphinxcontrib.mermaid'
] # yapf: disable
breathe_default_project = 'mmdeployapi'
breathe_projects = {'mmdeployapi': '../cppapi/docs/xml'}
def generate_doxygen_xml(app):
try:
folder = '../cppapi'
retcode = subprocess.call('cd %s; doxygen' % folder, shell=True)
if retcode < 0:
sys.stderr.write('doxygen terminated by signal %s' % (-retcode))
except Exception as e:
sys.stderr.write('doxygen execution failed: %s' % e)
autodoc_mock_imports = ['tensorrt']
@ -212,6 +227,8 @@ copybutton_prompt_is_regexp = True
def setup(app):
# Add hook for building doxygen xml when needed
app.connect('builder-inited', generate_doxygen_xml)
app.add_config_value('no_underscore_emphasis', False, 'env')
app.add_config_value('m2r_parse_relative_links', False, 'env')
app.add_config_value('m2r_anonymous_references', False, 'env')

View File

@ -28,6 +28,12 @@
02-how-to-run/quantize_model.md
02-how-to-run/useful_tools.md
.. toctree::
:maxdepth: 1
:caption: SDK 使用
sdk_usage/index.rst
.. toctree::
:maxdepth: 1
:caption: Benchmark

View File

@ -0,0 +1,30 @@
====================
classifier.h
====================
.. doxygenstruct:: mmdeploy_classification_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_classifier_t
.. doxygenfunction:: mmdeploy_classifier_create
.. doxygenfunction:: mmdeploy_classifier_create_by_path
.. doxygenfunction:: mmdeploy_classifier_apply
.. doxygenfunction:: mmdeploy_classifier_release_result
.. doxygenfunction:: mmdeploy_classifier_destroy
.. doxygenfunction:: mmdeploy_classifier_create_v2
.. doxygenfunction:: mmdeploy_classifier_create_input
.. doxygenfunction:: mmdeploy_classifier_apply_v2
.. doxygenfunction:: mmdeploy_classifier_apply_async
.. doxygenfunction:: mmdeploy_classifier_get_result

View File

@ -0,0 +1,52 @@
====================
common.h
====================
.. doxygenenum:: mmdeploy_pixel_format_t
.. doxygenenum:: mmdeploy_data_type_t
.. doxygenenum:: mmdeploy_status_t
.. doxygentypedef:: mmdeploy_device_t
.. doxygentypedef:: mmdeploy_profiler_t
.. doxygenstruct:: mmdeploy_mat_t
:members:
:undoc-members:
.. doxygenstruct:: mmdeploy_rect_t
:members:
:undoc-members:
.. doxygenstruct:: mmdeploy_point_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_value_t
.. doxygentypedef:: mmdeploy_context_t
.. doxygenfunction:: mmdeploy_value_copy
.. doxygenfunction:: mmdeploy_value_destroy
.. doxygenfunction:: mmdeploy_device_create
.. doxygenfunction:: mmdeploy_device_destroy
.. doxygenfunction:: mmdeploy_profiler_create
.. doxygenfunction:: mmdeploy_profiler_destroy
.. doxygenfunction:: mmdeploy_context_create
.. doxygenfunction:: mmdeploy_context_create_by_device
.. doxygenfunction:: mmdeploy_context_destroy
.. doxygenfunction:: mmdeploy_context_add
.. doxygenfunction:: mmdeploy_common_create_input

View File

@ -0,0 +1,33 @@
====================
detector.h
====================
.. doxygenstruct:: mmdeploy_instance_mask_t
:members:
:undoc-members:
.. doxygenstruct:: mmdeploy_detection_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_detector_t
.. doxygenfunction:: mmdeploy_detector_create
.. doxygenfunction:: mmdeploy_detector_create_by_path
.. doxygenfunction:: mmdeploy_detector_apply
.. doxygenfunction:: mmdeploy_detector_release_result
.. doxygenfunction:: mmdeploy_detector_destroy
.. doxygenfunction:: mmdeploy_detector_create_v2
.. doxygenfunction:: mmdeploy_detector_create_input
.. doxygenfunction:: mmdeploy_detector_apply_v2
.. doxygenfunction:: mmdeploy_detector_apply_async
.. doxygenfunction:: mmdeploy_detector_get_result

View File

@ -0,0 +1,59 @@
====================
executor.h
====================
.. doxygentypedef:: mmdeploy_then_fn_t
.. doxygentypedef:: mmdeploy_then_fn_v2_t
.. doxygentypedef:: mmdeploy_then_fn_v3_t
.. doxygentypedef:: mmdeploy_sender_t
.. doxygentypedef:: mmdeploy_scheduler_t
.. doxygentypedef:: mmdeploy_let_value_fn_t
.. doxygenfunction:: mmdeploy_executor_inline
.. doxygenfunction:: mmdeploy_executor_system_pool
.. doxygenfunction:: mmdeploy_executor_create_thread_pool
.. doxygenfunction:: mmdeploy_executor_create_thread
.. doxygenfunction:: mmdeploy_executor_dynamic_batch
.. doxygenfunction:: mmdeploy_scheduler_destroy
.. doxygenfunction:: mmdeploy_sender_copy
.. doxygenfunction:: mmdeploy_sender_destroy
.. doxygenfunction:: mmdeploy_executor_just
.. doxygenfunction:: mmdeploy_executor_schedule
.. doxygenfunction:: mmdeploy_executor_transfer_just
.. doxygenfunction:: mmdeploy_executor_transfer
.. doxygenfunction:: mmdeploy_executor_on
.. doxygenfunction:: mmdeploy_executor_then
.. doxygenfunction:: mmdeploy_executor_let_value
.. doxygenfunction:: mmdeploy_executor_split
.. doxygenfunction:: mmdeploy_executor_when_all
.. doxygenfunction:: mmdeploy_executor_ensure_started
.. doxygenfunction:: mmdeploy_executor_start_detached
.. doxygenfunction:: mmdeploy_executor_sync_wait
.. doxygenfunction:: mmdeploy_executor_sync_wait_v2
.. doxygenfunction:: mmdeploy_executor_execute

View File

@ -0,0 +1,11 @@
====================
model.h
====================
.. doxygentypedef:: mmdeploy_model_t
.. doxygenfunction:: mmdeploy_model_create_by_path
.. doxygenfunction:: mmdeploy_model_create
.. doxygenfunction:: mmdeploy_model_destroy

View File

@ -0,0 +1,16 @@
====================
pipeline.h
====================
.. doxygentypedef:: mmdeploy_pipeline_t
.. doxygenfunction:: mmdeploy_pipeline_create_v3
.. doxygenfunction:: mmdeploy_pipeline_create_from_model
.. doxygenfunction:: mmdeploy_pipeline_apply
.. doxygenfunction:: mmdeploy_pipeline_apply_async
.. doxygenfunction:: mmdeploy_pipeline_destroy

View File

@ -0,0 +1,31 @@
====================
pose_detector.h
====================
.. doxygenstruct:: mmdeploy_pose_detection_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_pose_detector_t
.. doxygenfunction:: mmdeploy_pose_detector_create
.. doxygenfunction:: mmdeploy_pose_detector_create_by_path
.. doxygenfunction:: mmdeploy_pose_detector_apply
.. doxygenfunction:: mmdeploy_pose_detector_apply_bbox
.. doxygenfunction:: mmdeploy_pose_detector_release_result
.. doxygenfunction:: mmdeploy_pose_detector_destroy
.. doxygenfunction:: mmdeploy_pose_detector_create_v2
.. doxygenfunction:: mmdeploy_pose_detector_create_input
.. doxygenfunction:: mmdeploy_pose_detector_apply_v2
.. doxygenfunction:: mmdeploy_pose_detector_apply_async
.. doxygenfunction:: mmdeploy_pose_detector_get_result

View File

@ -0,0 +1,29 @@
====================
pose_tracker.h
====================
.. doxygentypedef:: mmdeploy_pose_tracker_t
.. doxygentypedef:: mmdeploy_pose_tracker_state_t
.. doxygenstruct:: mmdeploy_pose_tracker_param_t
:members:
:undoc-members:
.. doxygenstruct:: mmdeploy_pose_tracker_target_t
:members:
:undoc-members:
.. doxygenfunction:: mmdeploy_pose_tracker_default_params
.. doxygenfunction:: mmdeploy_pose_tracker_create
.. doxygenfunction:: mmdeploy_pose_tracker_destroy
.. doxygenfunction:: mmdeploy_pose_tracker_create_state
.. doxygenfunction:: mmdeploy_pose_tracker_destroy_state
.. doxygenfunction:: mmdeploy_pose_tracker_apply
.. doxygenfunction:: mmdeploy_pose_tracker_release_result

View File

@ -0,0 +1,29 @@
====================
rotated_detector.h
====================
.. doxygenstruct:: mmdeploy_rotated_detection_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_rotated_detector_t
.. doxygenfunction:: mmdeploy_rotated_detector_create
.. doxygenfunction:: mmdeploy_rotated_detector_create_by_path
.. doxygenfunction:: mmdeploy_rotated_detector_apply
.. doxygenfunction:: mmdeploy_rotated_detector_release_result
.. doxygenfunction:: mmdeploy_rotated_detector_destroy
.. doxygenfunction:: mmdeploy_rotated_detector_create_v2
.. doxygenfunction:: mmdeploy_rotated_detector_create_input
.. doxygenfunction:: mmdeploy_rotated_detector_apply_v2
.. doxygenfunction:: mmdeploy_rotated_detector_apply_async
.. doxygenfunction:: mmdeploy_rotated_detector_get_result

View File

@ -0,0 +1,29 @@
====================
segmentor.h
====================
.. doxygenstruct:: mmdeploy_segmentation_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_segmentor_t
.. doxygenfunction:: mmdeploy_segmentor_create
.. doxygenfunction:: mmdeploy_segmentor_create_by_path
.. doxygenfunction:: mmdeploy_segmentor_apply
.. doxygenfunction:: mmdeploy_segmentor_release_result
.. doxygenfunction:: mmdeploy_segmentor_destroy
.. doxygenfunction:: mmdeploy_segmentor_create_v2
.. doxygenfunction:: mmdeploy_segmentor_create_input
.. doxygenfunction:: mmdeploy_segmentor_apply_v2
.. doxygenfunction:: mmdeploy_segmentor_apply_async
.. doxygenfunction:: mmdeploy_segmentor_get_result

View File

@ -0,0 +1,35 @@
====================
text_detector.h
====================
.. doxygenstruct:: mmdeploy_text_detection_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_text_detector_t
.. doxygenfunction:: mmdeploy_text_detector_create
.. doxygenfunction:: mmdeploy_text_detector_create_by_path
.. doxygenfunction:: mmdeploy_text_detector_apply
.. doxygenfunction:: mmdeploy_text_detector_release_result
.. doxygenfunction:: mmdeploy_text_detector_destroy
.. doxygenfunction:: mmdeploy_text_detector_create_v2
.. doxygenfunction:: mmdeploy_text_detector_create_input
.. doxygenfunction:: mmdeploy_text_detector_apply_v2
.. doxygenfunction:: mmdeploy_text_detector_apply_async
.. doxygenfunction:: mmdeploy_text_detector_get_result
.. doxygentypedef:: mmdeploy_text_detector_continue_t
.. doxygenfunction:: mmdeploy_text_detector_apply_async_v3
.. doxygenfunction:: mmdeploy_text_detector_continue_async

View File

@ -0,0 +1,35 @@
====================
text_recognizer.h
====================
.. doxygenstruct:: mmdeploy_text_recognition_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_text_recognizer_t
.. doxygenfunction:: mmdeploy_text_recognizer_create
.. doxygenfunction:: mmdeploy_text_recognizer_create_by_path
.. doxygenfunction:: mmdeploy_text_recognizer_apply
.. doxygenfunction:: mmdeploy_text_recognizer_apply_bbox
.. doxygenfunction:: mmdeploy_text_recognizer_release_result
.. doxygenfunction:: mmdeploy_text_recognizer_destroy
.. doxygenfunction:: mmdeploy_text_recognizer_create_v2
.. doxygenfunction:: mmdeploy_text_recognizer_create_input
.. doxygenfunction:: mmdeploy_text_recognizer_apply_v2
.. doxygenfunction:: mmdeploy_text_recognizer_apply_async
.. doxygenfunction:: mmdeploy_text_recognizer_apply_async_v3
.. doxygenfunction:: mmdeploy_text_recognizer_continue_async
.. doxygenfunction:: mmdeploy_text_recognizer_get_result

View File

@ -0,0 +1,31 @@
====================
video_recognizer.h
====================
.. doxygenstruct:: mmdeploy_video_recognition_t
:members:
:undoc-members:
.. doxygenstruct:: mmdeploy_video_sample_info_t
:members:
:undoc-members:
.. doxygentypedef:: mmdeploy_video_recognizer_t
.. doxygenfunction:: mmdeploy_video_recognizer_create
.. doxygenfunction:: mmdeploy_video_recognizer_create_by_path
.. doxygenfunction:: mmdeploy_video_recognizer_apply
.. doxygenfunction:: mmdeploy_video_recognizer_release_result
.. doxygenfunction:: mmdeploy_video_recognizer_destroy
.. doxygenfunction:: mmdeploy_video_recognizer_create_v2
.. doxygenfunction:: mmdeploy_video_recognizer_create_input
.. doxygenfunction:: mmdeploy_video_recognizer_apply_v2
.. doxygenfunction:: mmdeploy_video_recognizer_get_result

View File

@ -0,0 +1,21 @@
====================
C API Reference
====================
.. toctree::
:maxdepth: 1
c/common
c/executor
c/model
c/pipeline
c/classifier
c/detector
c/pose_detector
c/pose_tracker
c/rotated_detector
c/segmentor
c/text_detector
c/text_recognizer
c/video_recognizer

View File

@ -0,0 +1,18 @@
========================
SDK 使用说明
========================
安装 & 使用方法
----------------
.. toctree::
:maxdepth: 1
quick_start
API Reference
----------------
.. toctree::
:maxdepth: 1
c_api

View File

@ -0,0 +1,83 @@
# 快速开始
大多数 ML 模型除了推理外,需要对输入数据进行一些预处理,并对输出进行一些后处理步骤,以获得结构化输出。 MMDeploy sdk 提供了常见的预处理和后处理步骤。 当您使用 MMDeploy 进行模型转换后您可以直接使用mmdeploy sdk 进行推理。
## 模型转换
可参考 [convert model](../02-how-to-run/convert_model.md) 获得更多信息.
转模型时通过增加 `--dump-info` 参数得到如下的目录结构(tensorrt)。 如果转换为其他后端,结构会略有不同。其中两个图片为不同后端推理结果
```bash
├── deploy.json
├── detail.json
├── pipeline.json
├── end2end.onnx
├── end2end.engine
├── output_pytorch.jpg
└── output_tensorrt.jpg
```
和SDK相关的文件有
- deploy.json // 模型信息.
- pipeline.json // pipeline信息包括前处理、模型以及后处理.
- end2end.engine // 模型文件
SDK 可以直接读取模型目录,也可以读取相关文件打包成 zip 压缩包。 要读取 zip 文件sdk 在编译时要设置 `-DMMDEPLOY_ZIP_MODEL=ON`
## SDK 推理
一般来讲,模型推理包含以下三个部分。
- 创建 pipeline
- 读取数据
- 模型推理
以下使用 `classifier` 作为例子来展示三个步骤.
### 创建 pipeline
#### 从硬盘中加载模型
```cpp
std::string model_path = "/data/resnet"; // or "/data/resnet.zip" if build with `-DMMDEPLOY_ZIP_MODEL=ON`
mmdeploy_model_t model;
mmdeploy_model_create_by_path(model_path, &model);
mmdeploy_classifier_t classifier{};
mmdeploy_classifier_create(model, "cpu", 0, &classifier);
```
#### 从内存中加载模型
```cpp
std::string model_path = "/data/resnet.zip"
std::ifstream ifs(model_path, std::ios::binary); // /path/to/zipmodel
ifs.seekg(0, std::ios::end);
auto size = ifs.tellg();
ifs.seekg(0, std::ios::beg);
std::string str(size, '\0'); // binary data, should decrypt if it's encrypted
ifs.read(str.data(), size);
mmdeploy_model_t model;
mmdeploy_model_create(str.data(), size, &model);
mmdeploy_classifier_t classifier{};
mmdeploy_classifier_create(model, "cpu", 0, &classifier);
```
### 读取数据
```cpp
cv::Mat img = cv::imread(image_path);
```
### 模型推理
```cpp
mmdeploy_classification_t* res{};
int* res_count{};
mmdeploy_classifier_apply(classifier, &mat, 1, &res, &res_count);
```

View File

@ -1,3 +1,4 @@
breathe
h5py
mmcv
mmengine