Spaces:
Running
Running
Maksym-Lysyi
commited on
Commit
·
d34196f
1
Parent(s):
e3641b1
add download button for logs
Browse files- .gitignore +3 -0
- app.py +5 -2
- main_func.py +41 -7
- utils.py +2 -2
.gitignore
CHANGED
@@ -2,4 +2,7 @@ __pycache__
|
|
2 |
pose_env_1
|
3 |
testing
|
4 |
vit_env
|
|
|
5 |
test_vit_model.ipynb
|
|
|
|
|
|
2 |
pose_env_1
|
3 |
testing
|
4 |
vit_env
|
5 |
+
models
|
6 |
test_vit_model.ipynb
|
7 |
+
logs/*.txt
|
8 |
+
videos/*.mp4
|
app.py
CHANGED
@@ -104,12 +104,15 @@ with gr.Blocks() as demo:
|
|
104 |
output_merged = gr.Video(show_download_button=True)
|
105 |
|
106 |
with gr.Row():
|
107 |
-
general_log = gr.TextArea(lines=10,
|
|
|
|
|
|
|
108 |
|
109 |
gr_button.click(
|
110 |
fn=video_identity,
|
111 |
inputs=[dtw_mean, dtw_filter, angles_sensitive, angles_common, angles_insensitive, trigger_state, input_teacher, input_student],
|
112 |
-
outputs=[output_merged, general_log]
|
113 |
)
|
114 |
|
115 |
|
|
|
104 |
output_merged = gr.Video(show_download_button=True)
|
105 |
|
106 |
with gr.Row():
|
107 |
+
general_log = gr.TextArea(lines=10, label="Error log", scale=3)
|
108 |
+
text_log=gr.File(label="Download logs and settings", scale=1)
|
109 |
+
|
110 |
+
|
111 |
|
112 |
gr_button.click(
|
113 |
fn=video_identity,
|
114 |
inputs=[dtw_mean, dtw_filter, angles_sensitive, angles_common, angles_insensitive, trigger_state, input_teacher, input_student],
|
115 |
+
outputs=[output_merged, general_log, text_log]
|
116 |
)
|
117 |
|
118 |
|
main_func.py
CHANGED
@@ -21,6 +21,7 @@ from dtaidistance import dtw
|
|
21 |
import numpy as np
|
22 |
from scipy.signal import savgol_filter
|
23 |
from scipy.stats import mstats
|
|
|
24 |
from datetime import timedelta
|
25 |
import cv2
|
26 |
|
@@ -31,15 +32,15 @@ def video_identity(dtw_mean, dtw_filter, angles_sensitive, angles_common, angles
|
|
31 |
|
32 |
detection_result_teacher = predict_keypoints_vitpose(
|
33 |
video_path=video_teacher,
|
34 |
-
model_path="models/vitpose-
|
35 |
-
model_name="
|
36 |
detector_path="models/yolov8s.pt"
|
37 |
)
|
38 |
|
39 |
detection_result_student = predict_keypoints_vitpose(
|
40 |
video_path=video_student,
|
41 |
-
model_path="models/vitpose-
|
42 |
-
model_name="
|
43 |
detector_path="models/yolov8s.pt"
|
44 |
)
|
45 |
|
@@ -143,10 +144,13 @@ def video_identity(dtw_mean, dtw_filter, angles_sensitive, angles_common, angles
|
|
143 |
|
144 |
|
145 |
concat_video = np.concatenate((save_teacher_frames_resized, save_student_frames_resized), axis=2)
|
146 |
-
|
147 |
concat_video = np.array(concat_video)
|
148 |
|
149 |
-
|
|
|
|
|
|
|
|
|
150 |
for frame in concat_video:
|
151 |
out.write(frame)
|
152 |
out.release()
|
@@ -164,6 +168,36 @@ def video_identity(dtw_mean, dtw_filter, angles_sensitive, angles_common, angles
|
|
164 |
|
165 |
general_summary.append(f"{comment} on frame {frame}. Video time: {str(timedelta(seconds=total_seconds))[3:-4]}")
|
166 |
|
|
|
167 |
general_summary = "\n".join(general_summary)
|
168 |
|
169 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
import numpy as np
|
22 |
from scipy.signal import savgol_filter
|
23 |
from scipy.stats import mstats
|
24 |
+
import datetime
|
25 |
from datetime import timedelta
|
26 |
import cv2
|
27 |
|
|
|
32 |
|
33 |
detection_result_teacher = predict_keypoints_vitpose(
|
34 |
video_path=video_teacher,
|
35 |
+
model_path="models/vitpose-b-wholebody.pth",
|
36 |
+
model_name="b",
|
37 |
detector_path="models/yolov8s.pt"
|
38 |
)
|
39 |
|
40 |
detection_result_student = predict_keypoints_vitpose(
|
41 |
video_path=video_student,
|
42 |
+
model_path="models/vitpose-b-wholebody.pth",
|
43 |
+
model_name="b",
|
44 |
detector_path="models/yolov8s.pt"
|
45 |
)
|
46 |
|
|
|
144 |
|
145 |
|
146 |
concat_video = np.concatenate((save_teacher_frames_resized, save_student_frames_resized), axis=2)
|
|
|
147 |
concat_video = np.array(concat_video)
|
148 |
|
149 |
+
current_time = datetime.datetime.now()
|
150 |
+
timestamp_str = current_time.strftime("%Y_%m-%d_%H_%M_%S")
|
151 |
+
video_path = f"videos/pose_{timestamp_str}.mp4"
|
152 |
+
|
153 |
+
out = cv2.VideoWriter(video_path, cv2.VideoWriter_fourcc(*'mp4v'), 30, (1280*2, 720))
|
154 |
for frame in concat_video:
|
155 |
out.write(frame)
|
156 |
out.release()
|
|
|
168 |
|
169 |
general_summary.append(f"{comment} on frame {frame}. Video time: {str(timedelta(seconds=total_seconds))[3:-4]}")
|
170 |
|
171 |
+
|
172 |
general_summary = "\n".join(general_summary)
|
173 |
|
174 |
+
log_path = f"logs/log_{timestamp_str}.txt"
|
175 |
+
|
176 |
+
|
177 |
+
content = f"""
|
178 |
+
Settings:
|
179 |
+
|
180 |
+
Dynamic Time Warping:
|
181 |
+
- Winsorize mean: {dtw_mean}
|
182 |
+
- Savitzky-Golay Filter: {dtw_filter}
|
183 |
+
|
184 |
+
Thresholds:
|
185 |
+
- Sensitive: {angles_sensitive}
|
186 |
+
- Standart: {angles_common}
|
187 |
+
- Insensitive: {angles_insensitive}
|
188 |
+
|
189 |
+
Patience:
|
190 |
+
- trigger count: {trigger_state}
|
191 |
+
|
192 |
+
|
193 |
+
Error logs:
|
194 |
+
|
195 |
+
{general_summary}
|
196 |
+
"""
|
197 |
+
|
198 |
+
with open(log_path, "w") as file:
|
199 |
+
file.write(content)
|
200 |
+
|
201 |
+
|
202 |
+
|
203 |
+
return video_path, general_summary, log_path
|
utils.py
CHANGED
@@ -393,10 +393,10 @@ def download_file(url, save_path):
|
|
393 |
|
394 |
def check_and_download_models():
|
395 |
|
396 |
-
vit_model_url = "https://huggingface.co/JunkyByte/easy_ViTPose/resolve/main/torch/wholebody/vitpose-
|
397 |
yolo_model_url = "https://huggingface.co/JunkyByte/easy_ViTPose/resolve/main/yolov8/yolov8s.pt?download=true"
|
398 |
|
399 |
-
vit_model_path = "models/vitpose-
|
400 |
|
401 |
yolo_model_path = "models/yolov8s.pt"
|
402 |
|
|
|
393 |
|
394 |
def check_and_download_models():
|
395 |
|
396 |
+
vit_model_url = "https://huggingface.co/JunkyByte/easy_ViTPose/resolve/main/torch/wholebody/vitpose-b-wholebody.pth?download=true"
|
397 |
yolo_model_url = "https://huggingface.co/JunkyByte/easy_ViTPose/resolve/main/yolov8/yolov8s.pt?download=true"
|
398 |
|
399 |
+
vit_model_path = "models/vitpose-b-wholebody.pth"
|
400 |
|
401 |
yolo_model_path = "models/yolov8s.pt"
|
402 |
|