Beispiel #1
0
    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
Beispiel #2
0
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