Spaces:
Sleeping
Sleeping
Miroslav Purkrabek
commited on
Commit
·
4241c11
1
Parent(s):
ebb18ad
init models first
Browse files
app.py
CHANGED
@@ -50,38 +50,34 @@ POSE_WEIGHTS = "models/ProbPose-s.pth"
|
|
50 |
DEVICE = 'cuda:0'
|
51 |
# DEVICE = 'cpu'
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
@spaces.GPU
|
54 |
-
def
|
55 |
-
"""Initialize and return models for pose estimation"""
|
56 |
-
# Init detector
|
57 |
-
print("Initializing MMDetection detector...")
|
58 |
-
det_model = init_detector(DET_CFG, DET_WEIGHTS, device=DEVICE)
|
59 |
-
det_model.cfg = adapt_mmdet_pipeline(det_model.cfg)
|
60 |
-
print("Detector initialized successfully!")
|
61 |
-
|
62 |
-
# Init pose estimator
|
63 |
-
print("Initializing MMPose estimator...")
|
64 |
-
pose_model = init_pose_estimator(
|
65 |
-
POSE_CFG,
|
66 |
-
POSE_WEIGHTS,
|
67 |
-
device=DEVICE,
|
68 |
-
cfg_options=dict(model=dict(test_cfg=dict(output_heatmaps=True)))
|
69 |
-
)
|
70 |
-
|
71 |
-
# Build visualizer
|
72 |
-
pose_model.cfg.visualizer.radius = 4
|
73 |
-
pose_model.cfg.visualizer.alpha = 0.8
|
74 |
-
pose_model.cfg.visualizer.line_width = 2
|
75 |
-
visualizer = VISUALIZERS.build(pose_model.cfg.visualizer)
|
76 |
-
visualizer.set_dataset_meta(
|
77 |
-
pose_model.dataset_meta, skeleton_style='mmpose'
|
78 |
-
)
|
79 |
-
print("Pose estimator initialized successfully!")
|
80 |
-
return det_model, pose_model, visualizer
|
81 |
-
|
82 |
-
@spaces.GPU
|
83 |
-
def process_frame(frame, det_model, pose_model, visualizer, bbox_thr=0.3, nms_thr=0.8, kpt_thr=0.3):
|
84 |
"""Process a single frame with pose estimation"""
|
|
|
|
|
85 |
processing_start = time.time()
|
86 |
|
87 |
# Mirror the frame
|
@@ -173,14 +169,6 @@ class AsyncFrameProcessor:
|
|
173 |
self.stop_event = threading.Event()
|
174 |
self.new_frame_signal = threading.Event()
|
175 |
|
176 |
-
# Detector and pose estimator models
|
177 |
-
self.pose_model = None
|
178 |
-
self.det_model = None
|
179 |
-
self.visualizer = None
|
180 |
-
|
181 |
-
# Initialize models using the standalone function
|
182 |
-
self.det_model, self.pose_model, self.visualizer = init_models()
|
183 |
-
|
184 |
# Start background processing
|
185 |
self._start_processing_thread()
|
186 |
|
@@ -213,20 +201,8 @@ class AsyncFrameProcessor:
|
|
213 |
|
214 |
print(f"Processing frame number: {frame_number}")
|
215 |
|
216 |
-
#
|
217 |
-
|
218 |
-
self.det_model, self.pose_model, self.visualizer = init_models()
|
219 |
-
|
220 |
-
print("Models initialized, starting frame processing...")
|
221 |
-
|
222 |
-
|
223 |
-
# Process the frame using the standalone function
|
224 |
-
processed_frame = process_frame(
|
225 |
-
frame_to_process,
|
226 |
-
self.det_model,
|
227 |
-
self.pose_model,
|
228 |
-
self.visualizer
|
229 |
-
)
|
230 |
|
231 |
# Write frame number in the top left corner
|
232 |
processed_frame = cv2.putText(
|
@@ -341,7 +317,7 @@ with gr.Blocks(css=css) as demo:
|
|
341 |
|
342 |
|
343 |
if __name__ == "__main__":
|
344 |
-
|
345 |
demo.launch(
|
346 |
# server_name="0.0.0.0",
|
347 |
# server_port=17860,
|
|
|
50 |
DEVICE = 'cuda:0'
|
51 |
# DEVICE = 'cpu'
|
52 |
|
53 |
+
# Global variables for models
|
54 |
+
print("Initializing MMDetection detector...")
|
55 |
+
det_model = init_detector(DET_CFG, DET_WEIGHTS, device=DEVICE)
|
56 |
+
det_model.cfg = adapt_mmdet_pipeline(det_model.cfg)
|
57 |
+
print("Detector initialized successfully!")
|
58 |
+
|
59 |
+
print("Initializing MMPose estimator...")
|
60 |
+
pose_model = init_pose_estimator(
|
61 |
+
POSE_CFG,
|
62 |
+
POSE_WEIGHTS,
|
63 |
+
device=DEVICE,
|
64 |
+
cfg_options=dict(model=dict(test_cfg=dict(output_heatmaps=True)))
|
65 |
+
)
|
66 |
+
print("Pose estimator initialized successfully!")
|
67 |
+
|
68 |
+
pose_model.cfg.visualizer.radius = 4
|
69 |
+
pose_model.cfg.visualizer.alpha = 0.8
|
70 |
+
pose_model.cfg.visualizer.line_width = 2
|
71 |
+
visualizer = VISUALIZERS.build(pose_model.cfg.visualizer)
|
72 |
+
visualizer.set_dataset_meta(
|
73 |
+
pose_model.dataset_meta, skeleton_style='mmpose'
|
74 |
+
)
|
75 |
+
|
76 |
@spaces.GPU
|
77 |
+
def process_frame(frame, bbox_thr=0.3, nms_thr=0.8, kpt_thr=0.3):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
"""Process a single frame with pose estimation"""
|
79 |
+
global det_model, pose_model, visualizer
|
80 |
+
|
81 |
processing_start = time.time()
|
82 |
|
83 |
# Mirror the frame
|
|
|
169 |
self.stop_event = threading.Event()
|
170 |
self.new_frame_signal = threading.Event()
|
171 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
172 |
# Start background processing
|
173 |
self._start_processing_thread()
|
174 |
|
|
|
201 |
|
202 |
print(f"Processing frame number: {frame_number}")
|
203 |
|
204 |
+
# Process the frame using the global models
|
205 |
+
processed_frame = process_frame(frame_to_process)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
206 |
|
207 |
# Write frame number in the top left corner
|
208 |
processed_frame = cv2.putText(
|
|
|
317 |
|
318 |
|
319 |
if __name__ == "__main__":
|
320 |
+
|
321 |
demo.launch(
|
322 |
# server_name="0.0.0.0",
|
323 |
# server_port=17860,
|