mirror of
https://github.com/PaddlePaddle/FastDeploy.git
synced 2025-10-08 18:11:00 +08:00
111 lines
3.5 KiB
Markdown
111 lines
3.5 KiB
Markdown
# C++部署
|
||
|
||
## 准备预测库
|
||
|
||
参考编译文档[FastDeploy编译](../compile/README.md)进行编译,或直接使用如下预编译库
|
||
|
||
| 编译库 | 平台 | 支持设备 | 说明 |
|
||
|:------ | :---- | :------- | :----- |
|
||
|[fastdeploy-linux-x64-0.0.3.tgz](https://bj.bcebos.com/paddle2onnx/fastdeploy/fastdeploy-linux-x64-0.0.3.tgz) | Linux | CPU | 集成ONNXRuntime |
|
||
|[fastdeploy-linux-x64-gpu-0.0.3.tgz](https://bj.bcebos.com/paddle2onnx/fastdeploy/fastdeploy-linux-x64-gpu-0.0.3.tgz) | Linux | CPU/GPU | 集成ONNXRuntime, TensorRT |
|
||
|[fastdeploy-osx-x86_64-0.0.3.tgz](https://bj.bcebos.com/paddle2onnx/fastdeploy/fastdeploy-osx-x86_64-0.0.3.tgz) | Mac OSX Intel CPU | CPU | 集成ONNXRuntime |
|
||
|[fastdeploy-osx-arm64-0.0.3.tgz](https://bj.bcebos.com/paddle2onnx/fastdeploy/fastdeploy-osx-arm64-0.0.3.tgz) | Mac OSX M1 CPU | CPU | 集成ONNXRuntime |
|
||
|
||
|
||
## 使用
|
||
|
||
FastDeploy提供了多种领域内的模型,可快速完成模型的部署,本文档以YOLOv5在Linux上的部署为例
|
||
|
||
```
|
||
# 下载库并解压
|
||
wget https://bj.bcebos.com/paddle2onnx/fastdeploy/fastdeploy-linux-x64-0.0.3.tgz
|
||
tar xvf fastdeploy-linux-x64-0.0.3.tgz
|
||
|
||
# 下载模型和测试图片
|
||
wget https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.onnx
|
||
wget https://raw.githubusercontent.com/ultralytics/yolov5/master/data/images/bus.jpg
|
||
```
|
||
|
||
### YOLOv5预测代码
|
||
|
||
准备如下`yolov5.cc`代码
|
||
```
|
||
#include "fastdeploy/vision.h"
|
||
|
||
int main() {
|
||
typedef vis = fastdeploy::vision;
|
||
|
||
auto model = vis::ultralytics::YOLOv5("yolov5s.onnx"); // 加载模型
|
||
|
||
if (!model.Initialized()) { // 判断模型是否初始化成功
|
||
std::cerr << "Initialize failed." << std::endl;
|
||
return -1;
|
||
}
|
||
|
||
cv::Mat im = cv::imread("bus.jpg"); // 读入图片
|
||
|
||
vis::DetectionResult res;
|
||
if (!model.Predict(&im, &res)) { // 预测图片
|
||
std::cerr << "Prediction failed." << std::endl;
|
||
return -1;
|
||
}
|
||
|
||
std::cout << res.Str() << std::endl; // 输出检测结果
|
||
return 0;
|
||
}
|
||
```
|
||
|
||
### 编译代码
|
||
|
||
编译前先完成CMakeLists.txt的开发,在`yolov5.cc`同级目录创建`CMakeLists.txt`文件,内容如下
|
||
```
|
||
PROJECT(yolov5_demo C CXX)
|
||
CMAKE_MINIMUM_REQUIRED (VERSION 3.16)
|
||
# 在低版本ABI环境中,可通过如下代码进行兼容性编译
|
||
# add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
|
||
|
||
# 在下面指定下载解压后的fastdeploy库路径
|
||
set(FASTDEPLOY_INSTALL_DIR /ssd1/download/fastdeploy-linux-x64-0.0.3/)
|
||
|
||
include(${FASTDEPLOY_INSTALL_DIR}/FastDeploy.cmake)
|
||
|
||
# 添加FastDeploy依赖头文件
|
||
include_directories(${FASTDEPLOY_INCS})
|
||
|
||
add_executable(yolov5_demo ${PROJECT_SOURCE_DIR}/yolov5.cc)
|
||
message(${FASTDEPLOY_LIBS})
|
||
# 添加FastDeploy库依赖
|
||
target_link_libraries(yolov5_demo ${FASTDEPLOY_LIBS})
|
||
~
|
||
```
|
||
|
||
此时当前目录结构如下所示
|
||
```
|
||
- demo_directory
|
||
|___fastdeploy-linux-x64-0.0.3/ # 预测库解压
|
||
|___yolov5.cc # 示例代码
|
||
|___CMakeLists.txt # cmake文件
|
||
|___yolov5s.onnx # 模型文件
|
||
|___bus.jpeg # 测试图片
|
||
```
|
||
|
||
执行如下命令进行编译
|
||
```
|
||
cmake .
|
||
make -j
|
||
```
|
||
编译后可执行二进制即为当前目录下的`yolov5_demo`,使用如下命令执行
|
||
```
|
||
./yolov5_demo
|
||
```
|
||
|
||
即会加载模型进行推理,得到结果如下
|
||
```
|
||
DetectionResult: [xmin, ymin, xmax, ymax, score, label_id]
|
||
223.395126,403.948669, 345.337189, 867.339050, 0.856906, 0
|
||
668.301758,400.781372, 808.441772, 882.534973, 0.829716, 0
|
||
50.210758,398.571289, 243.123383, 905.016846, 0.805375, 0
|
||
23.768217,214.979355, 802.627869, 778.840820, 0.756311, 5
|
||
0.737200,552.281006, 78.617218, 890.945007, 0.363471, 0
|
||
```
|