pruth23 fffiloni commited on
Commit
0b8a237
·
0 Parent(s):

Duplicate from fffiloni/video2mmpose

Browse files

Co-authored-by: Sylvain Filoni <[email protected]>

.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Video To MMPose
3
+ emoji: 💃
4
+ colorFrom: yellow
5
+ colorTo: blue
6
+ sdk: gradio
7
+ sdk_version: 3.34.0
8
+ app_file: app.py
9
+ pinned: false
10
+ duplicated_from: fffiloni/video2mmpose
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+
3
+ import os
4
+ import cv2
5
+ import numpy as np
6
+ from PIL import Image
7
+ from moviepy.editor import *
8
+
9
+ mmpose = gr.Interface.load(name="spaces/fffiloni/mmpose-estimation")
10
+
11
+ def get_frames(video_in):
12
+ frames = []
13
+ #resize the video
14
+ clip = VideoFileClip(video_in)
15
+
16
+ #check fps
17
+ if clip.fps > 30:
18
+ print("vide rate is over 30, resetting to 30")
19
+ clip_resized = clip.resize(height=512)
20
+ clip_resized.write_videofile("video_resized.mp4", fps=30)
21
+ else:
22
+ print("video rate is OK")
23
+ clip_resized = clip.resize(height=512)
24
+ clip_resized.write_videofile("video_resized.mp4", fps=clip.fps)
25
+
26
+ print("video resized to 512 height")
27
+
28
+ # Opens the Video file with CV2
29
+ cap= cv2.VideoCapture("video_resized.mp4")
30
+
31
+ fps = cap.get(cv2.CAP_PROP_FPS)
32
+ print("video fps: " + str(fps))
33
+ i=0
34
+ while(cap.isOpened()):
35
+ ret, frame = cap.read()
36
+ if ret == False:
37
+ break
38
+ cv2.imwrite('kang'+str(i)+'.jpg',frame)
39
+ frames.append('kang'+str(i)+'.jpg')
40
+ i+=1
41
+
42
+ cap.release()
43
+ cv2.destroyAllWindows()
44
+ print("broke the video into frames")
45
+
46
+ return frames, fps
47
+
48
+ def get_mmpose_filter(i):
49
+ #image = Image.open(i)
50
+
51
+ #image = np.array(image)
52
+
53
+ image = mmpose(i, fn_index=0)[1]
54
+ image = Image.open(image)
55
+ #image = Image.fromarray(image)
56
+ image.save("mmpose_frame_" + str(i) + ".jpeg")
57
+ return "mmpose_frame_" + str(i) + ".jpeg"
58
+
59
+ def create_video(frames, fps, type):
60
+ print("building video result")
61
+ clip = ImageSequenceClip(frames, fps=fps)
62
+ clip.write_videofile(type + "_result.mp4", fps=fps)
63
+
64
+ return type + "_result.mp4"
65
+
66
+ def convertG2V(imported_gif):
67
+ clip = VideoFileClip(imported_gif.name)
68
+ clip.write_videofile("my_gif_video.mp4")
69
+ return "my_gif_video.mp4"
70
+
71
+ def infer(video_in):
72
+
73
+
74
+ # 1. break video into frames and get FPS
75
+ break_vid = get_frames(video_in)
76
+ frames_list= break_vid[0]
77
+ fps = break_vid[1]
78
+ #n_frame = int(trim_value*fps)
79
+ n_frame = len(frames_list)
80
+
81
+ if n_frame >= len(frames_list):
82
+ print("video is shorter than the cut value")
83
+ n_frame = len(frames_list)
84
+
85
+ # 2. prepare frames result arrays
86
+ result_frames = []
87
+ print("set stop frames to: " + str(n_frame))
88
+
89
+ for i in frames_list[0:int(n_frame)]:
90
+ mmpose_frame = get_mmpose_filter(i)
91
+ result_frames.append(mmpose_frame)
92
+ print("frame " + i + "/" + str(n_frame) + ": done;")
93
+
94
+
95
+ final_vid = create_video(result_frames, fps, "mmpose")
96
+
97
+ files = [final_vid]
98
+
99
+ return final_vid, files
100
+
101
+ title="""
102
+ <div style="text-align: center; max-width: 500px; margin: 0 auto;">
103
+ <div
104
+ style="
105
+ display: inline-flex;
106
+ align-items: center;
107
+ gap: 0.8rem;
108
+ font-size: 1.75rem;
109
+ margin-bottom: 10px;
110
+ "
111
+ >
112
+ <h1 style="font-weight: 600; margin-bottom: 7px;">
113
+ Video to MMPose
114
+ </h1>
115
+
116
+ </div>
117
+ <p>Convert any video or gif to a MMPose sequence. <br />
118
+ Once you got your converted video, you can use it with the <a href="https://huggingface.co/spaces/YueMafighting/FollowYourPose" target="_blank">FollowYourPose</a> demo</p>
119
+ </div>
120
+ """
121
+
122
+ with gr.Blocks() as demo:
123
+ with gr.Column():
124
+ gr.HTML(title)
125
+ with gr.Row():
126
+ with gr.Column():
127
+ video_input = gr.Video(source="upload", type="filepath")
128
+ gif_input = gr.File(label="import a GIF instead", file_types=['.gif'])
129
+ gif_input.change(fn=convertG2V, inputs=gif_input, outputs=video_input)
130
+ submit_btn = gr.Button("Submit")
131
+
132
+ with gr.Column():
133
+ video_output = gr.Video()
134
+ file_output = gr.Files()
135
+
136
+ gr.Examples(
137
+ examples=["./examples/childishgambino.mp4", "./examples/jimmyfallon.mp4"],
138
+ fn=infer,
139
+ inputs=[video_input],
140
+ outputs=[video_output,file_output],
141
+ cache_examples=False
142
+ )
143
+
144
+ submit_btn.click(fn=infer, inputs=[video_input], outputs=[video_output, file_output])
145
+
146
+ demo.launch()
examples/childishgambino.mp4 ADDED
Binary file (398 kB). View file
 
examples/jimmyfallon.mp4 ADDED
Binary file (88 kB). View file
 
examples/readme.md ADDED
File without changes
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ diffusers==0.14.0
2
+ opencv-python
3
+ ffmpeg-python
4
+ moviepy
5
+ controlnet_aux