-
Notifications
You must be signed in to change notification settings - Fork 0
/
my_labeling.py
158 lines (112 loc) · 5.13 KB
/
my_labeling.py
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
__authors__ = ['1636290, 1631153, 1636589']
__group__ = ['DJ.10']
from utils_data import read_dataset, read_extended_dataset, crop_images, visualize_retrieval, visualize_k_means
import numpy as np #para usar numpy hay que poner np.<lo que queramos usar de la libreria>
import Kmeans as km
import KNN as knn
import time as t
#Funcions d'analisi qualitatiu
def Retrieval_by_color(imagenes, etiquetes, pregunta):
imag = []
for i, clase in zip(imagenes, etiquetes):
if pregunta in clase: #ponemos 'in' porque si se trata de una cadena un == falla
imag.append(i)
return np.array(imag)
def Retrieval_by_shape(imagenes, etiqueta, pregunta):
imag = []
for i, clase in zip(imagenes, etiqueta):
if pregunta == clase:
imag.append(i)
return np.array(imag)
def Retrieval_combined(imagenes, etiqueta_forma, etiqueta_color, pregunta_forma, pregunta_color):
imag = []
for i, forma, color in zip(imagenes, etiqueta_forma, etiqueta_color):
if pregunta_forma in forma:
if pregunta_color in color: #falla si se pone en ==
imag.append(i)
return np.array(imag)
def my_colors():
etiquetes = []
for test in test_imgs:
Km = km.KMeans(test, K = 2) #dependiendo de la K dará unos resultados u otros, pero funciona
Km.fit()
etiquetes.append(km.get_colors(Km.centroids))
Knn = knn.KNN(train_imgs, train_class_labels)
class_label = Knn.predict(test_imgs, 3)
return np.array(etiquetes), class_label
#test per a les Funcions d'analisi qualitatiu
def test_Retrieval_by_color():
#Llamamos a Retrieval_by_color:
rojo = Retrieval_by_color(test_imgs, test_color_labels, "Red")
verde = Retrieval_by_color(test_imgs, test_color_labels, "Green")
azul = Retrieval_by_color(test_imgs, test_color_labels, "Blue")
#Visualizamos las imagenes que se han recogido
visualize_retrieval(rojo, 5, title="Ropa de color rojo")
visualize_retrieval(verde, 5, title="Ropa de color verde")
visualize_retrieval(azul, 5, title="Ropa de color azul")
def test_Retrieval_by_shape():
#Llamamos a Retrieval_by_shape:
shape = Retrieval_by_shape(test_imgs, my_class_label, "Heels")
visualize_retrieval(shape, 5, title="Forma: Heels")
shape = Retrieval_by_shape(test_imgs, my_class_label, "Dresses")
visualize_retrieval(shape, 5, title="Forma: Dresses")
def test_Retrieval_combined():
combined = Retrieval_combined(test_imgs, my_class_label, my_test_color_labels, "Shirts", "Blue")
visualize_retrieval(combined, 5, title="Camisetas azules")
combined = Retrieval_combined(test_imgs, my_class_label, my_test_color_labels, "Sandals", "Red")
visualize_retrieval(combined, 5, title="Sandalias rojas")
combined = Retrieval_combined(test_imgs, my_class_label, my_test_color_labels, "Dresses", "White")
visualize_retrieval(combined, 5, title="Vestidos blancos")
# #
# TEST QUANTITAU #
# #
def test_Kmean_statistics():
ka = km.KMeans(train_imgs)
WCD_r, i, temps = Kmean_statistics(ka, 3)
print("\n WithinClassDistance:", WCD_r, "\n clusters:",i, "\n time:",temps)
def get_shape_accuracy(gt):
total = len(my_class_label)
et_corr = np.count_nonzero(my_class_label == gt) #con for va un poco más lento
percentatge = (et_corr / total) * 100
print("Shape accuracy:", percentatge, "%")
return percentatge
def Kmean_statistics(kmeans, kmax):
i = []
WCD_r = []
temps = []
for k in range(2, kmax+1):
kmeans.K = k #si se cambia a 'k' minuscula el tiempo baja MUCHO
start = t.time()
kmeans.fit()
end = t.time()
WCD = kmeans.withinClassDistance()
i.append(k)
temps.append((end - start))
WCD_r.append(WCD)
print("hecho")
return WCD_r, i, temps
def test_best_K():
max_K = 10
for im in test_imgs[:10]:
obj = km.KMeans(im)
best_K = obj.find_bestK(max_K)
obj.K = best_K
visualize_k_means(obj, im.shape)
if __name__ == '__main__':
# Load all the images and GT
train_imgs, train_class_labels, train_color_labels, test_imgs, test_class_labels, \
test_color_labels = read_dataset(root_folder='./images/', gt_json='./images/gt.json')
# List with all the existent classes
classes = list(set(list(train_class_labels) + list(test_class_labels)))
# Load extended ground truth
imgs, class_labels, color_labels, upper, lower, background = read_extended_dataset()
cropped_images = crop_images(imgs, upper, lower)
my_test_color_labels, my_class_label = my_colors()
#test per a les Funcions d'analisi qualitatiu
#test_Retrieval_by_color()
#test_Retrieval_by_shape()
#test_Retrieval_combined()
#Posible problema, que tarda casi 3s en pasar.
#test_Kmean_statistics()
#get_shape_accuracy(test_class_labels)
test_best_K()