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.localisationTresor = LocalisationTresor() 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.ratioMaximum = 0.14 self.listeFormesThread = [] self.listeCouleursThread = [] self.listePositionsThread = [] self.positionRobotThread = [] self.conteurDetectionIles = 0 self.conteurDetectionTresor = 0 self.conteurDetectionRepere = 0 self.time = None self.timeImage = time.time() 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 self.startCycle = False
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.localisationTresor = LocalisationTresor() 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.ratioMaximum = 0.14 self.listeFormesThread = [] self.listeCouleursThread = [] self.listePositionsThread = [] self.positionRobotThread = [] self.conteurDetectionIles = 0 self.conteurDetectionTresor = 0 self.conteurDetectionRepere = 0 self.time = None self.timeImage = time.time() 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 self.startCycle = False def __del__(self): self.wait() def run(self): global listeFormes global listeCouleurs global listePositions global repere global positionRobotTrouvee global orientationRobotTrouvee global ratioCMPixel global listePositionsTresor while True: xIndex = 0 yIndex = 1 start = time.time() self.photo = None self.photo = self.camera.prendrePhoto() if(self.reset == True): self.reInitiliserVariables() listePositionsTresor = [] self.reset = False if(self.startCycle == True): self.reInitiliserVariables() listePositionsTresor = [] self.startCycle = False try: if (self.conteurDetectionRepere < 5): repere, ratioCMPixel = self.localisationRepere.trouverRepere(self.photo) if repere[0] != 0 and repere[1] != 0 and ratioCMPixel != 0: self.conteurDetectionRepere += 1 if (self.conteurDetectionTresor < 10): self.conteurDetectionTresor += 1 listePositionsTresorTemp = self.localisationTresor.trouverTresorParTable(self.photo,repere) if(len(listePositionsTresorTemp) > len(listePositionsTresor)): print "Ajustement nombre tresor" listePositionsTresor = listePositionsTresorTemp self.conteurDetectionTresor = 0 if(self.conteurDetectionIles < 10): self.conteurDetectionIles += 1 listeFormes, listeCouleurs, listePositions = self.localisationIles.trouverIles(self.photo,repere) if (len(listeCouleurs) > len(self.listeCouleursThread) or len(listePositions) > len(self.listePositionsThread) or len(listeFormes) > len(self.listeFormesThread)): print "Ajustement nombre iles" print "Couleur {0}:{1}".format(listeCouleurs, self.listeCouleursThread) self.listePositionsThread = listePositions self.listeCouleursThread = listeCouleurs self.listeFormesThread = listeFormes self.conteurDetectionIles = 0 except Exception as e: print "ERROR: {0}{1}".format(e.args, e.message) continue try: positionRobotTrouvee, orientationRobotTrouvee = self.localisationRobot.trouverRobot(self.photo,ratioCMPixel) self.positionRobotThread.append(positionRobotTrouvee) except Exception as e: print "ERROR: {0}{1}".format(e.args, e.message) continue xPosRobot = positionRobotTrouvee[xIndex] yPosRobot = positionRobotTrouvee[yIndex] if time.time() - self.timeImage > 4: limiteBasRepere = 600 limiteHautRepere = 700 limiteGaucheRepere = 1200 limiteDroiteRepere = 1300 hauteLimiteTable = 450 basseLimiteTable = 350 limiteDroitePhoto = 1600 limiteGauchePhoto = 0 limiteDroiteDesTresor = 80 cv2.circle(self.photo,repere,5,(0,0,255),5) cv2.line(self.photo, (limiteGauchePhoto, repere[yIndex] - basseLimiteTable), (limiteDroitePhoto, repere[yIndex] - basseLimiteTable), (255, 0, 0), 2) cv2.line(self.photo, (limiteGauchePhoto, repere[yIndex] - hauteLimiteTable), (limiteDroitePhoto, repere[yIndex] - hauteLimiteTable), (255, 0, 0), 2) cv2.line(self.photo, (limiteGauchePhoto, repere[yIndex] + hauteLimiteTable), (limiteDroitePhoto, repere[yIndex] + hauteLimiteTable), (255, 0, 0), 2) cv2.line(self.photo, (limiteGauchePhoto, repere[yIndex] + basseLimiteTable), (limiteDroitePhoto, repere[yIndex] + basseLimiteTable), (255, 0, 0), 2) cv2.line(self.photo,(repere[xIndex] + limiteDroiteDesTresor,limiteGauchePhoto),(repere[xIndex] + limiteDroiteDesTresor,limiteGaucheRepere),(255,0,0),2) cv2.rectangle(self.photo,(limiteGaucheRepere,limiteBasRepere),(limiteDroiteRepere,limiteHautRepere),(0,255,0),2) self.afficheurImage.afficherOrientationRobot(self.photo, (int(xPosRobot), int(yPosRobot)), int(orientationRobotTrouvee)) self.afficheurImage.afficherPositionRobot(self.photo, (int(xPosRobot), int(yPosRobot)), self.positionRobotThread) self.afficheurImage.afficherTresor(self.photo,listePositionsTresor) self.afficheurImage.afficherTrajectoire(self.photo, trajectoireCalculer) for i in range(len(self.listeFormesThread)): self.afficheurImage.afficherInformationsIle(self.photo, (self.listePositionsThread[i][xIndex], self.listePositionsThread[i][yIndex]), forme = self.listeFormesThread[i], couleur = self.listeCouleursThread[i]) self.sauvegarderImage(self.photo) self.timeImage = time.time() 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 = [] listePositionsTresor = [] self.positionRobotThread = [] self.conteurDetectionTresor = 0 self.conteurDetectionIles = 0 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