# Fix for 404 Error - OpenCV Model Download ## Problem The OpenCV fallback detector was trying to download face detection models from URLs that returned 404 errors: ``` urllib.error.HTTPError: HTTP Error 404: Not Found ``` ## Root Cause The original implementation attempted to download OpenCV DNN models from GitHub URLs that are no longer available or have moved. ## Solution ✅ **Replaced with OpenCV's Built-in Haar Cascade Classifier** - **No downloads required** - Uses OpenCV's built-in face detection - **Always available** - Included with OpenCV installation - **More reliable** - No dependency on external URLs - **Faster initialization** - No network requests ## What Changed ### Before: - Tried to download models from GitHub (404 errors) - Required external dependencies - Failed if URLs were unavailable ### After: - Uses `cv2.data.haarcascades` (built-in) - No network requests - Works offline - More reliable ## Technical Details The fix changes the face detector from: ```python # OLD: Download DNN models urllib.request.urlretrieve(FACE_DETECTION_MODEL_URL, face_model) self.face_net = cv2.dnn.readNetFromTensorflow(...) ``` To: ```python # NEW: Use built-in Haar Cascade cascade_path = cv2.data.haarcascades + 'haarcascade_frontalface_default.xml' self.face_cascade = cv2.CascadeClassifier(cascade_path) ``` ## Verification The fix ensures: 1. ✅ No HTTP requests for model downloads 2. ✅ Uses OpenCV's built-in resources 3. ✅ Works offline 4. ✅ Compatible with all OpenCV installations 5. ✅ Maintains MediaPipe-compatible interface ## Performance - **Haar Cascade**: Slightly faster than DNN for face detection - **Accuracy**: Good for face detection (suitable for POC) - **Memory**: Lower memory usage than DNN models ## Testing To verify the fix works: ```bash # Activate virtual environment source venv/bin/activate # Test the import python3 -c "from src.face_pose_detector import get_face_detector; print('OK')" # Run the application streamlit run src/poc_demo.py ``` ## Expected Behavior When MediaPipe is not available: 1. Code detects MediaPipe import failure 2. Automatically uses OpenCV Haar Cascade 3. Logs: `"✓ OpenCV Face Detector loaded (Haar Cascade)"` 4. Application runs normally ## Notes - Haar Cascade is less accurate than MediaPipe for detailed face landmarks - However, it's sufficient for: - Face presence detection - Basic face tracking - Driver absent detection - Simplified PERCLOS calculation For production, MediaPipe is still recommended for better accuracy. ## Summary ✅ **Fixed**: 404 error eliminated ✅ **Improved**: No external dependencies ✅ **Reliable**: Works with standard OpenCV installation ✅ **Compatible**: Maintains same interface as MediaPipe The application should now work without any download errors!