Spaces:
Runtime error
Runtime error
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 |
|