Spaces:
Sleeping
Sleeping
paresh95
commited on
Commit
·
c3143ea
1
Parent(s):
0f7be63
PS | Enhanced theme and basic front end changes
Browse files- app.py +16 -10
- notebooks/facial_age_gender.ipynb +0 -5
- src/face_demographics.py +2 -2
- src/face_proportions.py +2 -0
- src/face_symmetry.py +1 -0
- src/face_texture.py +1 -1
app.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
import gradio as gr
|
|
|
2 |
from src.face_texture import GetFaceTexture
|
3 |
from src.face_symmetry import GetFaceSymmetry
|
4 |
from src.face_demographics import GetFaceDemographics
|
@@ -12,21 +13,26 @@ def combined_fn(input_image):
|
|
12 |
proportion_results = GetFaceProportions().main(input_image)
|
13 |
return (*texture_results, *symmetry_results, demographics_results, *proportion_results)
|
14 |
|
|
|
15 |
|
16 |
iface = gr.Interface(
|
17 |
fn=combined_fn,
|
18 |
-
inputs=gr.
|
19 |
outputs=[
|
20 |
-
gr.
|
21 |
-
gr.
|
22 |
-
"
|
23 |
-
gr.
|
24 |
-
"
|
25 |
-
"
|
26 |
-
"
|
27 |
-
"
|
28 |
-
gr.
|
29 |
],
|
|
|
|
|
|
|
|
|
30 |
)
|
31 |
|
32 |
iface.launch()
|
|
|
1 |
import gradio as gr
|
2 |
+
import os
|
3 |
from src.face_texture import GetFaceTexture
|
4 |
from src.face_symmetry import GetFaceSymmetry
|
5 |
from src.face_demographics import GetFaceDemographics
|
|
|
13 |
proportion_results = GetFaceProportions().main(input_image)
|
14 |
return (*texture_results, *symmetry_results, demographics_results, *proportion_results)
|
15 |
|
16 |
+
gigi_hadid = os.path.join(os.path.dirname(__file__), "data/gigi_hadid.webp")
|
17 |
|
18 |
iface = gr.Interface(
|
19 |
fn=combined_fn,
|
20 |
+
inputs=gr.Image(type="pil", label="Upload Face Image", value=gigi_hadid),
|
21 |
outputs=[
|
22 |
+
gr.Image(type="pil", label="Extracted face"),
|
23 |
+
gr.Image(type="pil", label="Extracted face texture"),
|
24 |
+
"json",
|
25 |
+
gr.Image(type="pil", label="Face symmetry"),
|
26 |
+
"json",
|
27 |
+
"json",
|
28 |
+
"json",
|
29 |
+
"json",
|
30 |
+
gr.Image(type="pil", label="Face landmarks"),
|
31 |
],
|
32 |
+
title="Advanced Facial Feature Detector",
|
33 |
+
description="A comprehensive tool for detailed face analysis. Please upload a clear face image for best results.",
|
34 |
+
theme=gr.themes.Soft(),
|
35 |
+
live=False,
|
36 |
)
|
37 |
|
38 |
iface.launch()
|
notebooks/facial_age_gender.ipynb
CHANGED
@@ -515,11 +515,6 @@
|
|
515 |
"# Other\n",
|
516 |
"- Dataset used to train model: https://talhassner.github.io/home/projects/Adience/Adience-data.html#agegender"
|
517 |
]
|
518 |
-
},
|
519 |
-
{
|
520 |
-
"cell_type": "markdown",
|
521 |
-
"metadata": {},
|
522 |
-
"source": []
|
523 |
}
|
524 |
],
|
525 |
"metadata": {
|
|
|
515 |
"# Other\n",
|
516 |
"- Dataset used to train model: https://talhassner.github.io/home/projects/Adience/Adience-data.html#agegender"
|
517 |
]
|
|
|
|
|
|
|
|
|
|
|
518 |
}
|
519 |
],
|
520 |
"metadata": {
|
src/face_demographics.py
CHANGED
@@ -68,7 +68,7 @@ class GetFaceDemographics:
|
|
68 |
output = model(**inputs)
|
69 |
proba = output.logits.softmax(1)
|
70 |
preds = proba.argmax(1)
|
71 |
-
age_confidence_score = max(proba[0]).item()
|
72 |
age = id2label[int(preds)]
|
73 |
return age, age_confidence_score
|
74 |
|
@@ -86,7 +86,7 @@ class GetFaceDemographics:
|
|
86 |
output = model(**inputs)
|
87 |
proba = output.logits.softmax(1)
|
88 |
preds = proba.argmax(1)
|
89 |
-
gender_confidence_score = max(proba[0]).item()
|
90 |
gender = id2label[int(preds)]
|
91 |
return gender, gender_confidence_score
|
92 |
|
|
|
68 |
output = model(**inputs)
|
69 |
proba = output.logits.softmax(1)
|
70 |
preds = proba.argmax(1)
|
71 |
+
age_confidence_score = round(max(proba[0]).item(), 2)
|
72 |
age = id2label[int(preds)]
|
73 |
return age, age_confidence_score
|
74 |
|
|
|
86 |
output = model(**inputs)
|
87 |
proba = output.logits.softmax(1)
|
88 |
preds = proba.argmax(1)
|
89 |
+
gender_confidence_score = round(max(proba[0]).item(), 2)
|
90 |
gender = id2label[int(preds)]
|
91 |
return gender, gender_confidence_score
|
92 |
|
src/face_proportions.py
CHANGED
@@ -107,7 +107,9 @@ class GetFaceProportions:
|
|
107 |
gray_image = self.preprocess_image(image)
|
108 |
shape, image = self.detect_face_landmarks(gray_image)
|
109 |
golden_ratios = self.compute_golden_ratios(shape)
|
|
|
110 |
equal_ratios = self.compute_equal_ratios(shape)
|
|
|
111 |
image = PILImage.fromarray(image)
|
112 |
return golden_ratios, equal_ratios, image
|
113 |
|
|
|
107 |
gray_image = self.preprocess_image(image)
|
108 |
shape, image = self.detect_face_landmarks(gray_image)
|
109 |
golden_ratios = self.compute_golden_ratios(shape)
|
110 |
+
golden_ratios = {k: round(v, 2) for k, v in golden_ratios.items()}
|
111 |
equal_ratios = self.compute_equal_ratios(shape)
|
112 |
+
equal_ratios = {k: round(v, 2) for k, v in equal_ratios.items()}
|
113 |
image = PILImage.fromarray(image)
|
114 |
return golden_ratios, equal_ratios, image
|
115 |
|
src/face_symmetry.py
CHANGED
@@ -133,6 +133,7 @@ class GetFaceSymmetry:
|
|
133 |
|
134 |
full_face = np.hstack((best_left_half, best_right_half))
|
135 |
full_face = PILImage.fromarray(full_face)
|
|
|
136 |
return full_face, best_face_data
|
137 |
|
138 |
|
|
|
133 |
|
134 |
full_face = np.hstack((best_left_half, best_right_half))
|
135 |
full_face = PILImage.fromarray(full_face)
|
136 |
+
best_face_data = {k: float(round(v, 2)) for k, v in best_face_data.items()}
|
137 |
return full_face, best_face_data
|
138 |
|
139 |
|
src/face_texture.py
CHANGED
@@ -57,7 +57,7 @@ class GetFaceTexture:
|
|
57 |
face_image = self.get_face(gray_image)
|
58 |
lbp, std = self.get_face_texture(face_image)
|
59 |
face_texture_image = self.postprocess_image(lbp)
|
60 |
-
return face_texture_image,
|
61 |
|
62 |
|
63 |
if __name__ == "__main__":
|
|
|
57 |
face_image = self.get_face(gray_image)
|
58 |
lbp, std = self.get_face_texture(face_image)
|
59 |
face_texture_image = self.postprocess_image(lbp)
|
60 |
+
return face_image, face_texture_image, {"Texture std": round(std, 2)}
|
61 |
|
62 |
|
63 |
if __name__ == "__main__":
|