mirror of
https://github.com/serengil/deepface.git
synced 2025-06-04 02:20:06 +00:00
Update Logger singleton creation, add test and docstring
This commit is contained in:
parent
6d33c1d8be
commit
59e8d52b63
1
.gitignore
vendored
1
.gitignore
vendored
@ -6,6 +6,7 @@ Pipfile
|
||||
Pipfile.lock
|
||||
.mypy_cache/
|
||||
.idea/
|
||||
.vscode/
|
||||
deepface.egg-info/
|
||||
tests/dataset/*.pkl
|
||||
tests/*.ipynb
|
||||
|
@ -16,7 +16,7 @@ import tensorflow as tf
|
||||
|
||||
# package dependencies
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
from deepface.modules import (
|
||||
modeling,
|
||||
representation,
|
||||
@ -29,7 +29,7 @@ from deepface.modules import (
|
||||
)
|
||||
from deepface import __version__
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# -----------------------------------
|
||||
# configurations for dependencies
|
||||
|
@ -5,9 +5,9 @@ from flask_cors import CORS
|
||||
# project dependencies
|
||||
from deepface import DeepFace
|
||||
from deepface.api.src.modules.core.routes import blueprint
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
def create_app():
|
||||
|
@ -1,9 +1,9 @@
|
||||
from flask import Blueprint, request
|
||||
from deepface import DeepFace
|
||||
from deepface.api.src.modules.core import service
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
blueprint = Blueprint("routes", __name__)
|
||||
|
||||
|
@ -3,9 +3,9 @@ import gdown
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.models.FacialRecognition import FacialRecognition
|
||||
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# pylint: disable=unsubscriptable-object
|
||||
|
||||
|
@ -2,9 +2,9 @@ import os
|
||||
import gdown
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.models.FacialRecognition import FacialRecognition
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
tf_version = package_utils.get_tf_major_version()
|
||||
|
||||
|
@ -5,9 +5,9 @@ import gdown
|
||||
import numpy as np
|
||||
from deepface.commons import folder_utils
|
||||
from deepface.models.FacialRecognition import FacialRecognition
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# pylint: disable=too-few-public-methods
|
||||
|
||||
|
@ -2,9 +2,9 @@ import os
|
||||
import gdown
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.models.FacialRecognition import FacialRecognition
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# --------------------------------
|
||||
# dependency configuration
|
||||
|
@ -3,9 +3,9 @@ import zipfile
|
||||
import gdown
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.models.FacialRecognition import FacialRecognition
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# --------------------------------
|
||||
# dependency configuration
|
||||
|
@ -8,9 +8,9 @@ import tensorflow as tf
|
||||
# project dependencies
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.models.FacialRecognition import FacialRecognition
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
tf_major = package_utils.get_tf_major_version()
|
||||
if tf_major == 1:
|
||||
|
@ -3,9 +3,9 @@ import gdown
|
||||
import tensorflow as tf
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.models.FacialRecognition import FacialRecognition
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
tf_version = package_utils.get_tf_major_version()
|
||||
if tf_version == 1:
|
||||
|
@ -10,9 +10,9 @@ import gdown
|
||||
# project dependencies
|
||||
from deepface.commons import folder_utils
|
||||
from deepface.models.FacialRecognition import FacialRecognition
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# pylint: disable=line-too-long, too-few-public-methods
|
||||
|
||||
|
@ -5,9 +5,9 @@ import numpy as np
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.modules import verification
|
||||
from deepface.models.FacialRecognition import FacialRecognition
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# ---------------------------------------
|
||||
|
||||
|
@ -5,9 +5,9 @@ import os
|
||||
import gdown
|
||||
|
||||
# project dependencies
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
def download_external_file(file_name: str, exact_file_path: str, url: str) -> None:
|
||||
|
@ -1,8 +1,8 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
def initialize_folder() -> None:
|
||||
|
@ -4,18 +4,34 @@ from datetime import datetime
|
||||
|
||||
# pylint: disable=broad-except
|
||||
class Logger:
|
||||
def __init__(self, module=None):
|
||||
self.module = module
|
||||
log_level = os.environ.get("DEEPFACE_LOG_LEVEL", str(logging.INFO))
|
||||
try:
|
||||
self.log_level = int(log_level)
|
||||
except Exception as err:
|
||||
self.dump_log(
|
||||
f"Exception while parsing $DEEPFACE_LOG_LEVEL."
|
||||
f"Expected int but it is {log_level} ({str(err)})."
|
||||
"Setting app log level to info."
|
||||
)
|
||||
self.log_level = logging.INFO
|
||||
"""
|
||||
A Logger class for logging messages with a specific log level.
|
||||
|
||||
The class follows the singleton design pattern, ensuring that only one
|
||||
instance of the Logger is created. The parameters of the first instance
|
||||
are preserved across all instances.
|
||||
"""
|
||||
|
||||
__instance = None
|
||||
|
||||
def __new__(cls):
|
||||
if cls.__instance is None:
|
||||
cls.__instance = super(Logger, cls).__new__(cls)
|
||||
return cls.__instance
|
||||
|
||||
def __init__(self):
|
||||
if not hasattr(self, "_singleton_initialized"):
|
||||
self._singleton_initialized = True # to prevent multiple initializations
|
||||
log_level = os.environ.get("DEEPFACE_LOG_LEVEL", str(logging.INFO))
|
||||
try:
|
||||
self.log_level = int(log_level)
|
||||
except Exception as err:
|
||||
self.dump_log(
|
||||
f"Exception while parsing $DEEPFACE_LOG_LEVEL."
|
||||
f"Expected int but it is {log_level} ({str(err)})."
|
||||
"Setting app log level to info."
|
||||
)
|
||||
self.log_level = logging.INFO
|
||||
|
||||
def info(self, message):
|
||||
if self.log_level <= logging.INFO:
|
||||
@ -39,16 +55,3 @@ class Logger:
|
||||
|
||||
def dump_log(self, message):
|
||||
print(f"{str(datetime.now())[2:-7]} - {message}")
|
||||
|
||||
|
||||
def get_singletonish_logger():
|
||||
# singleton design pattern
|
||||
global model_obj
|
||||
|
||||
if not "model_obj" in globals():
|
||||
model_obj = {}
|
||||
|
||||
if "logger" not in model_obj.keys():
|
||||
model_obj["logger"] = Logger(module="Singleton")
|
||||
|
||||
return model_obj["logger"]
|
||||
|
@ -2,9 +2,9 @@
|
||||
import tensorflow as tf
|
||||
|
||||
# package dependencies
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
def get_tf_major_version() -> int:
|
||||
|
@ -10,9 +10,9 @@ import gdown
|
||||
# project dependencies
|
||||
from deepface.commons import folder_utils
|
||||
from deepface.models.Detector import Detector, FacialAreaRegion
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# pylint: disable=c-extension-no-member
|
||||
|
||||
|
@ -15,9 +15,9 @@ from deepface.detectors import (
|
||||
YuNet,
|
||||
CenterFace,
|
||||
)
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
def build_model(detector_backend: str) -> Any:
|
||||
|
@ -5,9 +5,9 @@ import gdown
|
||||
import numpy as np
|
||||
from deepface.commons import folder_utils
|
||||
from deepface.models.Detector import Detector, FacialAreaRegion
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
class DlibClient(Detector):
|
||||
|
@ -7,9 +7,9 @@ import numpy as np
|
||||
from deepface.detectors import OpenCv
|
||||
from deepface.commons import folder_utils
|
||||
from deepface.models.Detector import Detector, FacialAreaRegion
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# pylint: disable=line-too-long, c-extension-no-member
|
||||
|
||||
|
@ -4,9 +4,9 @@ import numpy as np
|
||||
import gdown
|
||||
from deepface.models.Detector import Detector, FacialAreaRegion
|
||||
from deepface.commons import folder_utils
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# Model's weights paths
|
||||
PATH = "/.deepface/weights/yolov8n-face.pt"
|
||||
|
@ -10,9 +10,9 @@ import gdown
|
||||
# project dependencies
|
||||
from deepface.commons import folder_utils
|
||||
from deepface.models.Detector import Detector, FacialAreaRegion
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
class YuNetClient(Detector):
|
||||
|
@ -4,9 +4,9 @@ import numpy as np
|
||||
from deepface.basemodels import VGGFace
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.models.Demography import Demography
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# ----------------------------------------
|
||||
# dependency configurations
|
||||
|
@ -9,9 +9,9 @@ import cv2
|
||||
# project dependencies
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.models.Demography import Demography
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# -------------------------------------------
|
||||
# pylint: disable=line-too-long
|
||||
|
@ -9,9 +9,9 @@ import numpy as np
|
||||
from deepface.basemodels import VGGFace
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.models.Demography import Demography
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# -------------------------------------
|
||||
# pylint: disable=line-too-long
|
||||
|
@ -9,9 +9,9 @@ import numpy as np
|
||||
from deepface.basemodels import VGGFace
|
||||
from deepface.commons import package_utils, folder_utils
|
||||
from deepface.models.Demography import Demography
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# --------------------------
|
||||
# pylint: disable=line-too-long
|
||||
|
@ -11,9 +11,9 @@ from deepface.modules import modeling
|
||||
from deepface.models.Detector import DetectedFace, FacialAreaRegion
|
||||
from deepface.detectors import DetectorWrapper
|
||||
from deepface.commons import image_utils
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# pylint: disable=no-else-raise
|
||||
|
||||
|
@ -12,9 +12,9 @@ from tqdm import tqdm
|
||||
# project dependencies
|
||||
from deepface.commons import image_utils
|
||||
from deepface.modules import representation, detection, verification
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
def find(
|
||||
|
@ -10,9 +10,9 @@ import cv2
|
||||
|
||||
# project dependencies
|
||||
from deepface import DeepFace
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# dependency configuration
|
||||
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"
|
||||
|
@ -8,9 +8,9 @@ import numpy as np
|
||||
# project dependencies
|
||||
from deepface.modules import representation, detection, modeling
|
||||
from deepface.models.FacialRecognition import FacialRecognition
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
def verify(
|
||||
|
@ -9,9 +9,10 @@ import cv2
|
||||
import numpy as np
|
||||
|
||||
# project dependencies
|
||||
from deepface.commons import folder_utils, file_utils, logger as log
|
||||
from deepface.commons import folder_utils, file_utils
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# pylint: disable=line-too-long, too-few-public-methods
|
||||
class Fasnet:
|
||||
|
@ -7,9 +7,9 @@ import cv2
|
||||
from deepface import DeepFace
|
||||
from deepface.modules import verification
|
||||
from deepface.models.FacialRecognition import FacialRecognition
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# ----------------------------------------------
|
||||
# build face recognition model
|
||||
|
@ -3,9 +3,9 @@ import cv2
|
||||
|
||||
# project dependencies
|
||||
from deepface import DeepFace
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
detectors = ["opencv", "mtcnn"]
|
||||
|
@ -4,9 +4,9 @@ import unittest
|
||||
|
||||
# project dependencies
|
||||
from deepface.api.src.app import create_app
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
class TestVerifyEndpoint(unittest.TestCase):
|
||||
|
@ -4,9 +4,9 @@ import numpy as np
|
||||
|
||||
# project dependencies
|
||||
from deepface import DeepFace
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
def test_enabled_enforce_detection_for_non_facial_input():
|
||||
|
@ -9,9 +9,9 @@ import pytest
|
||||
# project dependencies
|
||||
from deepface import DeepFace
|
||||
from deepface.commons import image_utils
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
detectors = ["opencv", "mtcnn"]
|
||||
|
||||
|
@ -9,9 +9,9 @@ import pandas as pd
|
||||
from deepface import DeepFace
|
||||
from deepface.modules import verification
|
||||
from deepface.commons import image_utils
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
threshold = verification.find_threshold(model_name="VGG-Face", distance_metric="cosine")
|
||||
|
@ -3,9 +3,9 @@ import cv2
|
||||
|
||||
# project dependencies
|
||||
from deepface import DeepFace
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
def test_standard_represent():
|
||||
|
8
tests/test_singleton.py
Normal file
8
tests/test_singleton.py
Normal file
@ -0,0 +1,8 @@
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = Logger()
|
||||
|
||||
|
||||
def test_singleton_same_object():
|
||||
assert Logger() == Logger()
|
||||
logger.info("✅ id's of instances of \"singletoned\" class Logger are the same")
|
@ -4,9 +4,9 @@ import cv2
|
||||
|
||||
# project dependencies
|
||||
from deepface import DeepFace
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
models = ["VGG-Face", "Facenet", "Facenet512", "ArcFace", "GhostFaceNet"]
|
||||
metrics = ["cosine", "euclidean", "euclidean_l2"]
|
||||
|
@ -3,9 +3,9 @@ import json
|
||||
|
||||
# project dependencies
|
||||
from deepface import DeepFace
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
|
||||
def test_version():
|
||||
|
@ -3,9 +3,9 @@ import matplotlib.pyplot as plt
|
||||
|
||||
# project dependencies
|
||||
from deepface import DeepFace
|
||||
from deepface.commons import logger as log
|
||||
from deepface.commons.logger import Logger
|
||||
|
||||
logger = log.get_singletonish_logger()
|
||||
logger = Logger()
|
||||
|
||||
# some models (e.g. Dlib) and detectors (e.g. retinaface) do not have test cases
|
||||
# because they require to install huge packages
|
||||
|
Loading…
x
Reference in New Issue
Block a user