Add dead bug pose detection

This commit is contained in:
2026-06-02 00:59:41 +08:00
parent feb456261c
commit fde0e0383d
4 changed files with 398 additions and 27 deletions
+16 -2
View File
@@ -6,6 +6,8 @@ import cv2
from loguru import logger
from aiortc import RTCPeerConnection, RTCSessionDescription, RTCIceCandidate
from dead_bug_detector import DeadBugDetector
async def handle_client(websocket):
client = websocket.remote_address
@@ -40,15 +42,25 @@ async def handle_client(websocket):
async def receive_video(track):
logger.info("Start receiving video frames")
frame_count = 0
detector = DeadBugDetector()
try:
while True:
frame = await track.recv()
frame_count += 1
img = frame.to_ndarray(format="bgr24")
cv2.imshow("Android Camera (WebRTC)", img)
timestamp_ms = int(frame.time * 1000) if frame.time is not None else frame_count * 33
annotated, pose_result = detector.process_frame(img, timestamp_ms)
cv2.imshow("Android Camera (WebRTC)", annotated)
if frame_count % 100 == 0:
logger.info(f"Received {frame_count} frames, shape={img.shape}")
logger.info(
"Received {} frames, shape={}, reps={}, phase={}, feedback={}",
frame_count,
img.shape,
pose_result.rep_count,
pose_result.phase.value,
" | ".join(pose_result.feedback),
)
if cv2.waitKey(1) & 0xFF == 27:
logger.info("ESC pressed, closing display")
@@ -57,6 +69,8 @@ async def handle_client(websocket):
logger.info("Video receive task cancelled")
except Exception as e:
logger.error(f"Video receive error: {e}")
finally:
detector.close()
@pc.on("track")
async def on_track(track):