Spaces:
Sleeping
Sleeping
| """ | |
| Configuration settings for the validation module. | |
| This module provides centralized configuration for the validation service, | |
| including model paths, processing parameters, and validation thresholds. | |
| """ | |
| import os | |
| from typing import Optional | |
| class ValidationConfig: | |
| """ | |
| Configuration settings for the validation service. | |
| This class provides centralized configuration management for all | |
| validation-related settings, with sensible defaults and environment | |
| variable overrides. | |
| """ | |
| def __init__(self): | |
| """Initialize configuration with default values and environment overrides.""" | |
| # Model paths | |
| self.hand_detector_path = os.getenv( | |
| "HAND_DETECTOR_PATH", | |
| "models/hand_detector.onnx" | |
| ) | |
| self.gesture_classifier_path = os.getenv( | |
| "GESTURE_CLASSIFIER_PATH", | |
| "models/crops_classifier.onnx" | |
| ) | |
| # Processing parameters | |
| self.frame_skip = int(os.getenv("FRAME_SKIP", "1")) | |
| self.min_gesture_duration = int(os.getenv("MIN_GESTURE_DURATION", "5")) | |
| self.confidence_threshold = float(os.getenv("CONFIDENCE_THRESHOLD", "0.7")) | |
| # Validation parameters | |
| self.default_error_margin = float(os.getenv("DEFAULT_ERROR_MARGIN", "0.33")) | |
| self.require_all_gestures = os.getenv("REQUIRE_ALL_GESTURES", "true").lower() == "true" | |
| self.confidence_threshold = float(os.getenv("CONFIDENCE_THRESHOLD", "0.7")) | |
| self.min_gesture_duration = int(os.getenv("MIN_GESTURE_DURATION", "5")) | |
| # Facial validation parameters | |
| self.similarity_threshold = float(os.getenv("SIMILARITY_THRESHOLD", "0.7")) | |
| self.frame_sample_rate = int(os.getenv("FRAME_SAMPLE_RATE", "10")) | |
| # File size limits (in bytes) | |
| self.max_photo_size = int(os.getenv("MAX_PHOTO_SIZE", str(50 * 1024 * 1024))) # 50MB | |
| self.max_video_size = int(os.getenv("MAX_VIDEO_SIZE", str(200 * 1024 * 1024))) # 200MB | |
| # Performance settings | |
| self.max_processing_time = int(os.getenv("MAX_PROCESSING_TIME", "60")) # seconds | |
| self.enable_detailed_logging = os.getenv("ENABLE_DETAILED_LOGGING", "false").lower() == "true" | |
| # Security settings | |
| self.allowed_image_types = os.getenv( | |
| "ALLOWED_IMAGE_TYPES", | |
| "image/jpeg,image/png,image/webp,application/pdf" | |
| ).split(",") | |
| self.allowed_video_types = os.getenv( | |
| "ALLOWED_VIDEO_TYPES", | |
| "video/mp4,video/avi,video/mov,video/webm" | |
| ).split(",") | |
| def model_paths(self) -> dict: | |
| """Get model paths as a dictionary.""" | |
| return { | |
| "hand_detector": self.hand_detector_path, | |
| "gesture_classifier": self.gesture_classifier_path | |
| } | |
| def processing_params(self) -> dict: | |
| """Get processing parameters as a dictionary.""" | |
| return { | |
| "frame_skip": self.frame_skip, | |
| "min_gesture_duration": self.min_gesture_duration, | |
| "confidence_threshold": self.confidence_threshold | |
| } | |
| def validation_params(self) -> dict: | |
| """Get validation parameters as a dictionary.""" | |
| return { | |
| "default_error_margin": self.default_error_margin, | |
| "require_all_gestures": self.require_all_gestures | |
| } | |
| def validate_file_type(self, content_type: str, file_type: str = "image") -> bool: | |
| """ | |
| Validate if a file type is allowed. | |
| Parameters | |
| ---------- | |
| content_type : str | |
| MIME content type of the file | |
| file_type : str, optional | |
| Type of file ("image" or "video"), by default "image" | |
| Returns | |
| ------- | |
| bool | |
| True if file type is allowed, False otherwise | |
| """ | |
| if file_type == "image": | |
| allowed_types = self.allowed_image_types | |
| elif file_type == "video": | |
| allowed_types = self.allowed_video_types | |
| else: | |
| return False | |
| return content_type in allowed_types | |
| def validate_file_size(self, file_size: int, file_type: str = "image") -> bool: | |
| """ | |
| Validate if a file size is within limits. | |
| Parameters | |
| ---------- | |
| file_size : int | |
| Size of the file in bytes | |
| file_type : str, optional | |
| Type of file ("image" or "video"), by default "image" | |
| Returns | |
| ------- | |
| bool | |
| True if file size is within limits, False otherwise | |
| """ | |
| if file_type == "image": | |
| max_size = self.max_photo_size | |
| elif file_type == "video": | |
| max_size = self.max_video_size | |
| else: | |
| return False | |
| return file_size <= max_size | |
| # Global configuration instance | |
| config = ValidationConfig() | |
| def get_config() -> ValidationConfig: | |
| """ | |
| Get the global configuration instance. | |
| Returns | |
| ------- | |
| ValidationConfig | |
| Global configuration instance | |
| """ | |
| return config | |
| def reload_config() -> ValidationConfig: | |
| """ | |
| Reload configuration from environment variables. | |
| Returns | |
| ------- | |
| ValidationConfig | |
| New configuration instance with updated values | |
| """ | |
| global config | |
| config = ValidationConfig() | |
| return config | |