Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
s920243400
PaddleDetection
提交
1652af5c
P
PaddleDetection
项目概览
s920243400
/
PaddleDetection
与 Fork 源项目一致
Fork自
PaddlePaddle / PaddleDetection
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleDetection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
1652af5c
编写于
8月 06, 2020
作者:
C
channings
提交者:
GitHub
8月 06, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
deploy code support camera (#1003)
* deploy code support camera
上级
31bca148
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
39 addition
and
18 deletion
+39
-18
deploy/cpp/docs/linux_build.md
deploy/cpp/docs/linux_build.md
+7
-6
deploy/cpp/docs/windows_vs2019_build.md
deploy/cpp/docs/windows_vs2019_build.md
+3
-2
deploy/cpp/src/main.cc
deploy/cpp/src/main.cc
+8
-3
deploy/python/README.md
deploy/python/README.md
+3
-2
deploy/python/infer.py
deploy/python/infer.py
+18
-5
未找到文件。
deploy/cpp/docs/linux_build.md
浏览文件 @
1652af5c
...
...
@@ -91,11 +91,12 @@ make
编译成功后,预测入口程序为
`build/main`
其主要命令参数说明如下:
| 参数 | 说明 |
| ---- | ---- |
| model_dir | 导出的预测模型所在路径 |
| image_path | 要预测的图片文件路径 |
| video_path | 要预测的视频文件路径 |
| use_gpu | 是否使用 GPU 预测, 支持值为0或1(默认值为0)|
| gpu_id | 指定进行推理的GPU device id(默认值为0)|
| --model_dir | 导出的预测模型所在路径 |
| --image_path | 要预测的图片文件路径 |
| --video_path | 要预测的视频文件路径 |
| --camera_id | Option | 用来预测的摄像头ID,默认为-1(表示不使用摄像头预测)|
| --use_gpu | 是否使用 GPU 预测, 支持值为0或1(默认值为0)|
| --gpu_id | 指定进行推理的GPU device id(默认值为0)|
| --run_mode |使用GPU时,默认为fluid, 可选(fluid/trt_fp32/trt_fp16)|
**注意**
: 如果同时设置了
`video_path`
和
`image_path`
,程序仅预测
`video_path`
。
...
...
@@ -107,7 +108,7 @@ make
./build/main
--model_dir
=
/root/projects/models/yolov3_darknet
--image_path
=
/root/projects/images/test.jpeg
```
图片文件
`可视化预测结果`
会保存在当前目录下
`output.jp
e
g`
文件中。
图片文件
`可视化预测结果`
会保存在当前目录下
`output.jpg`
文件中。
`样例二`
:
...
...
deploy/cpp/docs/windows_vs2019_build.md
浏览文件 @
1652af5c
...
...
@@ -67,7 +67,7 @@ fluid_inference
| 参数名 | 含义 |
| ---- | ---- |
|
*
CUDA_LIB | CUDA的库路径 |
| CUDNN_LIB | CUDNN的库路径 |
|
*
CUDNN_LIB | CUDNN的库路径 |
| OPENCV_DIR | OpenCV的安装路径, |
| PADDLE_DIR | Paddle预测库的路径 |
...
...
@@ -95,6 +95,7 @@ cd D:\projects\PaddleDetection\deploy\cpp\out\build\x64-Release
| model_dir | 导出的预测模型所在路径 |
| image_path | 要预测的图片文件路径 |
| video_path | 要预测的视频文件路径 |
| use_camera | 是否预测摄像头 |
| use_gpu | 是否使用 GPU 预测, 支持值为0或1(默认值为0)|
| gpu_id | 指定进行推理的GPU device id(默认值为0)|
...
...
@@ -107,7 +108,7 @@ cd D:\projects\PaddleDetection\deploy\cpp\out\build\x64-Release
.
\m
ain
--model_dir
=
D:
\\
models
\\
yolov3_darknet
--image_path
=
D:
\\
images
\\
test.jpeg
```
图片文件
`可视化预测结果`
会保存在当前目录下
`output.jp
e
g`
文件中。
图片文件
`可视化预测结果`
会保存在当前目录下
`output.jpg`
文件中。
`样例二`
:
...
...
deploy/cpp/src/main.cc
浏览文件 @
1652af5c
...
...
@@ -27,12 +27,17 @@ DEFINE_string(video_path, "", "Path of input video");
DEFINE_bool
(
use_gpu
,
false
,
"Infering with GPU or CPU"
);
DEFINE_string
(
run_mode
,
"fluid"
,
"Mode of running(fluid/trt_fp32/trt_fp16)"
);
DEFINE_int32
(
gpu_id
,
0
,
"Device id of GPU to execute"
);
DEFINE_int32
(
camera_id
,
-
1
,
"Device id of camera to predict"
);
void
PredictVideo
(
const
std
::
string
&
video_path
,
PaddleDetection
::
ObjectDetector
*
det
)
{
// Open video
cv
::
VideoCapture
capture
;
capture
.
open
(
video_path
.
c_str
());
if
(
FLAGS_camera_id
!=
-
1
){
capture
.
open
(
FLAGS_camera_id
);
}
else
{
capture
.
open
(
video_path
.
c_str
());
}
if
(
!
capture
.
isOpened
())
{
printf
(
"can not open video : %s
\n
"
,
video_path
.
c_str
());
return
;
...
...
@@ -111,7 +116,7 @@ void PredictImage(const std::string& image_path,
compression_params
.
push_back
(
CV_IMWRITE_JPEG_QUALITY
);
compression_params
.
push_back
(
95
);
cv
::
imwrite
(
"output.jpg"
,
vis_img
,
compression_params
);
printf
(
"Visualized output saved as output.jp
e
g
\n
"
);
printf
(
"Visualized output saved as output.jpg
\n
"
);
}
int
main
(
int
argc
,
char
**
argv
)
{
...
...
@@ -133,7 +138,7 @@ int main(int argc, char** argv) {
PaddleDetection
::
ObjectDetector
det
(
FLAGS_model_dir
,
FLAGS_use_gpu
,
FLAGS_run_mode
,
FLAGS_gpu_id
);
// Do inference on input video or image
if
(
!
FLAGS_video_path
.
empty
())
{
if
(
!
FLAGS_video_path
.
empty
()
or
FLAGS_use_camera
)
{
PredictVideo
(
FLAGS_video_path
,
&
det
);
}
else
if
(
!
FLAGS_image_path
.
empty
())
{
PredictImage
(
FLAGS_image_path
,
&
det
);
...
...
deploy/python/README.md
浏览文件 @
1652af5c
...
...
@@ -42,8 +42,9 @@ python deploy/python/infer.py --model_dir=/path/to/models --image_file=/path/to/
| 参数 | 是否必须|含义 |
|-------|-------|----------|
| --model_dir | Yes|上述导出的模型路径 |
| --image_file | Yes |需要预测的图片 |
| --video_file | Yes |需要预测的视频 |
| --image_file | Option |需要预测的图片 |
| --video_file | Option |需要预测的视频 |
| --camera_id | Option | 用来预测的摄像头ID,默认为-1(表示不使用摄像头预测,可设置为:0 - (摄像头数目-1) ),预测过程中在可视化界面按
`q`
退出输出预测结果到:output/output.mp4|
| --use_gpu |No|是否GPU,默认为False|
| --run_mode |No|使用GPU时,默认为fluid, 可选(fluid/trt_fp32/trt_fp16)|
| --threshold |No|预测得分的阈值,默认为0.5|
...
...
deploy/python/infer.py
浏览文件 @
1652af5c
...
...
@@ -566,15 +566,19 @@ def predict_image():
output_dir
=
FLAGS
.
output_dir
)
def
predict_video
():
def
predict_video
(
camera_id
):
detector
=
Detector
(
FLAGS
.
model_dir
,
use_gpu
=
FLAGS
.
use_gpu
,
run_mode
=
FLAGS
.
run_mode
)
capture
=
cv2
.
VideoCapture
(
FLAGS
.
video_file
)
if
camera_id
!=
-
1
:
capture
=
cv2
.
VideoCapture
(
camera_id
)
video_name
=
'output.mp4'
else
:
capture
=
cv2
.
VideoCapture
(
FLAGS
.
video_file
)
video_name
=
os
.
path
.
split
(
FLAGS
.
video_file
)[
-
1
]
fps
=
30
width
=
int
(
capture
.
get
(
cv2
.
CAP_PROP_FRAME_WIDTH
))
height
=
int
(
capture
.
get
(
cv2
.
CAP_PROP_FRAME_HEIGHT
))
fourcc
=
cv2
.
VideoWriter_fourcc
(
*
'mp4v'
)
video_name
=
os
.
path
.
split
(
FLAGS
.
video_file
)[
-
1
]
if
not
os
.
path
.
exists
(
FLAGS
.
output_dir
):
os
.
makedirs
(
FLAGS
.
output_dir
)
out_path
=
os
.
path
.
join
(
FLAGS
.
output_dir
,
video_name
)
...
...
@@ -594,6 +598,10 @@ def predict_video():
mask_resolution
=
detector
.
config
.
mask_resolution
)
im
=
np
.
array
(
im
)
writer
.
write
(
im
)
if
camera_id
!=
-
1
:
cv2
.
imshow
(
'Mask Detection'
,
im
)
if
cv2
.
waitKey
(
1
)
&
0xFF
==
ord
(
'q'
):
break
writer
.
release
()
...
...
@@ -617,6 +625,11 @@ if __name__ == '__main__':
"--image_file"
,
type
=
str
,
default
=
''
,
help
=
"Path of image file."
)
parser
.
add_argument
(
"--video_file"
,
type
=
str
,
default
=
''
,
help
=
"Path of video file."
)
parser
.
add_argument
(
"--camera_id"
,
type
=
int
,
default
=-
1
,
help
=
"device id of camera to predict."
)
parser
.
add_argument
(
"--run_mode"
,
type
=
str
,
...
...
@@ -647,5 +660,5 @@ if __name__ == '__main__':
assert
"Cannot predict image and video at the same time"
if
FLAGS
.
image_file
!=
''
:
predict_image
()
if
FLAGS
.
video_file
!=
''
:
predict_video
()
if
FLAGS
.
video_file
!=
''
or
FLAGS
.
camera_id
!=
-
1
:
predict_video
(
FLAGS
.
camera_id
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录