face_verify / start.py
subhan971's picture
Upload 9 files
890f045 verified
Raw
History Blame Contribute Delete
5.14 kB
"""
Startup script for Face Verification System
"""
import os
import sys
import logging
from pathlib import Path
# Setup logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
def check_dependencies():
"""Check if all required dependencies are installed"""
required_packages = [
'fastapi',
'uvicorn',
'cv2',
'numpy',
'pydantic'
]
missing_packages = []
for package in required_packages:
try:
if package == 'cv2':
import cv2
else:
__import__(package)
logger.info(f"βœ“ {package} installed")
except ImportError:
missing_packages.append(package)
logger.error(f"βœ— {package} not installed")
if missing_packages:
logger.error(f"Missing packages: {', '.join(missing_packages)}")
logger.info("Install with: pip install -r requirements.txt")
return False
return True
def check_optional_dependencies():
"""Check optional face recognition libraries"""
optional_packages = {
'deepface': 'DeepFace',
'face_recognition': 'face_recognition',
'insightface': 'InsightFace'
}
available = []
for package, name in optional_packages.items():
try:
__import__(package)
available.append(name)
logger.info(f"βœ“ {name} available")
except ImportError:
logger.warning(f"⚠ {name} not available (will use fallback)")
if not available:
logger.warning("No advanced face recognition library found. Using custom fallback.")
logger.info("For better accuracy, install: pip install deepface face-recognition")
else:
logger.info(f"Using: {', '.join(available)}")
def create_directories():
"""Create necessary directories"""
directories = ['uploads', 'temp', 'models']
for directory in directories:
Path(directory).mkdir(exist_ok=True)
logger.info(f"βœ“ Directory created/verified: {directory}")
def download_models():
"""Download face detection models if not present"""
try:
import urllib.request
models_dir = Path('models')
models_dir.mkdir(exist_ok=True)
# DNN face detection model files
prototxt_url = "https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt"
model_url = "https://raw.githubusercontent.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000.caffemodel"
prototxt_path = models_dir / "deploy.prototxt"
model_path = models_dir / "res10_300x300_ssd_iter_140000.caffemodel"
# Download prototxt
if not prototxt_path.exists():
logger.info("Downloading face detection prototxt...")
urllib.request.urlretrieve(prototxt_url, prototxt_path)
logger.info("βœ“ Prototxt downloaded")
else:
logger.info("βœ“ Prototxt already exists")
# Download model (this is large, ~10MB)
if not model_path.exists():
logger.info("Downloading face detection model (this may take a while)...")
urllib.request.urlretrieve(model_url, model_path)
logger.info("βœ“ Model downloaded")
else:
logger.info("βœ“ Model already exists")
return True
except Exception as e:
logger.warning(f"Could not download models: {e}")
logger.info("Will use Haar Cascade fallback (built-in to OpenCV)")
return False
def main():
"""Main startup function"""
logger.info("=" * 60)
logger.info("πŸš€ Face Verification System - Startup")
logger.info("=" * 60)
# Check dependencies
logger.info("\n1. Checking dependencies...")
if not check_dependencies():
logger.error("❌ Dependency check failed")
sys.exit(1)
# Check optional dependencies
logger.info("\n2. Checking optional dependencies...")
check_optional_dependencies()
# Create directories
logger.info("\n3. Creating directories...")
create_directories()
# Download models
logger.info("\n4. Checking face detection models...")
download_models()
# Set environment variables
port = int(os.getenv('PORT', 7860))
host = os.getenv('HOST', '0.0.0.0')
logger.info("\n" + "=" * 60)
logger.info("βœ“ Startup checks complete!")
logger.info(f"Starting server on {host}:{port}")
logger.info("=" * 60 + "\n")
# Start the application
import uvicorn
from app import app
uvicorn.run(
app,
host=host,
port=port,
log_level="info",
access_log=True
)
if __name__ == "__main__":
main()