SecureAttendAI / run.py
Nishant Katiyar
Deploy biometric node to HF Spaces
b561839
Raw
History Blame Contribute Delete
3.04 kB
import os
import sys
import subprocess
import time
import webbrowser
import urllib.request
def install_dependencies():
print("[*] Verifying system dependencies...")
try:
# Check and install requirements
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"])
print("[+] Dependency checks passed successfully!")
except Exception as e:
print(f"[-] Error installing dependencies: {e}")
sys.exit(1)
def verify_models():
models_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "backend", "models")
os.makedirs(models_dir, exist_ok=True)
yunet_path = os.path.join(models_dir, "face_detection_yunet_2023mar.onnx")
sface_path = os.path.join(models_dir, "face_recognition_sface_2021dec.onnx")
yunet_url = "https://huggingface.co/opencv/face_detection_yunet/resolve/main/face_detection_yunet_2023mar.onnx"
sface_url = "https://huggingface.co/opencv/face_recognition_sface/resolve/main/face_recognition_sface_2021dec.onnx"
# Download helper
def check_and_download(url, path, name):
if os.path.exists(path) and os.path.getsize(path) > 10000:
print(f"[+] Model '{name}' is already present and validated.")
return
print(f"[*] Downloading {name} ONNX model...")
try:
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
with urllib.request.urlopen(req) as response, open(path, 'wb') as out_file:
out_file.write(response.read())
print(f"[+] Successfully downloaded {name} ({os.path.getsize(path)} bytes)!")
except Exception as e:
print(f"[-] Failed to download {name}: {e}")
sys.exit(1)
check_and_download(yunet_url, yunet_path, "YuNet Face Detector")
check_and_download(sface_url, sface_path, "SFace Vectorizer")
def launch_server():
print("\n" + "="*60)
print(" SECUREATTEND AI FACIAL ATTENDANCE CONTROL CENTER ")
print("="*60 + "\n")
print("[*] Launching localized FastAPI server on Uvicorn...")
# Open browser after a slight delay to let the server bind first
def open_browser():
time.sleep(2.0)
print("[+] Opening UI dashboard in web browser: http://127.0.0.1:8000")
webbrowser.open("http://127.0.0.1:8000")
import threading
threading.Thread(target=open_browser, daemon=True).start()
try:
import uvicorn
# Run Uvicorn directly
uvicorn.run("backend.main:app", host="127.0.0.1", port=8000, reload=False)
except KeyboardInterrupt:
print("\n[+] SecureAttend server shut down successfully.")
except Exception as e:
print(f"\n[-] Server execution failed: {e}")
if __name__ == "__main__":
# 1. Install pip requirements
install_dependencies()
# 2. Check/download YuNet and SFace ONNX binaries
verify_models()
# 3. Fire up Uvicorn and browser UI
launch_server()