未验证 提交 3d94fa0f 编写于 作者: W wangxinxin08 提交者: GitHub

[cherry-pick]modify output path in cpp infer (#1569)

* modify cpp output path

* fix compile error

* modify docs for windows
上级 ee95ba00
...@@ -91,12 +91,15 @@ make ...@@ -91,12 +91,15 @@ make
编译成功后,预测入口程序为`build/main`其主要命令参数说明如下: 编译成功后,预测入口程序为`build/main`其主要命令参数说明如下:
| 参数 | 说明 | | 参数 | 说明 |
| ---- | ---- | | ---- | ---- |
| model_dir | 导出的预测模型所在路径 | | --model_dir | 导出的预测模型所在路径 |
| image_path | 要预测的图片文件路径 | | --image_path | 要预测的图片文件路径 |
| video_path | 要预测的视频文件路径 | | --video_path | 要预测的视频文件路径 |
| use_gpu | 是否使用 GPU 预测, 支持值为0或1(默认值为0)| | --camera_id | Option | 用来预测的摄像头ID,默认为-1(表示不使用摄像头预测)|
| gpu_id | 指定进行推理的GPU device id(默认值为0)| | --use_gpu | 是否使用 GPU 预测, 支持值为0或1(默认值为0)|
| --run_mode |使用GPU时,默认为fluid, 可选(fluid/trt_fp32/trt_fp16)| | --gpu_id | 指定进行推理的GPU device id(默认值为0)|
| --run_mode | 使用GPU时,默认为fluid, 可选(fluid/trt_fp32/trt_fp16)|
| --run_benchmark | 是否重复预测来进行benchmark测速 |
| --output_dir | 输出图片所在的文件夹, 默认为output |
**注意**: 如果同时设置了`video_path``image_path`,程序仅预测`video_path` **注意**: 如果同时设置了`video_path``image_path`,程序仅预测`video_path`
......
...@@ -92,11 +92,15 @@ cd D:\projects\PaddleDetection\deploy\cpp\out\build\x64-Release ...@@ -92,11 +92,15 @@ cd D:\projects\PaddleDetection\deploy\cpp\out\build\x64-Release
| 参数 | 说明 | | 参数 | 说明 |
| ---- | ---- | | ---- | ---- |
| model_dir | 导出的预测模型所在路径 | | --model_dir | 导出的预测模型所在路径 |
| image_path | 要预测的图片文件路径 | | --image_path | 要预测的图片文件路径 |
| video_path | 要预测的视频文件路径 | | --video_path | 要预测的视频文件路径 |
| use_gpu | 是否使用 GPU 预测, 支持值为0或1(默认值为0)| | --camera_id | Option | 用来预测的摄像头ID,默认为-1(表示不使用摄像头预测)|
| gpu_id | 指定进行推理的GPU device id(默认值为0)| | --use_gpu | 是否使用 GPU 预测, 支持值为0或1(默认值为0)|
| --gpu_id | 指定进行推理的GPU device id(默认值为0)|
| --run_mode | 使用GPU时,默认为fluid, 可选(fluid/trt_fp32/trt_fp16)|
| --run_benchmark | 是否重复预测来进行benchmark测速 |
| --output_dir | 输出图片所在的文件夹, 默认为output |
**注意**:如果同时设置了`video_path``image_path`,程序仅预测`video_path` **注意**:如果同时设置了`video_path``image_path`,程序仅预测`video_path`
......
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <vector> #include <vector>
#include <sys/types.h>
#include <sys/stat.h>
#include "include/object_detector.h" #include "include/object_detector.h"
...@@ -33,6 +35,45 @@ DEFINE_bool(run_benchmark, false, "Whether to predict a image_file repeatedly fo ...@@ -33,6 +35,45 @@ DEFINE_bool(run_benchmark, false, "Whether to predict a image_file repeatedly fo
DEFINE_double(threshold, 0.5, "Threshold of score."); DEFINE_double(threshold, 0.5, "Threshold of score.");
DEFINE_string(output_dir, "output", "Directory of output visualization files."); DEFINE_string(output_dir, "output", "Directory of output visualization files.");
static std::string DirName(const std::string &filepath) {
auto pos = filepath.rfind(OS_PATH_SEP);
if (pos == std::string::npos) {
return "";
}
return filepath.substr(0, pos);
}
static bool PathExists(const std::string& path){
#ifdef _WIN32
struct _stat buffer;
return (_stat(path.c_str(), &buffer) == 0);
#else
struct stat buffer;
return (stat(path.c_str(), &buffer) == 0);
#endif // !_WIN32
}
static void MkDir(const std::string& path) {
std::string path_error(path);
path_error += " mkdir failed!";
int ret = 0;
#ifdef _WIN32
ret = _mkdir(path.c_str());
#else
ret = mkdir(path.c_str(), 0755);
#endif // !_WIN32
if (ret != 0) {
throw std::runtime_error(path_error);
}
}
static void MkDirs(const std::string& path) {
if (path.empty()) return;
if (PathExists(path)) return;
MkDirs(DirName(path));
MkDir(path);
}
void PredictVideo(const std::string& video_path, void PredictVideo(const std::string& video_path,
PaddleDetection::ObjectDetector* det) { PaddleDetection::ObjectDetector* det) {
...@@ -128,7 +169,7 @@ void PredictImage(const std::string& image_path, ...@@ -128,7 +169,7 @@ void PredictImage(const std::string& image_path,
std::vector<int> compression_params; std::vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY); compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
compression_params.push_back(95); compression_params.push_back(95);
cv::imwrite(output_dir + "/output.jpg", vis_img, compression_params); cv::imwrite(output_dir + OS_PATH_SEP + "output.jpg", vis_img, compression_params);
printf("Visualized output saved as output.jpg\n"); printf("Visualized output saved as output.jpg\n");
} }
} }
...@@ -155,6 +196,9 @@ int main(int argc, char** argv) { ...@@ -155,6 +196,9 @@ int main(int argc, char** argv) {
if (!FLAGS_video_path.empty() || FLAGS_use_camera) { if (!FLAGS_video_path.empty() || FLAGS_use_camera) {
PredictVideo(FLAGS_video_path, &det); PredictVideo(FLAGS_video_path, &det);
} else if (!FLAGS_image_path.empty()) { } else if (!FLAGS_image_path.empty()) {
if (!PathExists(FLAGS_output_dir)) {
MkDirs(FLAGS_output_dir);
}
PredictImage(FLAGS_image_path, FLAGS_threshold, FLAGS_run_benchmark, &det, FLAGS_output_dir); PredictImage(FLAGS_image_path, FLAGS_threshold, FLAGS_run_benchmark, &det, FLAGS_output_dir);
} }
return 0; return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册