Spaces:
Runtime error
Runtime error
#!/usr/bin/env python3 | |
""" | |
Test script for improved SafetyMaster Pro detection with stricter confidence thresholds | |
""" | |
import cv2 | |
import numpy as np | |
from safety_detector import SafetyDetector | |
import time | |
def test_improved_detection(): | |
"""Test the improved detection logic with stricter thresholds.""" | |
print("π§ͺ Testing SafetyMaster Pro - Improved Detection Logic") | |
print("=" * 60) | |
# Initialize detector | |
detector = SafetyDetector() | |
print(f"\nπ Confidence Thresholds:") | |
for equipment, threshold in detector.equipment_confidence_thresholds.items(): | |
print(f" {equipment}: {threshold}") | |
print(f"\nπ― Available Model Classes:") | |
classes = detector.get_model_classes() | |
for i, cls in enumerate(classes): | |
print(f" {i}: {cls}") | |
# Test with webcam | |
print(f"\nπΉ Starting webcam test...") | |
print(" Press 'q' to quit") | |
print(" Press 's' to save current frame") | |
print(" Watch for improved accuracy with stricter thresholds") | |
cap = cv2.VideoCapture(0) | |
if not cap.isOpened(): | |
print("β Error: Could not open webcam") | |
return | |
frame_count = 0 | |
total_processing_time = 0 | |
while True: | |
ret, frame = cap.read() | |
if not ret: | |
print("β Error: Could not read frame") | |
break | |
frame_count += 1 | |
# Run detection | |
start_time = time.time() | |
results = detector.detect_safety_violations(frame) | |
processing_time = time.time() - start_time | |
total_processing_time += processing_time | |
# Draw detections | |
annotated_frame = detector.draw_detections(frame, results) | |
# Add performance info | |
avg_fps = frame_count / total_processing_time if total_processing_time > 0 else 0 | |
cv2.putText(annotated_frame, f"Avg FPS: {avg_fps:.1f}", | |
(10, annotated_frame.shape[0] - 60), | |
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 2) | |
cv2.putText(annotated_frame, f"Frame: {frame_count}", | |
(10, annotated_frame.shape[0] - 30), | |
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 2) | |
# Print detection summary every 30 frames | |
if frame_count % 30 == 0: | |
print(f"\nπ Frame {frame_count} Summary:") | |
print(f" People: {results['people_count']}") | |
print(f" Equipment detected: {results['safety_equipment']}") | |
print(f" Violations: {len(results['violations'])}") | |
if results['violations']: | |
for violation in results['violations']: | |
print(f" - {violation['description']}") | |
print(f" Processing time: {processing_time:.3f}s") | |
# Display frame | |
cv2.imshow('SafetyMaster Pro - Improved Detection', annotated_frame) | |
key = cv2.waitKey(1) & 0xFF | |
if key == ord('q'): | |
break | |
elif key == ord('s'): | |
# Save current frame | |
timestamp = time.strftime("%Y%m%d_%H%M%S") | |
filename = f"test_detection_{timestamp}.jpg" | |
cv2.imwrite(filename, annotated_frame) | |
print(f"πΎ Saved frame as {filename}") | |
cap.release() | |
cv2.destroyAllWindows() | |
print(f"\nβ Test completed!") | |
print(f" Total frames processed: {frame_count}") | |
print(f" Average FPS: {frame_count / total_processing_time:.1f}") | |
if __name__ == "__main__": | |
test_improved_detection() |