-
Notifications
You must be signed in to change notification settings - Fork 0
/
ApplicationIHM(2).py
208 lines (165 loc) · 8.26 KB
/
ApplicationIHM(2).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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# -*- coding: utf-8 -*-
"""
Created on Thu May 7 12:23:07 2020
@author: Max
"""
import sys
from PyQt5 import QtGui, QtCore, QtWidgets, uic
from Interro import *
from Creation_bdd import *
from testttttttttttt import *
import operator
class MonAppli(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.lets_go() #On lance la création de la BDD
self.ui = uic.loadUi('IHM2.ui', self)
self.nbr_sortie = 1 #Par défaut le nombre de résultat sortant est 1
#On initialise les boutons
###################################################################################
self.ui.Rechercher.clicked.connect(self.rechercher) #lance la recherche
self.ui.nbr_choix.valueChanged.connect(self.valuechange_nbr_img) # Change le nombre d'image en sortie
self.ui.bouton_gauche.clicked.connect(self.go_gauche) #Passe à l'image de gauche
self.ui.bouton_droit.clicked.connect(self.go_droite) #Passe à celle de Droite
####################################################################################
self.nbr_gauche = len(self.list_test) #Nombre de fois qu'on a décalé à gauche
self.nbr_droite = 0 #idem à droite
self.image_en_cours=0 #sur quelle image on est en ce moment
#####################################################################################################
#On met par défaut des images blanches dans le resultat avant de lancer une recherche
pixmap = QtGui.QPixmap("blanc.jpg")
self.label_img_result1.setPixmap(pixmap)
self.label_img_result1.setScaledContents(True)
self.label_img_result2.setPixmap(pixmap)
self.label_img_result2.setScaledContents(True)
self.label_img_result3.setPixmap(pixmap)
self.label_img_result3.setScaledContents(True)
####################################################################################
#on affiche l'image en cours et en attente de recherche comparative
pixmap = QtGui.QPixmap(self.list_test[self.image_en_cours])
self.label_img_request.setPixmap(pixmap)
self.label_img_request.setScaledContents(True)
####################################################################################
#le nombre d'image en sortie
def valuechange_nbr_img(self):
self.nbr_sortie = self.ui.nbr_choix.value()
##################################################################################
#faire défiler les images de gauche à droite
def go_gauche(self):
if self.nbr_droite==0:
QtWidgets.QMessageBox.question(self, 'Attention !',
'Vous êtes sur la première image.',
QtWidgets.QMessageBox.Ok)
else :
self.nbr_gauche+=1
self.nbr_droite-=1
self.image_en_cours-=1
pixmap = QtGui.QPixmap(self.list_test[self.image_en_cours])
self.label_img_request.setPixmap(pixmap)
self.label_img_request.setScaledContents(True)
def go_droite(self):
if self.nbr_gauche==0:
QtWidgets.QMessageBox.question(self, 'Attention !',
'Vous êtes sur la dernière image.',
QtWidgets.QMessageBox.Ok)
else :
self.nbr_droite+=1
self.nbr_gauche-=1
self.image_en_cours += 1
pixmap = QtGui.QPixmap(self.list_test[self.image_en_cours])
self.label_img_request.setPixmap(pixmap)
self.label_img_request.setScaledContents(True)
##########################################################################################
#Création de la base de données et de 3 tables, une où il y a tout, une test, et une banque oùu on va chercher la
#comparaison
def lets_go(self):
self.M = Interro('Images', 'Images')
self.M.creation()
self.M.ajoutColonne('Index_1', 'REAL')
self.M.ajoutColonne('Index_2', 'REAL')
self.M.ajoutColonne('Path', 'TEXT', 'Oui')
i = 1
list = glob.glob('./BDD/shazam_images/' + '*.png')
for x in list:
self.M.insertion(i, 'Index_1', 0.0)
self.M.update(i, 'Path', x)
i += 1
# Ça, ça créer les listes test et banque (le truc 80/20)
self.list_banque, self.list_test = train_test_split(list, test_size=0.2)
# Là, on créer la table banque, avec les 80% d'images de la table images
self.A = Interro('Images', 'Banque')
self.A.creation()
self.A.ajoutColonne('Index_1', 'REAL')
self.A.ajoutColonne('Index_2', 'REAL')
self.A.ajoutColonne('Path', 'TEXT', 'Oui')
i = 1
for x in self.list_banque:
self.A.insertion(i, 'Index_1', 0.0)
self.A.update(i, 'Path', x)
i += 1
# Et ici la table de test, avec les 20% restants
self.T = Interro('Images', 'Test')
self.T.creation()
self.T.ajoutColonne('Index_1', 'REAL')
self.T.ajoutColonne('Index_2', 'REAL')
self.T.ajoutColonne('Path', 'TEXT', 'Oui')
i = 1
for x in self.list_test:
self.T.insertion(i, 'Index_1', 0.0)
self.T.update(i, 'Path', x)
i += 1
############################################################################################################
#La fonction rechercher va rechercher dans la table Banque selon le critère couleur ou distance l'image la plus
#proche de l'image en cours
def rechercher(self):
self.valuechange_nbr_img()
id_choisi = self.image_en_cours #l'image en cours
img = Image(self.list_test[int(id_choisi)]) #on la transforme en une image "comparable" (Image est définie dans
i = 1
indices1 = []
indices2 = []
indices = []
for x in self.list_banque:
img2 = Image(x) #on transforme chaque image de la banque
indice1, indice2 = img.compare(img2) #On compare à l'image en cours
self.A.update(i, 'Index_1', indice1)
self.A.update(i, 'Index_2', indice2) #on range tout les indice de comparaison dans la table
indices1.append(indice1)
indices2.append(indice2)
indices.append([indice1,indice2]) # et on met tout ça dans une grosse liste
i += 1
indices = sorted(indices, key=operator.itemgetter(0)) #on effectue un premier trie sur la couleur
indices_finaux = []
for i in range(int(self.nbr_sortie)):
indices_finaux.append(indices[i])
indices_finaux = sorted(indices_finaux, key=operator.itemgetter(1)) #☺on effectue un second trie selon la distance
list_res = []
for i in range(int(self.nbr_sortie)):
list_res.append(self.A.gation_path(indices_finaux[i][0],'Index_1'))
#Et on les affiches selon le nombre de sorties voulu
if self.nbr_sortie==1:
pixmap = QtGui.QPixmap(list_res[0])
self.label_img_result1.setPixmap(pixmap)
self.label_img_result1.setScaledContents(True)
if self.nbr_sortie==2:
pixmap = QtGui.QPixmap(list_res[0])
self.label_img_result1.setPixmap(pixmap)
self.label_img_result1.setScaledContents(True)
pixmap = QtGui.QPixmap(list_res[1])
self.label_img_result2.setPixmap(pixmap)
self.label_img_result2.setScaledContents(True)
if self.nbr_sortie==3:
pixmap = QtGui.QPixmap(list_res[0])
self.label_img_result1.setPixmap(pixmap)
self.label_img_result1.setScaledContents(True)
pixmap = QtGui.QPixmap(list_res[1])
self.label_img_result2.setPixmap(pixmap)
self.label_img_result2.setScaledContents(True)
pixmap = QtGui.QPixmap(list_res[2])
self.label_img_result3.setPixmap(pixmap)
self.label_img_result3.setScaledContents(True)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = MonAppli()
window.show()
app.exec_()