Spaces:
Sleeping
Sleeping
Pavanupadhyay27 commited on
Commit ·
dbbe05a
1
Parent(s): 4083163
Add FORCE_MOCK_MODE to solve Render 502 OOM crash and support functional mock-mode kiosk scans
Browse files- backend/.env +1 -0
- backend/.env.example +1 -0
- backend/app/core/config.py +1 -0
- backend/app/services/face_engine.py +10 -0
backend/.env
CHANGED
|
@@ -17,6 +17,7 @@ INITIAL_ADMIN_PASSWORD="Admin@NetraID2026"
|
|
| 17 |
|
| 18 |
KIOSK_FACE_THRESHOLD=0.60
|
| 19 |
KIOSK_LIVENESS_THRESHOLD=0.75
|
|
|
|
| 20 |
|
| 21 |
UPLOAD_DIR="./uploads"
|
| 22 |
MODELS_DIR="./models"
|
|
|
|
| 17 |
|
| 18 |
KIOSK_FACE_THRESHOLD=0.60
|
| 19 |
KIOSK_LIVENESS_THRESHOLD=0.75
|
| 20 |
+
FORCE_MOCK_MODE=false
|
| 21 |
|
| 22 |
UPLOAD_DIR="./uploads"
|
| 23 |
MODELS_DIR="./models"
|
backend/.env.example
CHANGED
|
@@ -19,6 +19,7 @@ INITIAL_ADMIN_PASSWORD="Admin@NetraID2026"
|
|
| 19 |
# Kiosk & AI Parameters
|
| 20 |
KIOSK_FACE_THRESHOLD=0.60
|
| 21 |
KIOSK_LIVENESS_THRESHOLD=0.75
|
|
|
|
| 22 |
|
| 23 |
# Folders for Assets
|
| 24 |
UPLOAD_DIR="./uploads"
|
|
|
|
| 19 |
# Kiosk & AI Parameters
|
| 20 |
KIOSK_FACE_THRESHOLD=0.60
|
| 21 |
KIOSK_LIVENESS_THRESHOLD=0.75
|
| 22 |
+
FORCE_MOCK_MODE=false
|
| 23 |
|
| 24 |
# Folders for Assets
|
| 25 |
UPLOAD_DIR="./uploads"
|
backend/app/core/config.py
CHANGED
|
@@ -23,6 +23,7 @@ class Settings(BaseSettings):
|
|
| 23 |
# Face recognition & liveness detection parameters
|
| 24 |
KIOSK_FACE_THRESHOLD: float = 0.60
|
| 25 |
KIOSK_LIVENESS_THRESHOLD: float = 0.75
|
|
|
|
| 26 |
|
| 27 |
# Paths
|
| 28 |
UPLOAD_DIR: str = "./uploads"
|
|
|
|
| 23 |
# Face recognition & liveness detection parameters
|
| 24 |
KIOSK_FACE_THRESHOLD: float = 0.60
|
| 25 |
KIOSK_LIVENESS_THRESHOLD: float = 0.75
|
| 26 |
+
FORCE_MOCK_MODE: bool = False
|
| 27 |
|
| 28 |
# Paths
|
| 29 |
UPLOAD_DIR: str = "./uploads"
|
backend/app/services/face_engine.py
CHANGED
|
@@ -24,6 +24,12 @@ class FaceEngine:
|
|
| 24 |
self.liveness_model_27 = os.path.join(self.models_dir, "2.7k_80x80.onnx")
|
| 25 |
self.liveness_model_18 = os.path.join(self.models_dir, "1.8k_128x128.onnx")
|
| 26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
# Check if ORT is available
|
| 28 |
if ort is None:
|
| 29 |
logger.warning("onnxruntime is not installed. Running in MOCK MODE.")
|
|
@@ -456,6 +462,10 @@ class FaceEngine:
|
|
| 456 |
Computes cosine similarity between two 512-D embeddings.
|
| 457 |
Since they are L2-normalized, cosine similarity is just the dot product.
|
| 458 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
| 459 |
return float(np.dot(embedding1, embedding2))
|
| 460 |
|
| 461 |
def load_embeddings_cache(self, db_session):
|
|
|
|
| 24 |
self.liveness_model_27 = os.path.join(self.models_dir, "2.7k_80x80.onnx")
|
| 25 |
self.liveness_model_18 = os.path.join(self.models_dir, "1.8k_128x128.onnx")
|
| 26 |
|
| 27 |
+
# Check if mock mode is forced configurationally (for low-RAM server environments like Render Free Tier)
|
| 28 |
+
if getattr(settings, "FORCE_MOCK_MODE", False):
|
| 29 |
+
logger.info("FORCE_MOCK_MODE is enabled. Running in MOCK MODE.")
|
| 30 |
+
self.mock_mode = True
|
| 31 |
+
return
|
| 32 |
+
|
| 33 |
# Check if ORT is available
|
| 34 |
if ort is None:
|
| 35 |
logger.warning("onnxruntime is not installed. Running in MOCK MODE.")
|
|
|
|
| 462 |
Computes cosine similarity between two 512-D embeddings.
|
| 463 |
Since they are L2-normalized, cosine similarity is just the dot product.
|
| 464 |
"""
|
| 465 |
+
if self.mock_mode:
|
| 466 |
+
# For demonstration purposes on low-RAM server mock mode, return a high matching score
|
| 467 |
+
# to make the kiosk match the first registered user successfully.
|
| 468 |
+
return 0.85
|
| 469 |
return float(np.dot(embedding1, embedding2))
|
| 470 |
|
| 471 |
def load_embeddings_cache(self, db_session):
|