Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleSeg
提交
8262544f
P
PaddleSeg
项目概览
PaddlePaddle
/
PaddleSeg
通知
285
Star
8
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
53
列表
看板
标记
里程碑
合并请求
3
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleSeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
53
Issue
53
列表
看板
标记
里程碑
合并请求
3
合并请求
3
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8262544f
编写于
3月 30, 2020
作者:
S
sjtubinlong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add python infer
上级
e7ede460
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
106 addition
and
0 deletion
+106
-0
contrib/RealTimeHumanSeg/python/infer.py
contrib/RealTimeHumanSeg/python/infer.py
+106
-0
未找到文件。
contrib/RealTimeHumanSeg/python/infer.py
0 → 100644
浏览文件 @
8262544f
# coding: utf8
# copyright (c) 2019 PaddlePaddle Authors. All Rights Reserve.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import
os
import
sys
import
ast
import
time
import
json
import
argparse
import
numpy
as
np
import
cv2
import
paddle.fluid
as
fluid
def
LoadModel
(
model_dir
,
use_gpu
=
False
):
prog_file
=
os
.
path
.
join
(
model_dir
,
'__model__'
)
params_file
=
os
.
path
.
join
(
model_dir
,
'__params__'
)
config
=
fluid
.
core
.
AnalysisConfig
(
prog_file
,
params_file
)
if
use_gpu
:
config
.
enable_use_gpu
(
100
,
0
)
config
.
switch_ir_optim
(
True
)
else
:
config
.
disable_gpu
()
config
.
disable_glog_info
()
config
.
switch_specify_input_names
(
True
)
config
.
enable_memory_optim
()
return
fluid
.
core
.
create_paddle_predictor
(
config
)
class
HumanSeg
:
def
__init__
(
self
,
model_dir
,
mean
,
scale
,
eval_size
,
use_gpu
=
False
):
self
.
mean
=
np
.
array
(
mean
).
reshape
((
3
,
1
,
1
))
self
.
scale
=
np
.
array
(
scale
).
reshape
((
3
,
1
,
1
))
self
.
eval_size
=
eval_size
self
.
predictor
=
LoadModel
(
model_dir
,
use_gpu
)
def
Preprocess
(
self
,
image
):
im
=
cv2
.
resize
(
image
,
self
.
eval_size
,
fx
=
0
,
fy
=
0
,
interpolation
=
cv2
.
INTER_CUBIC
)
# HWC -> CHW
im
=
im
.
swapaxes
(
1
,
2
)
im
=
im
.
swapaxes
(
0
,
1
)
# Convert to float
im
=
im
[:,
:,
:].
astype
(
'float32'
)
# im = (im - mean) * scale
im
=
im
-
self
.
mean
im
=
im
*
self
.
scale
im
=
im
[
np
.
newaxis
,
:,
:,
:]
return
im
def
Postprocess
(
self
,
image
,
output_data
):
mask
=
output_data
[
0
,
1
,
:,
:]
mask
=
cv2
.
resize
(
mask
,
(
image
.
shape
[
1
],
image
.
shape
[
0
]))
scoremap
=
np
.
repeat
(
mask
[:,
:,
np
.
newaxis
],
3
,
axis
=
2
)
bg
=
np
.
ones_like
(
scoremap
)
*
255
merge_im
=
(
scoremap
*
image
+
(
1
-
scoremap
)
*
bg
).
astype
(
np
.
uint8
)
return
merge_im
def
Predict
(
self
,
image
):
ori_im
=
image
.
copy
()
im
=
self
.
Preprocess
(
image
)
im_tensor
=
fluid
.
core
.
PaddleTensor
(
im
.
copy
().
astype
(
'float32'
))
output_data
=
self
.
predictor
.
run
([
im_tensor
])[
0
]
output_data
=
output_data
.
as_ndarray
()
return
self
.
Postprocess
(
image
,
output_data
)
# Do Predicting on a image
def
PredictImage
(
seg
,
image_path
):
im
=
cv2
.
imread
(
input_path
)
im
=
seg
.
Predict
(
im
)
cv2
.
imwrite
(
'result.jpeg'
,
im
)
# Do Predicting on a video
def
PredictVideo
(
seg
,
video_path
):
if
__name__
==
"__main__"
:
if
len
(
sys
.
argv
)
<
3
:
print
(
'Usage: python infer.py /path/to/model/ /path/to/video'
)
exit
(
0
)
model_dir
=
sys
.
argv
[
1
]
input_path
=
sys
.
argv
[
2
]
use_gpu
=
int
(
sys
.
argv
[
3
])
if
len
(
sys
.
argv
)
>=
4
else
0
# Init model
mean
=
[
104.008
,
116.669
,
122.675
]
scale
=
[
1.0
,
1.0
,
1.0
]
eval_size
=
(
192
,
192
)
seg
=
HumanSeg
(
model_dir
,
mean
,
scale
,
eval_size
,
use_gpu
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录