File size: 1,782 Bytes
b5d3a91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 3rd parth dependencies
from flask import Flask
from flask_cors import CORS
from dotenv import load_dotenv

# load environment variables from .env first things first
load_dotenv()


# pylint: disable=wrong-import-position
# project dependencies
from deepface import __version__
from deepface.api.src.modules.core.routes import blueprint
from deepface.api.src.dependencies.variables import Variables
from deepface.api.src.dependencies.container import Container
from deepface import DeepFace
from deepface.commons.logger import Logger

logger = Logger()


def create_app() -> Flask:
    app = Flask(__name__)
    CORS(app)

    variables = Variables()
    container = Container(variables=variables)

    # inject variables
    blueprint.variables = variables  # type: ignore[attr-defined]
    blueprint.container = container  # type: ignore[attr-defined]

    load_models_on_startup(variables)

    app.register_blueprint(blueprint)

    logger.info(f"Welcome to DeepFace API v{__version__}!")
    return app


def load_models_on_startup(variables: Variables) -> None:
    """Load models on startup to reduce latency on first request."""
    face_recognition_models = variables.face_recognition_models
    if face_recognition_models is not None:
        for model in face_recognition_models.split(","):
            DeepFace.build_model(task="facial_recognition", model_name=model.strip())
            logger.info(f"Facial Recognition Model {model} loaded on startup.")
    face_detection_models = variables.face_detection_models
    if face_detection_models is not None:
        for model in face_detection_models.split(","):
            DeepFace.build_model(task="face_detector", model_name=model.strip())
            logger.info(f"Face Detector Model {model} loaded on startup.")