Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleX
提交
a3b2fe68
P
PaddleX
项目概览
PaddlePaddle
/
PaddleX
通知
138
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
43
列表
看板
标记
里程碑
合并请求
5
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleX
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
43
Issue
43
列表
看板
标记
里程碑
合并请求
5
合并请求
5
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
a3b2fe68
编写于
9月 24, 2020
作者:
J
jiangjiajun
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add api for cpp
上级
98f95105
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
136 addition
and
0 deletion
+136
-0
docs/deploy/server/cpp/api.md
docs/deploy/server/cpp/api.md
+135
-0
docs/deploy/server/cpp/index.rst
docs/deploy/server/cpp/index.rst
+1
-0
未找到文件。
docs/deploy/server/cpp/api.md
0 → 100644
浏览文件 @
a3b2fe68
# C++代码接口说明
## 头文件
`include/paddlex/paddlex.h`
## 类 PaddleX::Model
模型类,用于加载PaddleX训练的模型。
### 模型加载
```
PaddleX::Model::Init(const std::string& model_dir,
bool use_gpu = false,
bool use_trt = false,
bool use_mkl = true,
bool mkl_thread_num = 4,
int gpu_id = 0,
std::string key = "",
bool use_ir_optim = true)
```
**参数**
-
model_dir: 模型目录路径
-
use_gpu: 是否使用gpu预测
-
use_trt: 是否使用TensorRT
-
use_mkl: 是否使用MKLDNN加速模型在CPU上的预测性能
-
mkl_thread_num: 使用MKLDNN时,线程数量
-
gpu_id: 使用gpu的id号
-
key: 模型解密密钥,此参数用于加载加密的PaddleX模型时使用
-
use_ir_optim: 是否加速模型后进行图优化
**返回值**
-
返回true或false,表示模型是否加载成功
### 模型预测推断
**分类模型单张图片预测**
```
PaddleX::Model::predict(const cv::Mat& im, ClsResult* result)
```
**分类模型多张图片批预测**
```
PaddleX::Model::predict(const std::vector<cv::Mat>& im_batch, std::vector<ClsResult>* results)
```
**目标检测/实例分割模型单张图片预测**
```
PaddleX::Model::predict(const cv::Mat& im, DetResult* result)
```
**目标检测/实例分割模型多张图片批预测**
```
PaddleX::Model::predict(const std::vector<cv::Mat>& im_batch, std::vector<DetResult>* results)
```
**语义分割模型单张图片预测**
```
PaddleX::Model::predict(const cv::Mat& im, SegResult* result)
```
**语义分割模型多张图片批预测**
```
PaddleX::Model::predict(const std::vector<cv::Mat>& im_batch, std::vector<SegResult>* results)
```
各接口返回值为true或false,用于表示是否预测成功
预测时,需传入cv::Mat结构体,结构需与如下示代码加载的结构体一致
```
cv::Mat im = cv::imread('test.jpg', 1);
```
当使用批预测时,注意会传入的vector中所有数据作为一个批次进行预测,因此vector越大,所需要使用的GPU显存会越高。
预测时,同时传入ClsResult/DetResult/SegResult结构体,用于存放模型的预测结果,各结构体说明如下
```
// 分类模型预测结果
class ClsResult {
public:
int category_id; // 类别id
std::string category; // 类别标签
float score; // 预测置信度
std::string type = "cls";
}
// 目标检测/实例分割模型预测结果
class DetResult {
public:
std::vector<Box> boxes; // 预测结果中的各个目标框
int mask_resolution;
std::string type = "det";
}
// 语义分割模型预测结果
class SegResult : public BaseResult {
public:
Mask<int64_t> label_map; // 预测分割中各像素的类别
Mask<float> score_map; // 预测分割中各像素的置信度
std::string type = "seg";
}
struct Box {
int category_id; // 类别id
std::string category; // 类别标签
float score; // 置信度
std::vector<float> coordinate; // 4个元素值,表示xmin, ymin, width, height
Mask<int> mask; // 实例分割中,用于表示Box内的分割结果
}
struct Mask {
std::vector<T> data; // 分割中的label map或score map
std::vector<int> shape; // 表示分割图的shape
}
```
## 预测结果可视化
### 目标检测/实例分割结果可视化
```
PaddleX::Visualize(const cv::Mat& img, // 原图
const DetResult& result, // 预测结果
const std::map<int, std::string>& labels // 各类别信息<id, label_name>
)
```
返回cv::Mat结构体,即为可视化后的结果
### 语义分割结果可视化
```
PaddleX::Visualize(const cv::Mat& img, // 原图
const SegResult& result, // 预测结果
const std::map<int, std::string>& labels // 各类别信息<id, label_name>
)
```
返回cv::Mat结构体,即为可视化后的结果
## 代码示例
-
图像分类
[
PaddleX/deploy/cpp/demo/classifier.cpp
](
https://github.com/PaddlePaddle/PaddleX/blob/develop/deploy/cpp/demo/classifier.cpp
)
-
目标检测/实例分割
[
PaddleX/deploy/cpp/demo/detector.cpp
](
https://github.com/PaddlePaddle/PaddleX/blob/develop/deploy/cpp/demo/detector.cpp
)
-
语义分割
[
PaddleX/deploy/cpp/demo/segmenter.cpp
](
https://github.com/PaddlePaddle/PaddleX/blob/develop/deploy/cpp/demo/segmenter.cpp
)
docs/deploy/server/cpp/index.rst
浏览文件 @
a3b2fe68
...
...
@@ -8,3 +8,4 @@ C++部署
windows.md
linux.md
api.md
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录