def testDeLAffichageSurLImageGenereeParOpenCV(): localisationIle = LocalisationIle() localisationRobot = LocalisationRobot() afficheurImage = AfficheurImage() nomPhotos = "../photos/table_iles_robot1.jpg" photo = cv2.imread(nomPhotos, cv2.IMREAD_UNCHANGED) listForme, listeCouleur, listePosition = localisationIle.trouverIles(photo) (xPosRobot, yPosRobot), orientation = localisationRobot.trouverRobot(photo) afficheurImage.afficherOrientationRobot(photo, (int(xPosRobot), int(yPosRobot)), int(orientation)) afficheurImage.afficherPositionRobot(photo, (int(xPosRobot), int(yPosRobot))) for i in range(len(listForme)): afficheurImage.afficherInformationsIle(photo, (listePosition[i - 1][0], listePosition[i - 1][1]), forme = listForme[i - 1], couleur = listeCouleur[i - 1]) while(True): cv2.imshow('frame',photo) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows()
def ReponseAnalyse(): localisateurIle = LocalisationIle() photo = cv2.imread("../photos/Situations/situationTable3.jpg" ) listeCouleur,listeForme,listePosition = localisateurIle.trouverIles(photo) retour = "'forme': 'cercle'" print listeCouleur,listeForme if retour.find("couleur"): for index in range(0,len(listeCouleur)): if retour.find(listeCouleur[index]) > 0: ileCible = index break if retour.find("forme"): for index in range(0,len(listeForme)): if retour.find(listeForme[index]) > 0: ileCible = index break print ileCible
def testDeLAffichageSurLaVideoCaptureeParOpenCv(): camera = cv2.VideoCapture(0) camera.set(3,1600) camera.set(4,1200) localisationIle = LocalisationIle() localisationRobot = LocalisationRobot() afficheurImage = AfficheurImage() carte = Carte() nbreFrame = 0 #cheminement = Cheminement() while(True): ret, frame = camera.read() #frame = cv2.imread("../photos/table_iles_robot7.jpg",1) nbreFrame += 1 print nbreFrame if nbreFrame % 60 == 0: listForme, listeCouleur, listePosition = localisationIle.trouverIles(frame) (xPosRobot, yPosRobot), orientation = localisationRobot.trouverRobot(frame) afficheurImage.afficherOrientationRobot(frame, (int(xPosRobot), int(yPosRobot)), int(orientation)) afficheurImage.afficherPositionRobot(frame, (int(xPosRobot), int(yPosRobot))) for i in range(len(listForme)): afficheurImage.afficherInformationsIle(frame, (listePosition[i - 1][0], listePosition[i - 1][1]), forme = listForme[i - 1], couleur = listeCouleur[i - 1]) # Display the resulting frame #print repere #print xPosRobot,yPosRobot #cv2.circle(frame,(1140,168),5,(255,255,255),5) cv2.imshow('frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break # When everything done, release the capture camera.release() cv2.destroyAllWindows()
def testRemplissageDeCarte(): localisateurIle = LocalisationIle() localisationRepere = LocalisationRepere() localisationRobot = LocalisationRobot() carte = Carte() photo = cv2.imread("../photos/table_iles_robot14.jpg") repere,ratio = localisationRepere.trouverRepere(photo) listeCouleur,listeForme,listePosition = localisateurIle.trouverIles(photo) robot,orientation = localisationRobot.trouverRobot(photo,ratio) carte.genererCarte(repere, listePosition, ratio, photo) cv2.imshow("photo",photo) cv2.waitKey(0) planification = Cheminement(carte) trajectoire = planification.trouverTrajectoire(robot,(carte.recupererSommet(0).x,carte.recupererSommet(0).y)) trajectoire.append(carte.recupererSommet(0)) cv2.circle(photo,(int(robot[0]),int(robot[1])),5,(0,255,0),5) for point in trajectoire: cv2.circle(photo,(int(point.x),int(point.y)),5,(255,255,255),5) print listeForme print trajectoire cv2.imshow("photo",photo) cv2.waitKey(0)
def testJustePourTrouverLesIles(): localisationIle = LocalisationIle() camera = CameraFixe() photo = camera.prendrePhoto() listForme, listCouleur, listPosition = localisationIle.trouverIles(photo, True) print listForme, listCouleur, listPosition
class TestFonctionnel_Vision(unittest.TestCase): numberOfShapes = 4 carreIndex = 0 triangleIndex = 0 cercleIndex = 0 pentagoneIndex = 0 nombreDePhotoDIle = 20 nombreDePhotoDuRobot = 16 decalagePositionIles = 10 photosPath = "../photos/" caracteristiquePath = "../data_photos/" boolCouleurCarreVisible = False boolCouleurTriangleVisible = False boolCouleurCercleVisible = False boolCouleurPentagoneVisible = False nomDuFichierALire = "" dataDuFichierLu = None listCaracteristiquesCarreLu = "" listCaracteristiquesTriangleLu = "" listCaracteristiquesCercleLu = "" listCaracteristiquesPentagoneLu = "" couleurCarreLu = "" xPositionCarreLu = 0 yPositionCarreLu = 0 couleurTriangleLu = 0 xPositionTriangleLu = 0 yPositionTriangleLu = 0 couleurCercleLu = "" xPositionCercleLu = 0 yPositionCercleLu = 0 couleurPentagoneLu = "" xPositionPentagoneLu = 0 yPositionPentagoneLu = 0 listFormes = None listCouleurs = None listPosition = None repere = None couleurCarreTrouvee = "" xPositionCarreTrouvee = 0 yPositionCarreTrouvee = 0 couleurTriangleTrouvee = "" xPositionTriangleTrouvee = 0 yPositionTriangleTrouvee = 0 couleurCercleTrouvee = "" xPositionCercleTrouvee = 0 yPositionCercleTrouvee = 0 couleurPentagoneTrouvee = "" xPositionPentagoneTrouvee = 0 yPositionPentagoneTrouvee = 0 xPositionRobotLue = 0 yPositionRobotLue = 0 xPositionRobotTrouvee = 0 yPositionRobotTrouvee = 0 positionRobotTrouvee = (0, 0) orientationRobotLue = 0 orientationRobotTrouvee = 0 listCaracteristiquesTresorLu = "" positionXTresorPlusProcheLue = 0 positionYTresorPlusProcheLue = 0 def setUp(self): self.localisationRobot = LocalisationRobot() self.localisationIles = LocalisationIle() self.localisationRepere = LocalisationRepere() self.localisationTresor = LocalisationTresor() def test_ValiderPositionRobotTrouvee(self): for i in range(1, self.nombreDePhotoDuRobot): # Lecture fichier data nomPhoto = "table_OrientationRobot" + str(i) + ".jpg" self.loadRobotDataPhotos(nomPhoto) # Trouver data sur photo photo = cv2.imread(self.photosPath + nomPhoto, cv2.IMREAD_COLOR) nomPhoto = nomPhoto.replace("../photos\\", "") self.positionRobotTrouvee, self.orientationRobotTrouvee = self.localisationRobot.trouverRobot(photo) self.xPositionRobotTrouvee = self.positionRobotTrouvee[0] self.yPositionRobotTrouvee = self.positionRobotTrouvee[1] self.orientationRobotTrouvee = self.orientationRobotTrouvee try: self.assertTrue( self.sontEgauxAvecMargeDerreur_positionRobot(self.xPositionRobotLue, self.xPositionRobotTrouvee) ) self.assertTrue( self.sontEgauxAvecMargeDerreur_positionRobot(self.yPositionRobotLue, self.yPositionRobotTrouvee) ) self.assertTrue( self.sontEgauxAvecMargeDerreur_orientationRobot( self.orientationRobotLue, self.orientationRobotTrouvee ) ) print "{0} Ok".format(nomPhoto) except AssertionError: print "{0}: Mauvaise position ou orientation".format(nomPhoto) print "x voulue, x trouve: {0}, {1}".format(self.xPositionRobotLue, self.xPositionRobotTrouvee) print "y voulue, y trouve: {0}, {1}".format(self.yPositionRobotLue, self.yPositionRobotTrouvee) print "orientation voulue, orientation trouve: {0}, {1}".format( self.orientationRobotLue, self.orientationRobotTrouvee ) def test_ValiderCaracteristiquesIlesTrouveesParFonctionTrouverIles(self): for i in range(1, self.nombreDePhotoDIle): # Lecture fichier data nomPhoto = "table_iles_robot" + str(i) + ".jpg" # print nomPhoto self.loadIlesDataPhotos(nomPhoto) # Trouver data sur photo photo = cv2.imread(self.photosPath + nomPhoto, cv2.IMREAD_COLOR) nomPhoto = nomPhoto.replace("../photos\\", "") try: self.listFormes, self.listCouleurs, self.listPosition = self.localisationIles.trouverIles(photo) except Exception as e: print "{0}: {1}".format(nomPhoto, e.message) continue self.assignerIndexFormes() self.loadIlesDataTrouvee() try: # CARRE self.assertEquals( self.couleurCarreTrouvee, self.couleurCarreLu, self.messageErreurCouleur(nomPhoto, self.couleurCarreLu, self.couleurCarreTrouvee), ) self.assertTrue( self.sontEgauxAvecMargeDerreur_positionIle(self.xPositionCarreLu, self.xPositionCarreTrouvee), self.messageErreurPositionIles( nomPhoto, "xPositionCarreLu", self.xPositionCarreLu, "xPositionCarreTrouvee", self.xPositionCarreTrouvee, ), ) self.assertTrue( self.sontEgauxAvecMargeDerreur_positionIle(self.yPositionCarreLu, self.yPositionCarreTrouvee), self.messageErreurPositionIles( nomPhoto, "yPositionCarreLu", self.yPositionCarreLu, "yPositionCarreTrouvee", self.yPositionCarreTrouvee, ), ) # TRIANGLE self.assertEquals( self.couleurTriangleTrouvee, self.couleurTriangleLu, self.messageErreurCouleur(nomPhoto, self.couleurTriangleLu, self.couleurTriangleTrouvee), ) self.assertTrue( self.sontEgauxAvecMargeDerreur_positionIle(self.xPositionTriangleLu, self.xPositionTriangleTrouvee), self.messageErreurPositionIles( nomPhoto, "xPositionTriangleLu", self.xPositionTriangleLu, "xPositionTriangleTrouvee", self.xPositionTriangleTrouvee, ), ) self.assertTrue( self.sontEgauxAvecMargeDerreur_positionIle(self.yPositionTriangleLu, self.yPositionTriangleTrouvee), self.messageErreurPositionIles( nomPhoto, "yPositionTriangleLu", self.yPositionTriangleLu, "yPositionTriangleTrouvee", self.yPositionTriangleTrouvee, ), ) # CERCLE self.assertEquals( self.couleurCercleTrouvee, self.couleurCercleLu, self.messageErreurCouleur(nomPhoto, self.couleurCercleLu, self.couleurCercleTrouvee), ) self.assertTrue( self.sontEgauxAvecMargeDerreur_positionIle(self.xPositionCercleLu, self.xPositionCercleTrouvee), self.messageErreurPositionIles( nomPhoto, "xPositionCercleLu", self.xPositionCercleLu, "xPositionCercleTrouvee", self.xPositionCercleTrouvee, ), ) self.assertTrue( self.sontEgauxAvecMargeDerreur_positionIle(self.yPositionCercleLu, self.yPositionCercleTrouvee), self.messageErreurPositionIles( nomPhoto, "yPositionCercleLu", self.yPositionCercleLu, "yPositionCercleTrouvee", self.yPositionCercleTrouvee, ), ) # PENTAGONE self.assertEquals( self.couleurPentagoneTrouvee, self.couleurPentagoneLu, self.messageErreurCouleur(nomPhoto, self.couleurPentagoneLu, self.couleurPentagoneTrouvee), ) self.assertTrue( self.sontEgauxAvecMargeDerreur_positionIle( self.xPositionPentagoneLu, self.xPositionPentagoneTrouvee ), self.messageErreurPositionIles( nomPhoto, "xPositionPentagoneLu", self.xPositionPentagoneLu, "xPositionPentagoneTrouvee", self.xPositionPentagoneTrouvee, ), ) self.assertTrue( self.sontEgauxAvecMargeDerreur_positionIle( self.yPositionPentagoneLu, self.yPositionPentagoneTrouvee ), self.messageErreurPositionIles( nomPhoto, "yPositionPentagoneLu", self.yPositionPentagoneLu, "yPositionPentagoneTrouvee", self.yPositionPentagoneTrouvee, ), ) print "{0} Ok".format(nomPhoto) except AssertionError as e: print "AssertionError: " + e.message continue def test_ValiderDetectionDesTresor(self): for i in range(1, 10): nomPhoto = "../photos/Situations/situationTable" + str(i) + ".jpg" photoTable = cv2.imread(nomPhoto, cv2.IMREAD_COLOR) photos = glob.glob("../photos/Situations/*.jpg") photoRobot = cv2.imread(photos[i - 1], cv2.IMREAD_COLOR) orientationCamera = photos[i - 1].replace("../photos/Situations\\", "")[11:].replace(".jpg", "") (positionRobotX, positionRobotY), orientationRobot = self.localisationRobot.trouverRobot(photoTable) (positionRepereX, positionRepereY), ratio = self.localisationRepere.trouverRepere(photoTable) positionTresorXTrouvee, positionTresorYTrouvee, distance, cote = self.localisationTresor.trouverTresor( image=photoRobot, orientationRobot=orientationRobot, orientationCamera=0, # float(orientationCamera), positionXRobot=positionRobotX, positionYRobot=positionRobotY, repereX=positionRepereX, repereY=positionRepereY, ratio=ratio, ) # , self.loadTresorDataPhotos(i) print "OrientationRobot: " + str(orientationRobot) print "OrientationCamera: " + str(orientationCamera) print "PositionRobotX: " + str(positionRobotX) print "PositionRobotY: " + str(positionRobotY) print "PositionXTresorLue: " + str(self.positionXTresorPlusProcheLue) print "PositionYTresorLue: " + str(self.positionYTresorPlusProcheLue) print "PositionXTresorTrouvee: " + str(positionTresorXTrouvee) print "PositionYTresorTrouvee: " + str(positionTresorYTrouvee) try: self.assertTrue( self.sontEgauxAvecMargeDerreur_positionTresor( self.positionXTresorPlusProcheLue, positionTresorXTrouvee ), self.messageErreurPositionTresor( nomPhoto, self.positionXTresorPlusProcheLue, positionTresorXTrouvee ), ) self.assertTrue( self.sontEgauxAvecMargeDerreur_positionTresor( self.positionYTresorPlusProcheLue, positionTresorYTrouvee ), self.messageErreurPositionTresor( nomPhoto, self.positionYTresorPlusProcheLue, positionTresorYTrouvee ), ) except AssertionError as e: print "AssertionError: " + e.message continue # Utility functions def CouleursTousVisibles(self): return ( self.boolCouleurCarreVisible and self.boolCouleurTriangleVisible and self.boolCouleurCercleVisible and self.boolCouleurPentagoneVisible ) def loadIlesDataPhotos(self, nomPhoto): nomPhoto = nomPhoto.replace(".jpg", "") nomDuFichierALire = self.caracteristiquePath + "dataIles_" + nomPhoto + ".txt" dataDuFichierLu = open(nomDuFichierALire, "r") self.listCaracteristiquesCarreLu = dataDuFichierLu.readline().split() self.listCaracteristiquesTriangleLu = dataDuFichierLu.readline().split() self.listCaracteristiquesCercleLu = dataDuFichierLu.readline().split() self.listCaracteristiquesPentagoneLu = dataDuFichierLu.readline().split() self.couleurCarreLu = self.listCaracteristiquesCarreLu[1] self.xPositionCarreLu = self.listCaracteristiquesCarreLu[2] self.yPositionCarreLu = self.listCaracteristiquesCarreLu[3] self.couleurTriangleLu = self.listCaracteristiquesTriangleLu[1] self.xPositionTriangleLu = self.listCaracteristiquesTriangleLu[2] self.yPositionTriangleLu = self.listCaracteristiquesTriangleLu[3] self.couleurCercleLu = self.listCaracteristiquesCercleLu[1] self.xPositionCercleLu = self.listCaracteristiquesCercleLu[2] self.yPositionCercleLu = self.listCaracteristiquesCercleLu[3] self.couleurPentagoneLu = self.listCaracteristiquesPentagoneLu[1] self.xPositionPentagoneLu = self.listCaracteristiquesPentagoneLu[2] self.yPositionPentagoneLu = self.listCaracteristiquesPentagoneLu[3] def loadRobotDataPhotos(self, nomPhoto): nomDuFichierALire = self.caracteristiquePath + "dataRobot_" + nomPhoto + ".txt" dataDuFichierLu = open(nomDuFichierALire, "r") data = dataDuFichierLu.readline().split() self.xPositionRobotLue = data[0] self.yPositionRobotLue = data[1] self.orientationRobotLue = data[2] def assignerIndexFormes(self): for i in range(self.numberOfShapes - 1): self.carreIndex = self.listFormes.index("carre") self.triangleIndex = self.listFormes.index("triangle") self.cercleIndex = self.listFormes.index("cercle") self.pentagoneIndex = self.listFormes.index("pentagon") def loadIlesDataTrouvee(self): self.couleurCarreTrouvee = self.listCouleurs[self.carreIndex] self.xPositionCarreTrouvee = self.listPosition[self.carreIndex][0] self.yPositionCarreTrouvee = self.listPosition[self.carreIndex][1] self.couleurTriangleTrouvee = self.listCouleurs[self.triangleIndex] self.xPositionTriangleTrouvee = self.listPosition[self.triangleIndex][0] self.yPositionTriangleTrouvee = self.listPosition[self.triangleIndex][1] self.couleurCercleTrouvee = self.listCouleurs[self.cercleIndex] self.xPositionCercleTrouvee = self.listPosition[self.cercleIndex][0] self.yPositionCercleTrouvee = self.listPosition[self.cercleIndex][1] self.couleurPentagoneTrouvee = self.listCouleurs[self.pentagoneIndex] self.xPositionPentagoneTrouvee = self.listPosition[self.pentagoneIndex][0] self.yPositionPentagoneTrouvee = self.listPosition[self.pentagoneIndex][1] def loadTresorDataPhotos(self, iteration): nomDuFichierALire = self.caracteristiquePath + "dataRobot_situationTable" + str(iteration) + ".jpg.txt" dataDuFichierLu = open(nomDuFichierALire, "r") self.listCaracteristiquesTresorLu = dataDuFichierLu.readline().split() self.positionXTresorPlusProcheLue = self.listCaracteristiquesTresorLu[0] self.positionYTresorPlusProcheLue = self.listCaracteristiquesTresorLu[1] def sontEgauxAvecMargeDerreur_positionIle(self, valeurAttendue, valeurTrouvee): decalage = 10 return int(valeurAttendue) - decalage <= valeurTrouvee <= int(valeurAttendue) + decalage def sontEgauxAvecMargeDerreur_positionRobot(self, valeurAttendue, valeurTrouvee): decalage = 10 return int(valeurAttendue) - decalage <= valeurTrouvee <= int(valeurAttendue) + decalage def sontEgauxAvecMargeDerreur_orientationRobot(self, valeurAttendue, valeurTrouvee): decalage = 4 return float(valeurAttendue) - decalage <= valeurTrouvee <= float(valeurAttendue) + decalage def sontEgauxAvecMargeDerreur_positionTresor(self, valeurAttendue, valeurTrouvee): decalage = 10 return int(valeurAttendue) - decalage <= valeurTrouvee <= int(valeurAttendue) + decalage def messageErreurPositionIles( self, nomPhoto, nomValeurAttendue, valeurAttendue, nomValeurRetournee, valeurRetournee ): message = "{0}: {1} (+/- {2}): {3}, {4} (+/- {2}): {5}".format( nomPhoto, nomValeurAttendue, self.decalagePositionIles, valeurAttendue, nomValeurRetournee, valeurRetournee ) return message def messageErreurCouleur(self, nomPhoto, valeurAttendue, valeurRetournee): message = "{0}: valeur attendu: {1}, valeur retournee: {2}".format(nomPhoto, valeurAttendue, valeurRetournee) return message def messageErreurPositionTresor(self, nomPhoto, valeurAttendue, valeurRetournee): message = "{0}: valeur attendu: {1}, valeur retournee: {2}".format(nomPhoto, valeurAttendue, valeurRetournee) return message
class DetectionEtAffichageThread(QThread): def __init__(self): QThread.__init__(self) self.camera = CameraFixe() self.imageCount = 1 self.nombreDImage = 3 self.nombreDeForme = 4 self.localisationIles = LocalisationIle() self.localisationRobot = LocalisationRobot() self.localisationRepere = LocalisationRepere() self.afficheurImage = AfficheurImage() self.couleurCarreTrouvee = "" self.xPositionCarreTrouvee = 0 self.yPositionCarreTrouvee = 0 self.couleurTriangleTrouvee = "" self.xPositionTriangleTrouvee = 0 self.yPositionTriangleTrouvee = 0 self.couleurCercleTrouvee = "" self.xPositionCercleTrouvee = 0 self.yPositionCercleTrouvee = 0 self.couleurPentagoneTrouvee = "" self.xPositionPentagoneTrouvee = 0 self.yPositionPentagoneTrouvee = 0 self.xPositionRobotTrouvee = 0 self.yPositionRobotTrouvee = 0 self.carreIndex = 0 self.triangleIndex = 0 self.cercleIndex = 0 self.pentagoneIndex = 0 self.detectionIlesTimeout = 10 self.listeFormesThread = [] self.listeCouleursThread = [] self.listePositionsThread = [] self.positionRobotThread = [] self.time = None self.estVerouillee = False self.sauvegardePath = "C:\Users\phili_000\Desktop\Design 3\Design3\Code\Projet\photos\\table_iles_robot_MOD.jpg" self.photo = None self.reset = False def __del__(self): self.wait() def run(self): global listeFormes global listeCouleurs global listePositions global repere global positionRobotTrouvee global orientationRobotTrouvee global ratioCMPixel while True: start = time.time() self.photo = None self.photo = self.camera.prendrePhoto() if(self.reset == True): self.reInitiliserVariables() self.reset = False if((not self.positionsIlesToutesTrouvee() or not self.couleurIlesToutesTrouvee()) and self.detectionIlesTimeout != 0): self.reInitiliserVariables() try: listeFormes, listeCouleurs, listePositions = self.localisationIles.trouverIles(self.photo) repere, ratioCMPixel = self.localisationRepere.trouverRepere(self.photo) self.listePositionsThread = listePositions self.listeCouleursThread = listeCouleurs self.listeFormesThread = listeFormes self.assignerIndexFormes() self.loadIlesDataTrouvee() except Exception as e: print e.message self.detectionIlesTimeout -= 1 self.sauvegarderImage(self.photo) if (self.detectionIlesTimeout == 0): self.detectionIlesTimeout = 10 self.imageCount += 1 continue try: positionRobotTrouvee, orientationRobotTrouvee = self.localisationRobot.trouverRobot(self.photo,ratioCMPixel) self.positionRobotThread.append(positionRobotTrouvee) except Exception: continue xPosRobot = positionRobotTrouvee[0] yPosRobot = positionRobotTrouvee[1] self.afficheurImage.afficherOrientationRobot(self.photo, (int(xPosRobot), int(yPosRobot)), int(orientationRobotTrouvee)) self.afficheurImage.afficherPositionRobot(self.photo, (int(xPosRobot), int(yPosRobot)), self.positionRobotThread) self.afficheurImage.afficherTrajectoire(self.photo, trajectoireCalculer) self.afficheurImage.afficherInformationsIle(self.photo, (self.listePositionsThread[self.carreIndex][0], self.listePositionsThread[self.carreIndex][1]), forme = self.listeFormesThread[self.carreIndex], couleur = self.listeCouleursThread[self.carreIndex]) self.afficheurImage.afficherInformationsIle(self.photo, (self.listePositionsThread[self.triangleIndex][0], self.listePositionsThread[self.triangleIndex][1]), forme = self.listeFormesThread[self.triangleIndex], couleur = self.listeCouleursThread[self.triangleIndex]) self.afficheurImage.afficherInformationsIle(self.photo, (self.listePositionsThread[self.cercleIndex][0], self.listePositionsThread[self.cercleIndex][1]), forme = self.listeFormesThread[self.cercleIndex], couleur = self.listeCouleursThread[self.cercleIndex]) self.afficheurImage.afficherInformationsIle(self.photo, (self.listePositionsThread[self.pentagoneIndex][0], self.listePositionsThread[self.pentagoneIndex][1]), forme = self.listeFormesThread[self.pentagoneIndex], couleur = self.listeCouleursThread[self.pentagoneIndex]) self.sauvegarderImage(self.photo) finish = time.time() deltaTime = finish - start time.sleep(2 - deltaTime) def positionsIlesToutesTrouvee(self): return self.xPositionCarreTrouvee != 0\ and self.yPositionCarreTrouvee != 0\ and self.xPositionTriangleTrouvee != 0\ and self.yPositionTriangleTrouvee != 0\ and self.xPositionCercleTrouvee != 0\ and self.yPositionCercleTrouvee != 0\ and self.xPositionPentagoneTrouvee != 0\ and self.yPositionPentagoneTrouvee != 0 def couleurIlesToutesTrouvee(self): return self.couleurCarreTrouvee != ""\ and self.couleurCercleTrouvee != ""\ and self.couleurTriangleTrouvee != ""\ and self.couleurPentagoneTrouvee != "" def assignerIndexFormes(self): for i in range(self.nombreDeForme - 1): self.carreIndex = listeFormes.index("carre") self.triangleIndex = listeFormes.index("triangle") self.cercleIndex = listeFormes.index("cercle") self.pentagoneIndex = listeFormes.index("pentagon") def loadIlesDataTrouvee(self): self.couleurCarreTrouvee = self.listeCouleursThread[self.carreIndex] self.xPositionCarreTrouvee = self.listePositionsThread[self.carreIndex][0] self.yPositionCarreTrouvee = self.listePositionsThread[self.carreIndex][1] self.couleurTriangleTrouvee = self.listeCouleursThread[self.triangleIndex] self.xPositionTriangleTrouvee = self.listePositionsThread[self.triangleIndex][0] self.yPositionTriangleTrouvee = self.listePositionsThread[self.triangleIndex][1] self.couleurCercleTrouvee = self.listeCouleursThread[self.cercleIndex] self.xPositionCercleTrouvee = self.listePositionsThread[self.cercleIndex][0] self.yPositionCercleTrouvee = self.listePositionsThread[self.cercleIndex][1] self.couleurPentagoneTrouvee = self.listeCouleursThread[self.pentagoneIndex] self.xPositionPentagoneTrouvee = self.listePositionsThread[self.pentagoneIndex][0] self.yPositionPentagoneTrouvee = self.listePositionsThread[self.pentagoneIndex][1] def reInitiliserVariables(self): self.couleurCarreTrouvee = "" self.xPositionCarreTrouvee = 0 self.yPositionCarreTrouvee = 0 self.couleurTriangleTrouvee = "" self.xPositionTriangleTrouvee = 0 self.yPositionTriangleTrouvee = 0 self.couleurCercleTrouvee = "" self.xPositionCercleTrouvee = 0 self.yPositionCercleTrouvee = 0 self.couleurPentagoneTrouvee = "" self.xPositionPentagoneTrouvee = 0 self.yPositionPentagoneTrouvee = 0 self.xPositionRobotTrouvee = 0 self.yPositionRobotTrouvee = 0 self.positionRobotTrouvee = (0,0) self.orientationRobotTrouvee = 0 self.carreIndex = 0 self.triangleIndex = 0 self.cercleIndex = 0 self.pentagoneIndex = 0 self.listeFormesThread = [] self.listeCouleursThread = [] self.listePositionsThread = [] self.positionRobotThread = [] def sauvegarderImage(self, photo): try: self.estVerouillee = True cv2.imwrite(self.sauvegardePath, photo) self.estVerouillee = False except Exception as e: print "Prob dans le sauvegarderImage: {0}".format(e.message) finally: self.estVerouillee = False