Spaces:
Runtime error
Runtime error
Update ML Models and files
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +2 -0
- ML/.DS_Store +0 -0
- ML/Skin_metrics/Acne/model.py +41 -0
- ML/Skin_metrics/Acne/saved_model/my_model/keras_metadata.pb +3 -0
- ML/Skin_metrics/Acne/saved_model/my_model/saved_model.pb +3 -0
- ML/Skin_metrics/Acne/saved_model/my_model/variables/variables.data-00000-of-00001 +3 -0
- ML/Skin_metrics/Acne/saved_model/my_model/variables/variables.index +0 -0
- ML/Skin_metrics/Acne/test_image.jpeg +0 -0
- ML/Skin_metrics/Acne/train.ipynb +0 -0
- ML/Skin_metrics/Skin_tone/main.py +24 -0
- ML/Skin_metrics/Skin_tone/public/pre-processing/skin_tone_dataset_RGB.csv +37 -0
- ML/Skin_metrics/Skin_tone/public/pre-processing/skin_tone_knn.ipynb +109 -0
- ML/Skin_metrics/Skin_tone/public/pre-processing/skintone-values.ipynb +133 -0
- ML/Skin_metrics/Skin_tone/public/pre-processing/skintone.ipynb +528 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/1/1.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/1/2.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/1/3.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/1/4.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/1/5.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/1/6.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/2/10.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/2/11.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/2/12.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/2/13.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/2/7.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/2/8.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/2/9.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/3/14.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/3/15.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/3/16.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/3/17.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/3/18.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/3/19.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/3/20.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/4/21.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/4/22.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/4/23.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/4/24.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/4/25.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/4/26.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/4/27.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/5/28.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/5/29.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/5/30.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/5/31.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/5/32.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/5/33.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/5/34.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/6/35.jpeg +0 -0
- ML/Skin_metrics/Skin_tone/public/skin tone values/6/36.jpeg +0 -0
.gitattributes
CHANGED
@@ -35,3 +35,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
backend/models/acne_model/variables/variables.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
|
37 |
backend/models/skin_model/variables/variables.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
backend/models/acne_model/variables/variables.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
|
37 |
backend/models/skin_model/variables/variables.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
|
38 |
+
ML/Skin_metrics/Acne/saved_model/my_model/variables/variables.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
|
39 |
+
ML/Skin_metrics/Skin_tone/public/test[[:space:]]images/natural-hair-selfie-countess-vaughn.png filter=lfs diff=lfs merge=lfs -text
|
ML/.DS_Store
ADDED
Binary file (6.15 kB). View file
|
|
ML/Skin_metrics/Acne/model.py
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import tensorflow as tf
|
2 |
+
|
3 |
+
print('Loading model ...')
|
4 |
+
model = tf.keras.models.load_model('saved_model')
|
5 |
+
|
6 |
+
class_names = ['Low','Moderate','Severe']
|
7 |
+
|
8 |
+
def load_and_prep_image(filename, img_shape=224):
|
9 |
+
img = tf.io.read_file(filename)
|
10 |
+
# Decode it into a tensor
|
11 |
+
img = tf.image.decode_jpeg(img)
|
12 |
+
# Resize the image
|
13 |
+
img = tf.image.resize(img, [img_shape, img_shape])
|
14 |
+
# Rescale the image (get all values between 0 and 1)
|
15 |
+
img = img/255.
|
16 |
+
return img
|
17 |
+
|
18 |
+
def predict_class(filename):
|
19 |
+
"""
|
20 |
+
Imports an image located at filename, makes a prediction with model
|
21 |
+
and plots the image with the predicted class as the title.
|
22 |
+
"""
|
23 |
+
print('Loading image ...')
|
24 |
+
# Import the target image and preprocess it
|
25 |
+
img = load_and_prep_image(filename)
|
26 |
+
|
27 |
+
print('Predicting class of image ...')
|
28 |
+
|
29 |
+
# Make a prediction
|
30 |
+
pred = model.predict(tf.expand_dims(img, axis=0))
|
31 |
+
print(pred)
|
32 |
+
|
33 |
+
# Add in logic for multi-class & get pred_class name
|
34 |
+
if len(pred[0]) > 1:
|
35 |
+
pred_class = class_names[tf.argmax(pred[0])]
|
36 |
+
else:
|
37 |
+
pred_class = class_names[int(tf.round(pred[0]))]
|
38 |
+
print('Predicted class:', pred_class)
|
39 |
+
return pred_class
|
40 |
+
|
41 |
+
predict_class('test_image.jpeg')
|
ML/Skin_metrics/Acne/saved_model/my_model/keras_metadata.pb
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:2f2f10db77a7ba6a35045b3c1c22fd310fd77a85ab6fef8fccb8139cd4141d7f
|
3 |
+
size 5895
|
ML/Skin_metrics/Acne/saved_model/my_model/saved_model.pb
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:13ce3e8bd5f3877ae96ec4fd50cdf66d22a9f1f11cc2e4c665bb71b77e1fb294
|
3 |
+
size 7650183
|
ML/Skin_metrics/Acne/saved_model/my_model/variables/variables.data-00000-of-00001
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:af7033c86897199361e000309889cc401c663d08ebb26f76757736dd592bf315
|
3 |
+
size 16532950
|
ML/Skin_metrics/Acne/saved_model/my_model/variables/variables.index
ADDED
Binary file (23.4 kB). View file
|
|
ML/Skin_metrics/Acne/test_image.jpeg
ADDED
![]() |
ML/Skin_metrics/Acne/train.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
ML/Skin_metrics/Skin_tone/main.py
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from skin_detection import skin_detection
|
2 |
+
from skin_tone import skin_tone
|
3 |
+
from skin_tone_knn import skin_tone_knn
|
4 |
+
import numpy as np
|
5 |
+
|
6 |
+
image_dir = "public\\test images\\brendon_urie_3.jpeg"
|
7 |
+
mean_color_values = skin_detection(image_dir)
|
8 |
+
|
9 |
+
# B = img_final.reshape([-1, 3])[:, 0]
|
10 |
+
# G = img_final.reshape([-1, 3])[:, 1]
|
11 |
+
# R = img_final.reshape([-1, 3])[:, 2]
|
12 |
+
# mean_color_values = []
|
13 |
+
# mean_color_values.append(np.bincount(R[R[:] != 0]).argmax())
|
14 |
+
# mean_color_values.append(np.bincount(G[G[:] != 0]).argmax())
|
15 |
+
# mean_color_values.append(np.bincount(B[B[:] != 0]).argmax())
|
16 |
+
|
17 |
+
# print(R[R[:] != 0])
|
18 |
+
# print(mean_color_values)
|
19 |
+
|
20 |
+
skin_tone = skin_tone(mean_color_values)
|
21 |
+
skin_tone_knn = skin_tone_knn(mean_color_values)
|
22 |
+
|
23 |
+
print(skin_tone)
|
24 |
+
print(skin_tone_knn)
|
ML/Skin_metrics/Skin_tone/public/pre-processing/skin_tone_dataset_RGB.csv
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Type,R,G,B
|
2 |
+
1,245,243,246
|
3 |
+
1,237,236,234
|
4 |
+
1,250,249,247
|
5 |
+
1,255,250,231
|
6 |
+
1,254,246,230
|
7 |
+
1,254,247,229
|
8 |
+
2,251,252,244
|
9 |
+
2,252,248,237
|
10 |
+
2,254,246,227
|
11 |
+
2,255,249,225
|
12 |
+
2,251,240,239
|
13 |
+
2,244,236,232
|
14 |
+
2,244,241,236
|
15 |
+
3,255,250,225
|
16 |
+
3,242,233,197
|
17 |
+
3,240,229,177
|
18 |
+
3,226,214,151
|
19 |
+
3,243,230,152
|
20 |
+
3,236,217,160
|
21 |
+
3,236,218,134
|
22 |
+
4,226,198,101
|
23 |
+
4,225,195,105
|
24 |
+
4,224,194,122
|
25 |
+
4,222,187,119
|
26 |
+
4,200,166,102
|
27 |
+
4,190,158,114
|
28 |
+
4,156,107,64
|
29 |
+
5,144,90,63
|
30 |
+
5,124,79,50
|
31 |
+
5,106,56,40
|
32 |
+
5,102,47,27
|
33 |
+
5,99,49,37
|
34 |
+
5,89,53,45
|
35 |
+
5,69,36,28
|
36 |
+
6,43,32,36
|
37 |
+
6,23,25,44
|
ML/Skin_metrics/Skin_tone/public/pre-processing/skin_tone_knn.ipynb
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 2,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"\"\"\"\n",
|
10 |
+
"To classify the input skin into one of the 6 skin tones\n",
|
11 |
+
"\"\"\"\n",
|
12 |
+
"import cv2\n",
|
13 |
+
"import numpy as np\n",
|
14 |
+
"import pandas as pd\n",
|
15 |
+
"import sklearn\n",
|
16 |
+
"from skin_detection import skin_detection\n"
|
17 |
+
]
|
18 |
+
},
|
19 |
+
{
|
20 |
+
"cell_type": "code",
|
21 |
+
"execution_count": 3,
|
22 |
+
"metadata": {},
|
23 |
+
"outputs": [],
|
24 |
+
"source": [
|
25 |
+
"df = pd.read_csv(\"public\\skin_tone_dataset.csv\")\n",
|
26 |
+
"X = df.iloc[:, [1, 2, 3]].values\n",
|
27 |
+
"y = df.iloc[:, 0].values"
|
28 |
+
]
|
29 |
+
},
|
30 |
+
{
|
31 |
+
"cell_type": "code",
|
32 |
+
"execution_count": 9,
|
33 |
+
"metadata": {},
|
34 |
+
"outputs": [
|
35 |
+
{
|
36 |
+
"data": {
|
37 |
+
"text/plain": [
|
38 |
+
"KNeighborsClassifier(n_neighbors=6)"
|
39 |
+
]
|
40 |
+
},
|
41 |
+
"execution_count": 9,
|
42 |
+
"metadata": {},
|
43 |
+
"output_type": "execute_result"
|
44 |
+
}
|
45 |
+
],
|
46 |
+
"source": [
|
47 |
+
"from sklearn.neighbors import KNeighborsClassifier\n",
|
48 |
+
"classifier = KNeighborsClassifier(n_neighbors=6, metric='minkowski', p=2)\n",
|
49 |
+
"classifier.fit(X, y)"
|
50 |
+
]
|
51 |
+
},
|
52 |
+
{
|
53 |
+
"cell_type": "code",
|
54 |
+
"execution_count": 12,
|
55 |
+
"metadata": {},
|
56 |
+
"outputs": [
|
57 |
+
{
|
58 |
+
"data": {
|
59 |
+
"image/png": "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",
|
60 |
+
"text/plain": [
|
61 |
+
"<Figure size 432x288 with 1 Axes>"
|
62 |
+
]
|
63 |
+
},
|
64 |
+
"metadata": {
|
65 |
+
"needs_background": "light"
|
66 |
+
},
|
67 |
+
"output_type": "display_data"
|
68 |
+
},
|
69 |
+
{
|
70 |
+
"name": "stdout",
|
71 |
+
"output_type": "stream",
|
72 |
+
"text": [
|
73 |
+
"[5]\n"
|
74 |
+
]
|
75 |
+
}
|
76 |
+
],
|
77 |
+
"source": [
|
78 |
+
"X_test = [skin_detection(\n",
|
79 |
+
" \"public\\\\test images\\Optimized-selfieNig-cropped.jpg\")]\n",
|
80 |
+
"y_pred = classifier.predict(X_test)\n",
|
81 |
+
"print(y_pred)"
|
82 |
+
]
|
83 |
+
}
|
84 |
+
],
|
85 |
+
"metadata": {
|
86 |
+
"interpreter": {
|
87 |
+
"hash": "ba2f22f42967f045b6a8cdadb7a1806ca4d147626f8330f177f9e32090d93637"
|
88 |
+
},
|
89 |
+
"kernelspec": {
|
90 |
+
"display_name": "Python 3 (ipykernel)",
|
91 |
+
"language": "python",
|
92 |
+
"name": "python3"
|
93 |
+
},
|
94 |
+
"language_info": {
|
95 |
+
"codemirror_mode": {
|
96 |
+
"name": "ipython",
|
97 |
+
"version": 3
|
98 |
+
},
|
99 |
+
"file_extension": ".py",
|
100 |
+
"mimetype": "text/x-python",
|
101 |
+
"name": "python",
|
102 |
+
"nbconvert_exporter": "python",
|
103 |
+
"pygments_lexer": "ipython3",
|
104 |
+
"version": "3.9.13"
|
105 |
+
}
|
106 |
+
},
|
107 |
+
"nbformat": 4,
|
108 |
+
"nbformat_minor": 2
|
109 |
+
}
|
ML/Skin_metrics/Skin_tone/public/pre-processing/skintone-values.ipynb
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"\"\"\"\n",
|
10 |
+
"To generate skin color tone csv for skin tone classification\n",
|
11 |
+
"\"\"\"\n",
|
12 |
+
"import cv2\n",
|
13 |
+
"import numpy as np\n",
|
14 |
+
"import pandas as pd\n",
|
15 |
+
"import os\n"
|
16 |
+
]
|
17 |
+
},
|
18 |
+
{
|
19 |
+
"cell_type": "code",
|
20 |
+
"execution_count": 3,
|
21 |
+
"metadata": {},
|
22 |
+
"outputs": [],
|
23 |
+
"source": [
|
24 |
+
"folder = \"D:\\Mynthra-hack\\skintone\\simple-skin-detection\\ML\\Skin metrics\\Skin tone\\public\\skin tone values\"\n",
|
25 |
+
"df = pd.DataFrame()\n",
|
26 |
+
"for subfolder in os.listdir(folder):\n",
|
27 |
+
" for filename in os.listdir(os.path.join(folder, subfolder)):\n",
|
28 |
+
" img = cv2.imread(os.path.join(folder, subfolder, filename))\n",
|
29 |
+
" if img is not None:\n",
|
30 |
+
"\n",
|
31 |
+
" # img_HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)\n",
|
32 |
+
" # img_YCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)\n",
|
33 |
+
" # Cr = img_YCrCb.reshape([-1, 3])[:, 1]\n",
|
34 |
+
" # Cb = img_YCrCb.reshape([-1, 3])[:, 2]\n",
|
35 |
+
" # H = img_HSV.reshape([-1, 3])[:, 0]\n",
|
36 |
+
" # df = df.append(pd.DataFrame({\n",
|
37 |
+
" # 'Type': subfolder,\n",
|
38 |
+
" # 'H': H[H[:] == max(H[:])][0],\n",
|
39 |
+
" # 'Cr' : Cr[Cr[:] == max(Cr[:])][0],\n",
|
40 |
+
" # 'Cb' : Cb[Cb[:] == max(Cb[:])][0]\n",
|
41 |
+
" # }, index=[0]), ignore_index = True)\n",
|
42 |
+
" B = img.reshape([-1, 3])[:, 0]\n",
|
43 |
+
" G = img.reshape([-1, 3])[:, 1]\n",
|
44 |
+
" R = img.reshape([-1, 3])[:, 2]\n",
|
45 |
+
" df = df.append(pd.DataFrame({\n",
|
46 |
+
" 'Type': subfolder,\n",
|
47 |
+
" 'R': R[R[:] == max(R[:])][0],\n",
|
48 |
+
" 'G' : G[G[:] == max(G[:])][0],\n",
|
49 |
+
" 'B' : B[B[:] == max(B[:])][0]\n",
|
50 |
+
" }, index=[0]), ignore_index = True)\n",
|
51 |
+
" \n",
|
52 |
+
"df.to_csv('skin_tone_dataset.csv', index=False)\n"
|
53 |
+
]
|
54 |
+
},
|
55 |
+
{
|
56 |
+
"cell_type": "code",
|
57 |
+
"execution_count": 19,
|
58 |
+
"metadata": {},
|
59 |
+
"outputs": [
|
60 |
+
{
|
61 |
+
"name": "stdout",
|
62 |
+
"output_type": "stream",
|
63 |
+
"text": [
|
64 |
+
"Type 18518.0\n",
|
65 |
+
"R 249.0\n",
|
66 |
+
"G 245.0\n",
|
67 |
+
"B 236.0\n",
|
68 |
+
"dtype: float64 Type 317460.0\n",
|
69 |
+
"R 250.0\n",
|
70 |
+
"G 245.0\n",
|
71 |
+
"B 234.0\n",
|
72 |
+
"dtype: float64 Type 476190.0\n",
|
73 |
+
"R 240.0\n",
|
74 |
+
"G 227.0\n",
|
75 |
+
"B 171.0\n",
|
76 |
+
"dtype: float64 Type 634921.0\n",
|
77 |
+
"R 206.0\n",
|
78 |
+
"G 172.0\n",
|
79 |
+
"B 104.0\n",
|
80 |
+
"dtype: float64 Type 793651.0\n",
|
81 |
+
"R 105.0\n",
|
82 |
+
"G 59.0\n",
|
83 |
+
"B 41.0\n",
|
84 |
+
"dtype: float64 Type 33.0\n",
|
85 |
+
"R 33.0\n",
|
86 |
+
"G 28.0\n",
|
87 |
+
"B 40.0\n",
|
88 |
+
"dtype: float64\n"
|
89 |
+
]
|
90 |
+
}
|
91 |
+
],
|
92 |
+
"source": [
|
93 |
+
"tone1 = df.loc[df['Type'] == '1'].mean(axis=0)\n",
|
94 |
+
"tone2 = df.loc[df['Type'] == '2'].mean(axis=0)\n",
|
95 |
+
"tone3 = df.loc[df['Type'] == '3'].mean(axis=0)\n",
|
96 |
+
"tone4 = df.loc[df['Type'] == '4'].mean(axis=0)\n",
|
97 |
+
"tone5 = df.loc[df['Type'] == '5'].mean(axis=0)\n",
|
98 |
+
"tone6 = df.loc[df['Type'] == '6'].mean(axis=0)\n",
|
99 |
+
"\n",
|
100 |
+
"print(round(tone1),\n",
|
101 |
+
" round(tone2),\n",
|
102 |
+
" round(tone3),\n",
|
103 |
+
" round(tone4),\n",
|
104 |
+
" round(tone5),\n",
|
105 |
+
" round(tone6))\n"
|
106 |
+
]
|
107 |
+
}
|
108 |
+
],
|
109 |
+
"metadata": {
|
110 |
+
"interpreter": {
|
111 |
+
"hash": "ba2f22f42967f045b6a8cdadb7a1806ca4d147626f8330f177f9e32090d93637"
|
112 |
+
},
|
113 |
+
"kernelspec": {
|
114 |
+
"display_name": "Python 3 (ipykernel)",
|
115 |
+
"language": "python",
|
116 |
+
"name": "python3"
|
117 |
+
},
|
118 |
+
"language_info": {
|
119 |
+
"codemirror_mode": {
|
120 |
+
"name": "ipython",
|
121 |
+
"version": 3
|
122 |
+
},
|
123 |
+
"file_extension": ".py",
|
124 |
+
"mimetype": "text/x-python",
|
125 |
+
"name": "python",
|
126 |
+
"nbconvert_exporter": "python",
|
127 |
+
"pygments_lexer": "ipython3",
|
128 |
+
"version": "3.9.13"
|
129 |
+
}
|
130 |
+
},
|
131 |
+
"nbformat": 4,
|
132 |
+
"nbformat_minor": 2
|
133 |
+
}
|
ML/Skin_metrics/Skin_tone/public/pre-processing/skintone.ipynb
ADDED
@@ -0,0 +1,528 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 7,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"\"\"\"\n",
|
10 |
+
"To classify the input skin into one of the 6 skin tones\n",
|
11 |
+
"\"\"\"\n",
|
12 |
+
"import cv2\n",
|
13 |
+
"import numpy as np\n",
|
14 |
+
"import pandas as pd\n",
|
15 |
+
"import sklearn\n",
|
16 |
+
"from skin_detection import skin_detection\n"
|
17 |
+
]
|
18 |
+
},
|
19 |
+
{
|
20 |
+
"cell_type": "code",
|
21 |
+
"execution_count": 8,
|
22 |
+
"metadata": {},
|
23 |
+
"outputs": [],
|
24 |
+
"source": [
|
25 |
+
"df = pd.read_csv(\"public\\skin_tone_dataset.csv\")\n"
|
26 |
+
]
|
27 |
+
},
|
28 |
+
{
|
29 |
+
"cell_type": "code",
|
30 |
+
"execution_count": 24,
|
31 |
+
"metadata": {},
|
32 |
+
"outputs": [
|
33 |
+
{
|
34 |
+
"data": {
|
35 |
+
"image/png": "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",
|
36 |
+
"text/plain": [
|
37 |
+
"<Figure size 432x288 with 1 Axes>"
|
38 |
+
]
|
39 |
+
},
|
40 |
+
"metadata": {
|
41 |
+
"needs_background": "light"
|
42 |
+
},
|
43 |
+
"output_type": "display_data"
|
44 |
+
}
|
45 |
+
],
|
46 |
+
"source": [
|
47 |
+
"y = skin_detection(\n",
|
48 |
+
" \"public\\\\test images\\Optimized-DynamicRange_SamsungGalaxyS10Plus.jpg\")\n"
|
49 |
+
]
|
50 |
+
},
|
51 |
+
{
|
52 |
+
"cell_type": "code",
|
53 |
+
"execution_count": 34,
|
54 |
+
"metadata": {},
|
55 |
+
"outputs": [
|
56 |
+
{
|
57 |
+
"data": {
|
58 |
+
"text/plain": [
|
59 |
+
"36"
|
60 |
+
]
|
61 |
+
},
|
62 |
+
"execution_count": 34,
|
63 |
+
"metadata": {},
|
64 |
+
"output_type": "execute_result"
|
65 |
+
}
|
66 |
+
],
|
67 |
+
"source": [
|
68 |
+
"values_vector = df.iloc[:, [1, 2, 3]].values\n",
|
69 |
+
"input_mat = np.repeat(y[np.newaxis, :], len(df.index), axis=0)\n",
|
70 |
+
"len(input_mat)"
|
71 |
+
]
|
72 |
+
},
|
73 |
+
{
|
74 |
+
"cell_type": "code",
|
75 |
+
"execution_count": 48,
|
76 |
+
"metadata": {},
|
77 |
+
"outputs": [
|
78 |
+
{
|
79 |
+
"data": {
|
80 |
+
"text/plain": [
|
81 |
+
"28"
|
82 |
+
]
|
83 |
+
},
|
84 |
+
"execution_count": 48,
|
85 |
+
"metadata": {},
|
86 |
+
"output_type": "execute_result"
|
87 |
+
}
|
88 |
+
],
|
89 |
+
"source": [
|
90 |
+
"from sklearn.metrics.pairwise import cosine_similarity\n",
|
91 |
+
"sim_matrix = cosine_similarity(values_vector, input_mat)\n",
|
92 |
+
"np.where(sim_matrix[:, 0] == max(sim_matrix[:, 0]))[0][0]\n"
|
93 |
+
]
|
94 |
+
},
|
95 |
+
{
|
96 |
+
"cell_type": "code",
|
97 |
+
"execution_count": 11,
|
98 |
+
"metadata": {},
|
99 |
+
"outputs": [
|
100 |
+
{
|
101 |
+
"data": {
|
102 |
+
"text/html": [
|
103 |
+
"<div>\n",
|
104 |
+
"<style scoped>\n",
|
105 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
106 |
+
" vertical-align: middle;\n",
|
107 |
+
" }\n",
|
108 |
+
"\n",
|
109 |
+
" .dataframe tbody tr th {\n",
|
110 |
+
" vertical-align: top;\n",
|
111 |
+
" }\n",
|
112 |
+
"\n",
|
113 |
+
" .dataframe thead th {\n",
|
114 |
+
" text-align: right;\n",
|
115 |
+
" }\n",
|
116 |
+
"</style>\n",
|
117 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
118 |
+
" <thead>\n",
|
119 |
+
" <tr style=\"text-align: right;\">\n",
|
120 |
+
" <th></th>\n",
|
121 |
+
" <th>Type</th>\n",
|
122 |
+
" <th>H</th>\n",
|
123 |
+
" <th>Cr</th>\n",
|
124 |
+
" <th>Cb</th>\n",
|
125 |
+
" <th>cs</th>\n",
|
126 |
+
" </tr>\n",
|
127 |
+
" </thead>\n",
|
128 |
+
" <tbody>\n",
|
129 |
+
" <tr>\n",
|
130 |
+
" <th>34</th>\n",
|
131 |
+
" <td>6</td>\n",
|
132 |
+
" <td>169</td>\n",
|
133 |
+
" <td>133</td>\n",
|
134 |
+
" <td>128</td>\n",
|
135 |
+
" <td>0.761219</td>\n",
|
136 |
+
" </tr>\n",
|
137 |
+
" <tr>\n",
|
138 |
+
" <th>33</th>\n",
|
139 |
+
" <td>5</td>\n",
|
140 |
+
" <td>179</td>\n",
|
141 |
+
" <td>152</td>\n",
|
142 |
+
" <td>134</td>\n",
|
143 |
+
" <td>0.776014</td>\n",
|
144 |
+
" </tr>\n",
|
145 |
+
" <tr>\n",
|
146 |
+
" <th>29</th>\n",
|
147 |
+
" <td>5</td>\n",
|
148 |
+
" <td>178</td>\n",
|
149 |
+
" <td>161</td>\n",
|
150 |
+
" <td>132</td>\n",
|
151 |
+
" <td>0.787950</td>\n",
|
152 |
+
" </tr>\n",
|
153 |
+
" <tr>\n",
|
154 |
+
" <th>31</th>\n",
|
155 |
+
" <td>5</td>\n",
|
156 |
+
" <td>173</td>\n",
|
157 |
+
" <td>158</td>\n",
|
158 |
+
" <td>129</td>\n",
|
159 |
+
" <td>0.790450</td>\n",
|
160 |
+
" </tr>\n",
|
161 |
+
" <tr>\n",
|
162 |
+
" <th>0</th>\n",
|
163 |
+
" <td>1</td>\n",
|
164 |
+
" <td>140</td>\n",
|
165 |
+
" <td>129</td>\n",
|
166 |
+
" <td>129</td>\n",
|
167 |
+
" <td>0.811230</td>\n",
|
168 |
+
" </tr>\n",
|
169 |
+
" <tr>\n",
|
170 |
+
" <th>35</th>\n",
|
171 |
+
" <td>6</td>\n",
|
172 |
+
" <td>126</td>\n",
|
173 |
+
" <td>128</td>\n",
|
174 |
+
" <td>140</td>\n",
|
175 |
+
" <td>0.841394</td>\n",
|
176 |
+
" </tr>\n",
|
177 |
+
" <tr>\n",
|
178 |
+
" <th>6</th>\n",
|
179 |
+
" <td>2</td>\n",
|
180 |
+
" <td>34</td>\n",
|
181 |
+
" <td>128</td>\n",
|
182 |
+
" <td>124</td>\n",
|
183 |
+
" <td>0.980756</td>\n",
|
184 |
+
" </tr>\n",
|
185 |
+
" <tr>\n",
|
186 |
+
" <th>20</th>\n",
|
187 |
+
" <td>4</td>\n",
|
188 |
+
" <td>23</td>\n",
|
189 |
+
" <td>150</td>\n",
|
190 |
+
" <td>75</td>\n",
|
191 |
+
" <td>0.981684</td>\n",
|
192 |
+
" </tr>\n",
|
193 |
+
" <tr>\n",
|
194 |
+
" <th>21</th>\n",
|
195 |
+
" <td>4</td>\n",
|
196 |
+
" <td>23</td>\n",
|
197 |
+
" <td>150</td>\n",
|
198 |
+
" <td>78</td>\n",
|
199 |
+
" <td>0.984311</td>\n",
|
200 |
+
" </tr>\n",
|
201 |
+
" <tr>\n",
|
202 |
+
" <th>1</th>\n",
|
203 |
+
" <td>1</td>\n",
|
204 |
+
" <td>20</td>\n",
|
205 |
+
" <td>129</td>\n",
|
206 |
+
" <td>127</td>\n",
|
207 |
+
" <td>0.987634</td>\n",
|
208 |
+
" </tr>\n",
|
209 |
+
" <tr>\n",
|
210 |
+
" <th>2</th>\n",
|
211 |
+
" <td>1</td>\n",
|
212 |
+
" <td>20</td>\n",
|
213 |
+
" <td>129</td>\n",
|
214 |
+
" <td>127</td>\n",
|
215 |
+
" <td>0.987634</td>\n",
|
216 |
+
" </tr>\n",
|
217 |
+
" <tr>\n",
|
218 |
+
" <th>19</th>\n",
|
219 |
+
" <td>3</td>\n",
|
220 |
+
" <td>25</td>\n",
|
221 |
+
" <td>144</td>\n",
|
222 |
+
" <td>83</td>\n",
|
223 |
+
" <td>0.988623</td>\n",
|
224 |
+
" </tr>\n",
|
225 |
+
" <tr>\n",
|
226 |
+
" <th>12</th>\n",
|
227 |
+
" <td>2</td>\n",
|
228 |
+
" <td>21</td>\n",
|
229 |
+
" <td>130</td>\n",
|
230 |
+
" <td>125</td>\n",
|
231 |
+
" <td>0.988859</td>\n",
|
232 |
+
" </tr>\n",
|
233 |
+
" <tr>\n",
|
234 |
+
" <th>7</th>\n",
|
235 |
+
" <td>2</td>\n",
|
236 |
+
" <td>22</td>\n",
|
237 |
+
" <td>131</td>\n",
|
238 |
+
" <td>122</td>\n",
|
239 |
+
" <td>0.990362</td>\n",
|
240 |
+
" </tr>\n",
|
241 |
+
" <tr>\n",
|
242 |
+
" <th>17</th>\n",
|
243 |
+
" <td>3</td>\n",
|
244 |
+
" <td>27</td>\n",
|
245 |
+
" <td>142</td>\n",
|
246 |
+
" <td>88</td>\n",
|
247 |
+
" <td>0.990415</td>\n",
|
248 |
+
" </tr>\n",
|
249 |
+
" <tr>\n",
|
250 |
+
" <th>3</th>\n",
|
251 |
+
" <td>1</td>\n",
|
252 |
+
" <td>26</td>\n",
|
253 |
+
" <td>132</td>\n",
|
254 |
+
" <td>118</td>\n",
|
255 |
+
" <td>0.990447</td>\n",
|
256 |
+
" </tr>\n",
|
257 |
+
" <tr>\n",
|
258 |
+
" <th>22</th>\n",
|
259 |
+
" <td>4</td>\n",
|
260 |
+
" <td>21</td>\n",
|
261 |
+
" <td>149</td>\n",
|
262 |
+
" <td>87</td>\n",
|
263 |
+
" <td>0.991714</td>\n",
|
264 |
+
" </tr>\n",
|
265 |
+
" <tr>\n",
|
266 |
+
" <th>13</th>\n",
|
267 |
+
" <td>3</td>\n",
|
268 |
+
" <td>26</td>\n",
|
269 |
+
" <td>133</td>\n",
|
270 |
+
" <td>115</td>\n",
|
271 |
+
" <td>0.991778</td>\n",
|
272 |
+
" </tr>\n",
|
273 |
+
" <tr>\n",
|
274 |
+
" <th>23</th>\n",
|
275 |
+
" <td>4</td>\n",
|
276 |
+
" <td>20</td>\n",
|
277 |
+
" <td>151</td>\n",
|
278 |
+
" <td>88</td>\n",
|
279 |
+
" <td>0.992137</td>\n",
|
280 |
+
" </tr>\n",
|
281 |
+
" <tr>\n",
|
282 |
+
" <th>10</th>\n",
|
283 |
+
" <td>2</td>\n",
|
284 |
+
" <td>3</td>\n",
|
285 |
+
" <td>134</td>\n",
|
286 |
+
" <td>126</td>\n",
|
287 |
+
" <td>0.992233</td>\n",
|
288 |
+
" </tr>\n",
|
289 |
+
" <tr>\n",
|
290 |
+
" <th>11</th>\n",
|
291 |
+
" <td>2</td>\n",
|
292 |
+
" <td>14</td>\n",
|
293 |
+
" <td>133</td>\n",
|
294 |
+
" <td>125</td>\n",
|
295 |
+
" <td>0.992244</td>\n",
|
296 |
+
" </tr>\n",
|
297 |
+
" <tr>\n",
|
298 |
+
" <th>32</th>\n",
|
299 |
+
" <td>5</td>\n",
|
300 |
+
" <td>30</td>\n",
|
301 |
+
" <td>151</td>\n",
|
302 |
+
" <td>127</td>\n",
|
303 |
+
" <td>0.992341</td>\n",
|
304 |
+
" </tr>\n",
|
305 |
+
" <tr>\n",
|
306 |
+
" <th>5</th>\n",
|
307 |
+
" <td>1</td>\n",
|
308 |
+
" <td>22</td>\n",
|
309 |
+
" <td>133</td>\n",
|
310 |
+
" <td>118</td>\n",
|
311 |
+
" <td>0.992792</td>\n",
|
312 |
+
" </tr>\n",
|
313 |
+
" <tr>\n",
|
314 |
+
" <th>4</th>\n",
|
315 |
+
" <td>1</td>\n",
|
316 |
+
" <td>22</td>\n",
|
317 |
+
" <td>134</td>\n",
|
318 |
+
" <td>119</td>\n",
|
319 |
+
" <td>0.992822</td>\n",
|
320 |
+
" </tr>\n",
|
321 |
+
" <tr>\n",
|
322 |
+
" <th>9</th>\n",
|
323 |
+
" <td>2</td>\n",
|
324 |
+
" <td>24</td>\n",
|
325 |
+
" <td>133</td>\n",
|
326 |
+
" <td>115</td>\n",
|
327 |
+
" <td>0.992835</td>\n",
|
328 |
+
" </tr>\n",
|
329 |
+
" <tr>\n",
|
330 |
+
" <th>16</th>\n",
|
331 |
+
" <td>3</td>\n",
|
332 |
+
" <td>27</td>\n",
|
333 |
+
" <td>141</td>\n",
|
334 |
+
" <td>95</td>\n",
|
335 |
+
" <td>0.992960</td>\n",
|
336 |
+
" </tr>\n",
|
337 |
+
" <tr>\n",
|
338 |
+
" <th>24</th>\n",
|
339 |
+
" <td>4</td>\n",
|
340 |
+
" <td>20</td>\n",
|
341 |
+
" <td>151</td>\n",
|
342 |
+
" <td>91</td>\n",
|
343 |
+
" <td>0.993636</td>\n",
|
344 |
+
" </tr>\n",
|
345 |
+
" <tr>\n",
|
346 |
+
" <th>8</th>\n",
|
347 |
+
" <td>2</td>\n",
|
348 |
+
" <td>21</td>\n",
|
349 |
+
" <td>134</td>\n",
|
350 |
+
" <td>117</td>\n",
|
351 |
+
" <td>0.993901</td>\n",
|
352 |
+
" </tr>\n",
|
353 |
+
" <tr>\n",
|
354 |
+
" <th>15</th>\n",
|
355 |
+
" <td>3</td>\n",
|
356 |
+
" <td>27</td>\n",
|
357 |
+
" <td>139</td>\n",
|
358 |
+
" <td>101</td>\n",
|
359 |
+
" <td>0.993937</td>\n",
|
360 |
+
" </tr>\n",
|
361 |
+
" <tr>\n",
|
362 |
+
" <th>14</th>\n",
|
363 |
+
" <td>3</td>\n",
|
364 |
+
" <td>25</td>\n",
|
365 |
+
" <td>136</td>\n",
|
366 |
+
" <td>109</td>\n",
|
367 |
+
" <td>0.994450</td>\n",
|
368 |
+
" </tr>\n",
|
369 |
+
" <tr>\n",
|
370 |
+
" <th>18</th>\n",
|
371 |
+
" <td>3</td>\n",
|
372 |
+
" <td>24</td>\n",
|
373 |
+
" <td>143</td>\n",
|
374 |
+
" <td>98</td>\n",
|
375 |
+
" <td>0.995267</td>\n",
|
376 |
+
" </tr>\n",
|
377 |
+
" <tr>\n",
|
378 |
+
" <th>26</th>\n",
|
379 |
+
" <td>4</td>\n",
|
380 |
+
" <td>14</td>\n",
|
381 |
+
" <td>156</td>\n",
|
382 |
+
" <td>98</td>\n",
|
383 |
+
" <td>0.996933</td>\n",
|
384 |
+
" </tr>\n",
|
385 |
+
" <tr>\n",
|
386 |
+
" <th>25</th>\n",
|
387 |
+
" <td>4</td>\n",
|
388 |
+
" <td>20</td>\n",
|
389 |
+
" <td>152</td>\n",
|
390 |
+
" <td>107</td>\n",
|
391 |
+
" <td>0.997918</td>\n",
|
392 |
+
" </tr>\n",
|
393 |
+
" <tr>\n",
|
394 |
+
" <th>27</th>\n",
|
395 |
+
" <td>5</td>\n",
|
396 |
+
" <td>13</td>\n",
|
397 |
+
" <td>159</td>\n",
|
398 |
+
" <td>107</td>\n",
|
399 |
+
" <td>0.998920</td>\n",
|
400 |
+
" </tr>\n",
|
401 |
+
" <tr>\n",
|
402 |
+
" <th>28</th>\n",
|
403 |
+
" <td>5</td>\n",
|
404 |
+
" <td>15</td>\n",
|
405 |
+
" <td>155</td>\n",
|
406 |
+
" <td>110</td>\n",
|
407 |
+
" <td>0.999326</td>\n",
|
408 |
+
" </tr>\n",
|
409 |
+
" <tr>\n",
|
410 |
+
" <th>30</th>\n",
|
411 |
+
" <td>5</td>\n",
|
412 |
+
" <td>10</td>\n",
|
413 |
+
" <td>159</td>\n",
|
414 |
+
" <td>110</td>\n",
|
415 |
+
" <td>0.999587</td>\n",
|
416 |
+
" </tr>\n",
|
417 |
+
" </tbody>\n",
|
418 |
+
"</table>\n",
|
419 |
+
"</div>"
|
420 |
+
],
|
421 |
+
"text/plain": [
|
422 |
+
" Type H Cr Cb cs\n",
|
423 |
+
"34 6 169 133 128 0.761219\n",
|
424 |
+
"33 5 179 152 134 0.776014\n",
|
425 |
+
"29 5 178 161 132 0.787950\n",
|
426 |
+
"31 5 173 158 129 0.790450\n",
|
427 |
+
"0 1 140 129 129 0.811230\n",
|
428 |
+
"35 6 126 128 140 0.841394\n",
|
429 |
+
"6 2 34 128 124 0.980756\n",
|
430 |
+
"20 4 23 150 75 0.981684\n",
|
431 |
+
"21 4 23 150 78 0.984311\n",
|
432 |
+
"1 1 20 129 127 0.987634\n",
|
433 |
+
"2 1 20 129 127 0.987634\n",
|
434 |
+
"19 3 25 144 83 0.988623\n",
|
435 |
+
"12 2 21 130 125 0.988859\n",
|
436 |
+
"7 2 22 131 122 0.990362\n",
|
437 |
+
"17 3 27 142 88 0.990415\n",
|
438 |
+
"3 1 26 132 118 0.990447\n",
|
439 |
+
"22 4 21 149 87 0.991714\n",
|
440 |
+
"13 3 26 133 115 0.991778\n",
|
441 |
+
"23 4 20 151 88 0.992137\n",
|
442 |
+
"10 2 3 134 126 0.992233\n",
|
443 |
+
"11 2 14 133 125 0.992244\n",
|
444 |
+
"32 5 30 151 127 0.992341\n",
|
445 |
+
"5 1 22 133 118 0.992792\n",
|
446 |
+
"4 1 22 134 119 0.992822\n",
|
447 |
+
"9 2 24 133 115 0.992835\n",
|
448 |
+
"16 3 27 141 95 0.992960\n",
|
449 |
+
"24 4 20 151 91 0.993636\n",
|
450 |
+
"8 2 21 134 117 0.993901\n",
|
451 |
+
"15 3 27 139 101 0.993937\n",
|
452 |
+
"14 3 25 136 109 0.994450\n",
|
453 |
+
"18 3 24 143 98 0.995267\n",
|
454 |
+
"26 4 14 156 98 0.996933\n",
|
455 |
+
"25 4 20 152 107 0.997918\n",
|
456 |
+
"27 5 13 159 107 0.998920\n",
|
457 |
+
"28 5 15 155 110 0.999326\n",
|
458 |
+
"30 5 10 159 110 0.999587"
|
459 |
+
]
|
460 |
+
},
|
461 |
+
"execution_count": 11,
|
462 |
+
"metadata": {},
|
463 |
+
"output_type": "execute_result"
|
464 |
+
}
|
465 |
+
],
|
466 |
+
"source": [
|
467 |
+
"from sklearn.metrics.pairwise import cosine_similarity\n",
|
468 |
+
"df['cs'] = [cosine_similarity([X], [y])[0][0]\n",
|
469 |
+
" for X in df.iloc[:, [1, 2, 3]].values]\n",
|
470 |
+
"df.sort_values(by=['cs'])\n"
|
471 |
+
]
|
472 |
+
},
|
473 |
+
{
|
474 |
+
"cell_type": "code",
|
475 |
+
"execution_count": null,
|
476 |
+
"metadata": {},
|
477 |
+
"outputs": [],
|
478 |
+
"source": [
|
479 |
+
"df['cs'] = [cosine_similarity([df.iloc[0, [1, 2, 3]].values], [y])[0][0]]\n",
|
480 |
+
"df.sort_values(by=['cs'])\n"
|
481 |
+
]
|
482 |
+
},
|
483 |
+
{
|
484 |
+
"cell_type": "code",
|
485 |
+
"execution_count": 12,
|
486 |
+
"metadata": {},
|
487 |
+
"outputs": [
|
488 |
+
{
|
489 |
+
"data": {
|
490 |
+
"text/plain": [
|
491 |
+
"5.0"
|
492 |
+
]
|
493 |
+
},
|
494 |
+
"execution_count": 12,
|
495 |
+
"metadata": {},
|
496 |
+
"output_type": "execute_result"
|
497 |
+
}
|
498 |
+
],
|
499 |
+
"source": [
|
500 |
+
"df.sort_values(by=['cs'], ascending=False).iloc[0]['Type']\n"
|
501 |
+
]
|
502 |
+
}
|
503 |
+
],
|
504 |
+
"metadata": {
|
505 |
+
"interpreter": {
|
506 |
+
"hash": "ba2f22f42967f045b6a8cdadb7a1806ca4d147626f8330f177f9e32090d93637"
|
507 |
+
},
|
508 |
+
"kernelspec": {
|
509 |
+
"display_name": "Python 3 (ipykernel)",
|
510 |
+
"language": "python",
|
511 |
+
"name": "python3"
|
512 |
+
},
|
513 |
+
"language_info": {
|
514 |
+
"codemirror_mode": {
|
515 |
+
"name": "ipython",
|
516 |
+
"version": 3
|
517 |
+
},
|
518 |
+
"file_extension": ".py",
|
519 |
+
"mimetype": "text/x-python",
|
520 |
+
"name": "python",
|
521 |
+
"nbconvert_exporter": "python",
|
522 |
+
"pygments_lexer": "ipython3",
|
523 |
+
"version": "3.9.13"
|
524 |
+
}
|
525 |
+
},
|
526 |
+
"nbformat": 4,
|
527 |
+
"nbformat_minor": 2
|
528 |
+
}
|
ML/Skin_metrics/Skin_tone/public/skin tone values/1/1.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/1/2.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/1/3.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/1/4.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/1/5.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/1/6.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/2/10.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/2/11.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/2/12.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/2/13.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/2/7.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/2/8.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/2/9.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/3/14.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/3/15.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/3/16.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/3/17.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/3/18.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/3/19.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/3/20.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/4/21.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/4/22.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/4/23.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/4/24.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/4/25.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/4/26.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/4/27.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/5/28.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/5/29.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/5/30.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/5/31.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/5/32.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/5/33.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/5/34.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/6/35.jpeg
ADDED
![]() |
ML/Skin_metrics/Skin_tone/public/skin tone values/6/36.jpeg
ADDED
![]() |