Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
| 2 |
import os
|
| 3 |
os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'
|
| 4 |
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
|
|
|
|
| 5 |
|
| 6 |
# Standard Library Imports
|
| 7 |
import base64
|
|
@@ -26,9 +27,17 @@ try:
|
|
| 26 |
from PIL import Image
|
| 27 |
import requests
|
| 28 |
from dotenv import load_dotenv
|
| 29 |
-
from deepface import DeepFace
|
| 30 |
from retrying import retry
|
| 31 |
from simple_salesforce import Salesforce
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
except ImportError as e:
|
| 33 |
print(f"Missing dependency: {e}")
|
| 34 |
print("Please install required packages using: pip install -r requirements.txt")
|
|
@@ -334,6 +343,9 @@ class AttendanceSystem:
|
|
| 334 |
if image is None or not name.strip():
|
| 335 |
return "β Please provide both image and name!", self.get_registered_workers_info()
|
| 336 |
|
|
|
|
|
|
|
|
|
|
| 337 |
try:
|
| 338 |
# Validate image quality
|
| 339 |
image_array = np.array(image)
|
|
@@ -375,6 +387,9 @@ class AttendanceSystem:
|
|
| 375 |
|
| 376 |
def _register_worker_auto(self, face_image: np.ndarray) -> Optional[Tuple[str, str]]:
|
| 377 |
"""Auto-register a new worker with improved validation."""
|
|
|
|
|
|
|
|
|
|
| 378 |
try:
|
| 379 |
# Skip very small faces
|
| 380 |
if face_image.shape[0] < 50 or face_image.shape[1] < 50:
|
|
@@ -503,6 +518,12 @@ class AttendanceSystem:
|
|
| 503 |
|
| 504 |
def process_frame(self, frame: np.ndarray) -> np.ndarray:
|
| 505 |
"""Enhanced frame processing with better error handling."""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 506 |
try:
|
| 507 |
self.processing_stats['frames_processed'] += 1
|
| 508 |
|
|
@@ -784,10 +805,12 @@ class AttendanceSystem:
|
|
| 784 |
def get_system_status(self) -> str:
|
| 785 |
"""Get comprehensive system status."""
|
| 786 |
sf_status = "β
Connected" if self.sf else "β Offline"
|
|
|
|
| 787 |
db_workers = len(self.db.get_all_workers())
|
| 788 |
|
| 789 |
status = f"""π§ **System Status:**
|
| 790 |
- Salesforce: {sf_status}
|
|
|
|
| 791 |
- Registered Workers: {db_workers}
|
| 792 |
- Recognition Threshold: {FACE_RECOGNITION_THRESHOLD}
|
| 793 |
- Confidence Threshold: {CONFIDENCE_THRESHOLD}
|
|
|
|
| 2 |
import os
|
| 3 |
os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'
|
| 4 |
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
|
| 5 |
+
os.environ['CUDA_VISIBLE_DEVICES'] = '-1' # Force CPU usage to avoid GPU issues
|
| 6 |
|
| 7 |
# Standard Library Imports
|
| 8 |
import base64
|
|
|
|
| 27 |
from PIL import Image
|
| 28 |
import requests
|
| 29 |
from dotenv import load_dotenv
|
|
|
|
| 30 |
from retrying import retry
|
| 31 |
from simple_salesforce import Salesforce
|
| 32 |
+
|
| 33 |
+
# Import DeepFace with fallback
|
| 34 |
+
try:
|
| 35 |
+
from deepface import DeepFace
|
| 36 |
+
DEEPFACE_AVAILABLE = True
|
| 37 |
+
except ImportError as e:
|
| 38 |
+
print(f"DeepFace not available: {e}")
|
| 39 |
+
DEEPFACE_AVAILABLE = False
|
| 40 |
+
|
| 41 |
except ImportError as e:
|
| 42 |
print(f"Missing dependency: {e}")
|
| 43 |
print("Please install required packages using: pip install -r requirements.txt")
|
|
|
|
| 343 |
if image is None or not name.strip():
|
| 344 |
return "β Please provide both image and name!", self.get_registered_workers_info()
|
| 345 |
|
| 346 |
+
if not DEEPFACE_AVAILABLE:
|
| 347 |
+
return "β DeepFace is not available. Please check installation.", self.get_registered_workers_info()
|
| 348 |
+
|
| 349 |
try:
|
| 350 |
# Validate image quality
|
| 351 |
image_array = np.array(image)
|
|
|
|
| 387 |
|
| 388 |
def _register_worker_auto(self, face_image: np.ndarray) -> Optional[Tuple[str, str]]:
|
| 389 |
"""Auto-register a new worker with improved validation."""
|
| 390 |
+
if not DEEPFACE_AVAILABLE:
|
| 391 |
+
return None
|
| 392 |
+
|
| 393 |
try:
|
| 394 |
# Skip very small faces
|
| 395 |
if face_image.shape[0] < 50 or face_image.shape[1] < 50:
|
|
|
|
| 518 |
|
| 519 |
def process_frame(self, frame: np.ndarray) -> np.ndarray:
|
| 520 |
"""Enhanced frame processing with better error handling."""
|
| 521 |
+
if not DEEPFACE_AVAILABLE:
|
| 522 |
+
# Draw a message on the frame
|
| 523 |
+
cv2.putText(frame, "DeepFace not available", (50, 50),
|
| 524 |
+
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
|
| 525 |
+
return frame
|
| 526 |
+
|
| 527 |
try:
|
| 528 |
self.processing_stats['frames_processed'] += 1
|
| 529 |
|
|
|
|
| 805 |
def get_system_status(self) -> str:
|
| 806 |
"""Get comprehensive system status."""
|
| 807 |
sf_status = "β
Connected" if self.sf else "β Offline"
|
| 808 |
+
deepface_status = "β
Available" if DEEPFACE_AVAILABLE else "β Not Available"
|
| 809 |
db_workers = len(self.db.get_all_workers())
|
| 810 |
|
| 811 |
status = f"""π§ **System Status:**
|
| 812 |
- Salesforce: {sf_status}
|
| 813 |
+
- DeepFace: {deepface_status}
|
| 814 |
- Registered Workers: {db_workers}
|
| 815 |
- Recognition Threshold: {FACE_RECOGNITION_THRESHOLD}
|
| 816 |
- Confidence Threshold: {CONFIDENCE_THRESHOLD}
|