bug-detector / tests /validate_system.py
MuhammadTayyab0143's picture
Initial commit: set up project skeleton and deploy workflows
59bcdd1
Raw
History Blame Contribute Delete
3.28 kB
import os
import sys
import time
# Add project root to sys.path
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from suspicious_behavior.pipeline.frame_analyzer import FrameAnalyzer
from suspicious_behavior.pipeline.video_processor import VideoProcessor
def main():
video_path = "samples/FullSizeRender.mov"
output_dir = "outputs"
output_path = os.path.join(output_dir, "FullSizeRender_annotated.mp4")
os.makedirs(output_dir, exist_ok=True)
if not os.path.exists(video_path):
print(f"Error: Sample video not found at {video_path}")
sys.exit(1)
print(f"[Validation] Opening video file: {video_path}...")
processor = VideoProcessor(target_fps=10.0)
metadata = processor.get_metadata(video_path)
print(f"[Validation] Video metadata: {metadata}")
print("[Validation] Initializing FrameAnalyzer (loading models)...")
analyzer = FrameAnalyzer(camera_id="val_camera_1", violence_stride=8)
processed_frames = []
latencies = []
all_alerts = []
print("[Validation] Starting frame-by-frame analysis...")
start_total_time = time.time()
try:
for frame_idx, frame, timestamp in processor.extract_frames_generator(video_path):
t0 = time.time()
annotated, alerts, frame_meta = analyzer.analyze(frame, fps=10.0, output_base64=False)
t_elapsed = (time.time() - t0) * 1000.0
latencies.append(t_elapsed)
processed_frames.append(annotated)
for alert in alerts:
all_alerts.append((frame_idx, alert))
# Print frame summary every 10 processed frames
if len(processed_frames) % 10 == 0:
print(
f"Frame {frame_idx:04d} ({timestamp:.2f}s) | "
f"Latency: {t_elapsed:.1f}ms | "
f"People: {frame_meta['active_tracks_count']} | "
f"Threats: {frame_meta['threats_detected']}"
)
except KeyboardInterrupt:
print("[Validation] Interrupted by user. Compiling what we have...")
total_time = time.time() - start_total_time
if not latencies:
print("[Validation] No frames processed.")
sys.exit(1)
avg_latency = sum(latencies) / len(latencies)
throughput_fps = len(processed_frames) / total_time
print("\n--- Validation Statistics ---")
print(f"Frames Processed: {len(processed_frames)}")
print(f"Total Analysis Time: {total_time:.2f} seconds")
print(f"System Throughput: {throughput_fps:.2f} FPS")
print(f"Average Frame Latency: {avg_latency:.1f} ms")
print(f"Active Alerts Triggered: {len(all_alerts)}")
for f_idx, alert in all_alerts:
print(f" - Frame {f_idx}: [{alert.severity}] {alert.threat_type} ({alert.confidence*100:.1f}%)")
print(f"\n[Validation] Compiling output video to: {output_path}...")
processor.write_frames_to_video(
processed_frames,
output_path,
fps=10.0,
frame_size=(metadata['width'], metadata['height'])
)
print("[Validation] Finished successfully!")
if __name__ == "__main__":
main()