Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

open issues #999

Merged
merged 1 commit into from
Feb 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions CITATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
## Cite DeepFace Papers

Please cite deepface in your publications if it helps your research. Here are its BibTex entries:

### Facial Recognition

If you use deepface in your research for facial recogntion purposes, please cite the this publication.

```BibTeX
@inproceedings{serengil2020lightface,
title = {LightFace: A Hybrid Deep Face Recognition Framework},
author = {Serengil, Sefik Ilkin and Ozpinar, Alper},
booktitle = {2020 Innovations in Intelligent Systems and Applications Conference (ASYU)},
pages = {23-27},
year = {2020},
doi = {10.1109/ASYU50717.2020.9259802},
url = {https://doi.org/10.1109/ASYU50717.2020.9259802},
organization = {IEEE}
}
```

### Facial Attribute Analysis

If you use deepface in your research for facial attribute analysis purposes such as age, gender, emotion or ethnicity prediction or face detection purposes, please cite the this publication.

```BibTeX
@inproceedings{serengil2021lightface,
title = {HyperExtended LightFace: A Facial Attribute Analysis Framework},
author = {Serengil, Sefik Ilkin and Ozpinar, Alper},
booktitle = {2021 International Conference on Engineering and Emerging Technologies (ICEET)},
pages = {1-4},
year = {2021},
doi = {10.1109/ICEET53442.2021.9659697},
url = {https://doi.org/10.1109/ICEET53442.2021.9659697},
organization = {IEEE}
}
```

### Repositories

Also, if you use deepface in your GitHub projects, please add `deepface` in the `requirements.txt`. Thereafter, your project will be listed in its [dependency graph](https://github.com/serengil/deepface/network/dependents).
8 changes: 4 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ RUN apt-get install ffmpeg libsm6 libxext6 -y
# -----------------------------------
# Copy required files from repo into image
COPY ./deepface /app/deepface
COPY ./api/app.py /app/
COPY ./api/api.py /app/
COPY ./api/routes.py /app/
COPY ./api/service.py /app/
COPY ./api/src/app.py /app/
COPY ./api/src/api.py /app/
COPY ./api/src/routes.py /app/
COPY ./api/src/service.py /app/
COPY ./requirements.txt /app/
COPY ./setup.py /app/
COPY ./README.md /app/
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ cd scripts

<p align="center"><img src="https://raw.githubusercontent.com/serengil/deepface/master/icon/deepface-api.jpg" width="90%" height="90%"></p>

Face recognition, facial attribute analysis and vector representation functions are covered in the API. You are expected to call these functions as http post methods. Default service endpoints will be `http://localhost:5000/verify` for face recognition, `http://localhost:5000/analyze` for facial attribute analysis, and `http://localhost:5000/represent` for vector representation. You can pass input images as exact image paths on your environment, base64 encoded strings or images on web. [Here](https://github.com/serengil/deepface/tree/master/api), you can find a postman project to find out how these methods should be called.
Face recognition, facial attribute analysis and vector representation functions are covered in the API. You are expected to call these functions as http post methods. Default service endpoints will be `http://localhost:5000/verify` for face recognition, `http://localhost:5000/analyze` for facial attribute analysis, and `http://localhost:5000/represent` for vector representation. You can pass input images as exact image paths on your environment, base64 encoded strings or images on web. [Here](https://github.com/serengil/deepface/tree/master/api/postman), you can find a postman project to find out how these methods should be called.

**Dockerized Service**

Expand Down Expand Up @@ -332,9 +332,9 @@ You can also support this work on [Patreon](https://www.patreon.com/serengil?rep

## Citation

Please cite deepface in your publications if it helps your research. Here are its BibTex entries:
Please cite deepface in your publications if it helps your research - see [`CITATIONS`](https://github.com/serengil/deepface/blob/master/CITATIONS.md) for more details. Here are its BibTex entries:

If you use deepface for facial recogntion purposes, please cite the this publication.
If you use deepface in your research for facial recogntion purposes, please cite this publication.

```BibTeX
@inproceedings{serengil2020lightface,
Expand All @@ -349,7 +349,7 @@ If you use deepface for facial recogntion purposes, please cite the this publica
}
```

If you use deepface for facial attribute analysis purposes such as age, gender, emotion or ethnicity prediction or face detection purposes, please cite the this publication.
If you use deepface in your research for facial attribute analysis purposes such as age, gender, emotion or ethnicity prediction or face detection purposes, please cite this publication.

```BibTeX
@inproceedings{serengil2021lightface,
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
12 changes: 8 additions & 4 deletions deepface/DeepFace.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import tensorflow as tf

# package dependencies
from deepface.commons import functions
from deepface.commons import package_utils, folder_utils
from deepface.commons.logger import Logger
from deepface.modules import (
modeling,
Expand All @@ -24,17 +24,21 @@

logger = Logger(module="DeepFace")

# current package version of deepface
__version__ = package_utils.find_package_version()

# -----------------------------------
# configurations for dependencies

warnings.filterwarnings("ignore")
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3"
tf_version = functions.get_tf_major_version()
tf_version = package_utils.get_tf_major_version()
if tf_version == 2:
tf.get_logger().setLevel(logging.ERROR)
# -----------------------------------

functions.initialize_folder()
# create required folders if necessary to store model weights
folder_utils.initialize_folder()


def build_model(model_name: str) -> Any:
Expand Down Expand Up @@ -511,7 +515,7 @@ def detectFace(
align (bool): Flag to enable face alignment (default is True).

Returns:
img (np.ndarray): detected (and aligned) facial area image as numpy array
img (np.ndarray): detected (and aligned) facial area image as numpy array
"""
logger.warn("Function detectFace is deprecated. Use extract_faces instead.")
face_objs = extract_faces(
Expand Down
6 changes: 3 additions & 3 deletions deepface/basemodels/ArcFace.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import os
import gdown
import numpy as np
from deepface.commons import functions
from deepface.commons import package_utils, folder_utils
from deepface.commons.logger import Logger
from deepface.models.FacialRecognition import FacialRecognition

Expand All @@ -13,7 +13,7 @@
# --------------------------------
# dependency configuration

tf_version = functions.get_tf_major_version()
tf_version = package_utils.get_tf_major_version()

if tf_version == 1:
from keras.models import Model
Expand Down Expand Up @@ -94,7 +94,7 @@ def load_model(
# ---------------------------------------
# check the availability of pre-trained weights

home = functions.get_deepface_home()
home = folder_utils.get_deepface_home()

file_name = "arcface_weights.h5"
output = home + "/.deepface/weights/" + file_name
Expand Down
6 changes: 3 additions & 3 deletions deepface/basemodels/DeepID.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
import os
import gdown
import numpy as np
from deepface.commons import functions
from deepface.commons import package_utils, folder_utils
from deepface.commons.logger import Logger
from deepface.models.FacialRecognition import FacialRecognition

logger = Logger(module="basemodels.DeepID")

tf_version = functions.get_tf_major_version()
tf_version = package_utils.get_tf_major_version()

if tf_version == 1:
from keras.models import Model
Expand Down Expand Up @@ -100,7 +100,7 @@ def load_model(

# ---------------------------------

home = functions.get_deepface_home()
home = folder_utils.get_deepface_home()

if os.path.isfile(home + "/.deepface/weights/deepid_keras_weights.h5") != True:
logger.info("deepid_keras_weights.h5 will be downloaded...")
Expand Down
4 changes: 2 additions & 2 deletions deepface/basemodels/Dlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import bz2
import gdown
import numpy as np
from deepface.commons import functions
from deepface.commons import folder_utils
from deepface.commons.logger import Logger
from deepface.models.FacialRecognition import FacialRecognition

Expand Down Expand Up @@ -68,7 +68,7 @@ def __init__(self):

# ---------------------

home = functions.get_deepface_home()
home = folder_utils.get_deepface_home()
weight_file = home + "/.deepface/weights/dlib_face_recognition_resnet_model_v1.dat"

# ---------------------
Expand Down
8 changes: 4 additions & 4 deletions deepface/basemodels/Facenet.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import os
import gdown
import numpy as np
from deepface.commons import functions
from deepface.commons import package_utils, folder_utils
from deepface.commons.logger import Logger
from deepface.models.FacialRecognition import FacialRecognition

Expand All @@ -11,7 +11,7 @@
# --------------------------------
# dependency configuration

tf_version = functions.get_tf_major_version()
tf_version = package_utils.get_tf_major_version()

if tf_version == 1:
from keras.models import Model
Expand Down Expand Up @@ -1689,7 +1689,7 @@ def load_facenet128d_model(

# -----------------------------------

home = functions.get_deepface_home()
home = folder_utils.get_deepface_home()

if os.path.isfile(home + "/.deepface/weights/facenet_weights.h5") != True:
logger.info("facenet_weights.h5 will be downloaded...")
Expand Down Expand Up @@ -1719,7 +1719,7 @@ def load_facenet512d_model(

# -------------------------

home = functions.get_deepface_home()
home = folder_utils.get_deepface_home()

if os.path.isfile(home + "/.deepface/weights/facenet512_weights.h5") != True:
logger.info("facenet512_weights.h5 will be downloaded...")
Expand Down
6 changes: 3 additions & 3 deletions deepface/basemodels/FbDeepFace.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import zipfile
import gdown
import numpy as np
from deepface.commons import functions
from deepface.commons import package_utils, folder_utils
from deepface.commons.logger import Logger
from deepface.models.FacialRecognition import FacialRecognition

Expand All @@ -12,7 +12,7 @@
# --------------------------------
# dependency configuration

tf_version = functions.get_tf_major_version()
tf_version = package_utils.get_tf_major_version()

if tf_version == 1:
from keras.models import Model, Sequential
Expand Down Expand Up @@ -84,7 +84,7 @@ def load_model(

# ---------------------------------

home = functions.get_deepface_home()
home = folder_utils.get_deepface_home()

if os.path.isfile(home + "/.deepface/weights/VGGFace2_DeepFace_weights_val-0.9034.h5") != True:
logger.info("VGGFace2_DeepFace_weights_val-0.9034.h5 will be downloaded...")
Expand Down
6 changes: 3 additions & 3 deletions deepface/basemodels/OpenFace.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
import gdown
import tensorflow as tf
import numpy as np
from deepface.commons import functions
from deepface.commons import package_utils, folder_utils
from deepface.commons.logger import Logger
from deepface.models.FacialRecognition import FacialRecognition

logger = Logger(module="basemodels.OpenFace")

tf_version = functions.get_tf_major_version()
tf_version = package_utils.get_tf_major_version()
if tf_version == 1:
from keras.models import Model
from keras.layers import Conv2D, ZeroPadding2D, Input, concatenate
Expand Down Expand Up @@ -394,7 +394,7 @@ def load_model(

# -----------------------------------

home = functions.get_deepface_home()
home = folder_utils.get_deepface_home()

if os.path.isfile(home + "/.deepface/weights/openface_weights.h5") != True:
logger.info("openface_weights.h5 will be downloaded...")
Expand Down
4 changes: 2 additions & 2 deletions deepface/basemodels/SFace.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import cv2 as cv
import gdown

from deepface.commons import functions
from deepface.commons import folder_utils
from deepface.commons.logger import Logger
from deepface.models.FacialRecognition import FacialRecognition

Expand Down Expand Up @@ -50,7 +50,7 @@ def load_model(
Construct SFace model, download its weights and load
"""

home = functions.get_deepface_home()
home = folder_utils.get_deepface_home()

file_name = home + "/.deepface/weights/face_recognition_sface_2021dec.onnx"

Expand Down
9 changes: 5 additions & 4 deletions deepface/basemodels/VGGFace.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@
import os
import gdown
import numpy as np
from deepface.commons import functions, distance
from deepface.commons import package_utils, folder_utils
from deepface.modules import verification
from deepface.models.FacialRecognition import FacialRecognition
from deepface.commons.logger import Logger

logger = Logger(module="basemodels.VGGFace")

# ---------------------------------------

tf_version = functions.get_tf_major_version()
tf_version = package_utils.get_tf_major_version()
if tf_version == 1:
from keras.models import Model, Sequential
from keras.layers import (
Expand Down Expand Up @@ -59,7 +60,7 @@ def find_embeddings(self, img: np.ndarray) -> List[float]:
# having normalization layer in descriptor troubles for some gpu users (e.g. issue 957, 966)
# instead we are now calculating it with traditional way not with keras backend
embedding = self.model(img, training=False).numpy()[0].tolist()
embedding = distance.l2_normalize(embedding)
embedding = verification.l2_normalize(embedding)
return embedding.tolist()


Expand Down Expand Up @@ -128,7 +129,7 @@ def load_model(

model = base_model()

home = functions.get_deepface_home()
home = folder_utils.get_deepface_home()
output = home + "/.deepface/weights/vgg_face_weights.h5"

if os.path.isfile(output) != True:
Expand Down
4 changes: 4 additions & 0 deletions deepface/commons/constant.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import os

SRC_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
ROOT_DIR = os.path.dirname(SRC_DIR)
Loading
Loading