Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """ | |
| Auto-test script for MorphGuard demo: | |
| - Enumerate attached webcams (up to 4) | |
| - Capture a frame from each camera | |
| - Send each to the /api/detect endpoint | |
| - Send the first frame to /api/demorph | |
| """ | |
| try: | |
| import cv2 | |
| except ImportError: | |
| print("Error: OpenCV (cv2) not installed. Run 'pip install opencv-python' and retry.") | |
| exit(1) | |
| import requests | |
| import time | |
| BASE_URL = 'http://localhost:5000' | |
| def list_and_capture_cams(max_cams=4): | |
| caps = [] | |
| for i in range(max_cams): | |
| cap = cv2.VideoCapture(i) | |
| if cap.isOpened(): | |
| caps.append((i, cap)) | |
| else: | |
| cap.release() | |
| frames = [] | |
| for idx, cap in caps: | |
| ret, frame = cap.read() | |
| cap.release() | |
| if ret: | |
| # Encode to JPEG bytes | |
| _, buf = cv2.imencode('.jpg', frame) | |
| frames.append((idx, buf.tobytes())) | |
| return frames | |
| def detect_images(frames): | |
| print(f"Sending {len(frames)} captured camera frames to /api/detect...") | |
| results = [] | |
| for idx, img_bytes in frames: | |
| resp = requests.post(f"{BASE_URL}/api/detect", files={'image': (f'cam{idx}.jpg', img_bytes)}) | |
| try: | |
| data = resp.json() | |
| except ValueError: | |
| data = {'error': 'invalid json', 'status_code': resp.status_code} | |
| print(f"Camera {idx} detect response:", data) | |
| results.append(data) | |
| return results | |
| def demorph_image(frame): | |
| idx, img_bytes = frame | |
| print(f"Sending camera {idx} frame to /api/demorph...") | |
| resp = requests.post(f"{BASE_URL}/api/demorph", files={'image': (f'cam{idx}.jpg', img_bytes)}) | |
| try: | |
| data = resp.json() | |
| except ValueError: | |
| data = {'error': 'invalid json', 'status_code': resp.status_code} | |
| print(f"Demorph response:", data) | |
| return data | |
| def main(): | |
| print("Starting auto-test of MorphGuard demo...") | |
| # Give server a moment | |
| time.sleep(2) | |
| frames = list_and_capture_cams() | |
| if not frames: | |
| print("No webcams detected. Exiting.") | |
| return | |
| detect_results = detect_images(frames) | |
| # Demorph first detected frame | |
| demorph_data = demorph_image(frames[0]) | |
| print("Auto-test complete.") | |
| if __name__ == '__main__': | |
| main() |