Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleGAN
提交
8e1fa321
P
PaddleGAN
项目概览
PaddlePaddle
/
PaddleGAN
大约 1 年 前同步成功
通知
97
Star
7254
Fork
1210
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleGAN
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8e1fa321
编写于
9月 25, 2020
作者:
L
lijianshe02
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add remove duplicate frames in DAIN
上级
58154147
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
97 addition
and
58 deletion
+97
-58
applications/DAIN/my_args.py
applications/DAIN/my_args.py
+4
-1
applications/DAIN/predict.py
applications/DAIN/predict.py
+61
-57
applications/DAIN/util.py
applications/DAIN/util.py
+32
-0
未找到文件。
applications/DAIN/my_args.py
浏览文件 @
8e1fa321
...
...
@@ -90,4 +90,7 @@ parser.add_argument('--use_cuda',
type
=
bool
,
help
=
'use cuda or not'
)
parser
.
add_argument
(
'--use_cudnn'
,
default
=
1
,
type
=
int
,
help
=
'use cudnn or not'
)
parser
.
add_argument
(
'--remove_duplicates'
,
default
=
True
,
type
=
bool
,
help
=
'remove duplicate frames or not'
)
applications/DAIN/predict.py
浏览文件 @
8e1fa321
...
...
@@ -80,7 +80,8 @@ class VideoFrameInterp(object):
video_path
,
use_gpu
=
True
,
key_frame_thread
=
0.
,
output_path
=
'output'
):
output_path
=
'output'
,
remove_duplicates
=
True
):
self
.
video_path
=
video_path
self
.
output_path
=
os
.
path
.
join
(
output_path
,
'DAIN'
)
if
model_path
is
None
:
...
...
@@ -138,6 +139,8 @@ class VideoFrameInterp(object):
end
=
time
.
time
()
frames
=
sorted
(
glob
.
glob
(
os
.
path
.
join
(
out_path
,
'*.png'
)))
if
remove_duplicates
:
frames
=
remove_duplicates
(
out_path
)
img
=
imread
(
frames
[
0
])
...
...
@@ -199,58 +202,57 @@ class VideoFrameInterp(object):
X0
=
img_first
.
astype
(
'float32'
).
transpose
((
2
,
0
,
1
))
/
255
X1
=
img_second
.
astype
(
'float32'
).
transpose
((
2
,
0
,
1
))
/
255
if
key_frame
:
y_
=
[
np
.
transpose
(
255.0
*
X0
.
clip
(
0
,
1.0
),
(
1
,
2
,
0
))
for
i
in
range
(
num_frames
)
]
else
:
assert
(
X0
.
shape
[
1
]
==
X1
.
shape
[
1
])
assert
(
X0
.
shape
[
2
]
==
X1
.
shape
[
2
])
X0
=
np
.
pad
(
X0
,
((
0
,
0
),
(
padding_top
,
padding_bottom
),
\
(
padding_left
,
padding_right
)),
mode
=
'edge'
)
X1
=
np
.
pad
(
X1
,
((
0
,
0
),
(
padding_top
,
padding_bottom
),
\
(
padding_left
,
padding_right
)),
mode
=
'edge'
)
X0
=
np
.
expand_dims
(
X0
,
axis
=
0
)
X1
=
np
.
expand_dims
(
X1
,
axis
=
0
)
X0
=
np
.
expand_dims
(
X0
,
axis
=
0
)
X1
=
np
.
expand_dims
(
X1
,
axis
=
0
)
X
=
np
.
concatenate
((
X0
,
X1
),
axis
=
0
)
proc_end
=
time
.
time
()
o
=
self
.
exe
.
run
(
self
.
program
,
fetch_list
=
self
.
fetch_targets
,
feed
=
{
"image"
:
X
})
y_
=
o
[
0
]
proc_timer
.
update
(
time
.
time
()
-
proc_end
)
tot_timer
.
update
(
time
.
time
()
-
end
)
end
=
time
.
time
()
y_
=
[
np
.
transpose
(
255.0
*
item
.
clip
(
0
,
1.0
)[
0
,
:,
padding_top
:
padding_top
+
int_height
,
padding_left
:
padding_left
+
int_width
],
(
1
,
2
,
0
))
for
item
in
y_
]
time_offsets
=
[
kk
*
timestep
for
kk
in
range
(
1
,
1
+
num_frames
,
1
)
]
count
=
1
for
item
,
time_offset
in
zip
(
y_
,
time_offsets
):
out_dir
=
os
.
path
.
join
(
frame_path_interpolated
,
vidname
,
"{:0>6d}_{:0>4d}.png"
.
format
(
i
,
count
))
count
=
count
+
1
imsave
(
out_dir
,
np
.
round
(
item
).
astype
(
np
.
uint8
))
#if key_frame:
# y_ = [
# np.transpose(255.0 * X0.clip(0, 1.0), (1, 2, 0))
# for i in range(num_frames)
# ]
#else:
assert
(
X0
.
shape
[
1
]
==
X1
.
shape
[
1
])
assert
(
X0
.
shape
[
2
]
==
X1
.
shape
[
2
])
X0
=
np
.
pad
(
X0
,
((
0
,
0
),
(
padding_top
,
padding_bottom
),
\
(
padding_left
,
padding_right
)),
mode
=
'edge'
)
X1
=
np
.
pad
(
X1
,
((
0
,
0
),
(
padding_top
,
padding_bottom
),
\
(
padding_left
,
padding_right
)),
mode
=
'edge'
)
X0
=
np
.
expand_dims
(
X0
,
axis
=
0
)
X1
=
np
.
expand_dims
(
X1
,
axis
=
0
)
X0
=
np
.
expand_dims
(
X0
,
axis
=
0
)
X1
=
np
.
expand_dims
(
X1
,
axis
=
0
)
X
=
np
.
concatenate
((
X0
,
X1
),
axis
=
0
)
proc_end
=
time
.
time
()
o
=
self
.
exe
.
run
(
self
.
program
,
fetch_list
=
self
.
fetch_targets
,
feed
=
{
"image"
:
X
})
y_
=
o
[
0
]
proc_timer
.
update
(
time
.
time
()
-
proc_end
)
tot_timer
.
update
(
time
.
time
()
-
end
)
end
=
time
.
time
()
y_
=
[
np
.
transpose
(
255.0
*
item
.
clip
(
0
,
1.0
)[
0
,
:,
padding_top
:
padding_top
+
int_height
,
padding_left
:
padding_left
+
int_width
],
(
1
,
2
,
0
))
for
item
in
y_
]
time_offsets
=
[
kk
*
timestep
for
kk
in
range
(
1
,
1
+
num_frames
,
1
)
]
count
=
1
for
item
,
time_offset
in
zip
(
y_
,
time_offsets
):
out_dir
=
os
.
path
.
join
(
frame_path_interpolated
,
vidname
,
"{:0>6d}_{:0>4d}.png"
.
format
(
i
,
count
))
count
=
count
+
1
imsave
(
out_dir
,
np
.
round
(
item
).
astype
(
np
.
uint8
))
num_frames
=
int
(
1.0
/
timestep
)
-
1
...
...
@@ -266,14 +268,16 @@ class VideoFrameInterp(object):
vidname
+
'.mp4'
)
if
os
.
path
.
exists
(
video_pattern_output
):
os
.
remove
(
video_pattern_output
)
frames2video
(
frame_pattern_combined
,
video_pattern_output
,
r2
)
frames2video
(
frame_pattern_combined
,
video_pattern_output
,
r2
)
return
frame_pattern_combined
,
video_pattern_output
if
__name__
==
'__main__'
:
args
=
parser
.
parse_args
()
predictor
=
VideoFrameInterp
(
args
.
time_step
,
args
.
saved_model
,
args
.
video_path
,
args
.
output_path
)
predictor
=
VideoFrameInterp
(
args
.
time_step
,
args
.
saved_model
,
args
.
video_path
,
args
.
output_path
,
remove_duplicates
=
args
.
remove_duplicates
)
predictor
.
run
()
applications/DAIN/util.py
浏览文件 @
8e1fa321
import
os
,
sys
import
glob
import
shutil
import
cv2
class
AverageMeter
(
object
):
...
...
@@ -44,3 +45,34 @@ def combine_frames(input, interpolated, combined, num_frames):
except
Exception
as
e
:
print
(
e
)
print
(
len
(
frames2
),
num_frames
,
i
,
k
,
i
*
num_frames
+
k
)
def
remove_duplicates
(
paths
):
def
dhash
(
image
,
hashSize
=
8
):
gray
=
cv2
.
cvtColor
(
image
,
cv2
.
COLOR_BGR2GRAY
)
resized
=
cv2
.
resize
(
gray
,
(
hashSize
+
1
,
hashSize
))
diff
=
resized
[:,
1
:]
>
resized
[:,
:
-
1
]
return
sum
([
2
**
i
for
(
i
,
v
)
in
enumerate
(
diff
.
flatten
())
if
v
])
hashes
=
{}
imagePaths
=
sorted
(
glob
.
glob
(
os
.
path
.
join
(
paths
,
'*.png'
)))
for
imagePath
in
imagePaths
:
image
=
cv2
.
imread
(
imagePath
)
h
=
dhash
(
image
)
p
=
hashes
.
get
(
h
,
[])
p
.
append
(
imagePath
)
hashes
[
h
]
=
p
for
(
h
,
hashedPaths
)
in
hashes
.
items
():
if
len
(
hashedPaths
)
>
1
:
for
p
in
hashedPaths
[
1
:]:
os
.
remove
(
p
)
frames
=
sorted
(
glob
.
glob
(
os
.
path
.
join
(
paths
,
'*.png'
)))
for
fid
,
frame
in
enumerate
(
frames
):
new_name
=
'{:08d}'
.
format
(
fid
)
+
'.png'
new_name
=
os
.
path
.
join
(
paths
,
new_name
)
os
.
rename
(
frame
,
new_name
)
frames
=
sorted
(
glob
.
glob
(
os
.
path
.
join
(
paths
,
'*.png'
)))
return
frames
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录