Beispiel #1
0
 def init(self):
     self.MainStackedWidget.setCurrentIndex(0)
     self.update()
     self.show()
     while self.nom == "":
         self.profil()
     self.computeQCMScore()
     self.recog = Recognizer(self.user.getMod(), self.user.mod["d"])
     self.retourMenu()
Beispiel #2
0
def main():
    c = CommandMatcher.CommandMatcher(config_file)

    r = Recognizer.Recognizer()
    sentence = r.recognize()

    c.match_with_sentence(sentence)
Beispiel #3
0
    def __init__(self, KBpath):

        self.KBpath = KBpath
        self.g = None

        # Abort the whole program
        self.close_flag = False

        # flags used for action recording
        self.actionVideo = []
        self.video_name = ' '
        self.record_start_flag = False
        self.record_stop_flag = False
        self.record_flag = False

        print(
            '\033[1;33;0m Initializing hand detector. Please cover the squares with your hands... \033[0m'
        )
        self.hd = Recognizer.handDetector(0)
        self.hd.initDetector()
        self.cur_frame = []
        self.handPosition = 0

        # mode = (input("Use voice?(Y/N)")).upper()
        self.mode = 'N'
        if self.mode == 'Y':
            # SpeechRecognizer initialization
            self.ARGS, self.model = init_Speechrec()
def findPossibleCharsInScene(imgThresh):
    listOfPossibleChars = []
    intCountOfPossibleChars = 0
    imgThreshCopy = imgThresh.copy()
    imgContours, contours, npaHierarchy = cv2.findContours(imgThreshCopy, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
    height, width = imgThresh.shape
    imgContours = np.zeros((height, width, 3), np.uint8)

    #Begin for
    for i in range(0, len(contours)):
        if Main.showSteps == True:
            cv2.drawContours(imgContours, contours, i, Main.SCALAR_WHITE)

        possibleChar = Recognizer.PossibleChar(contours[i])

        if CharDetector.checkIfPossibleChar(possibleChar):
            intCountOfPossibleChars = intCountOfPossibleChars + 1
            listOfPossibleChars.append(possibleChar)
    #End for

    if Main.showSteps == True:
        print ("\nstep 2 - len(contours) = " + str(len(contours)))
        print ("step 2 - intCountOfPossibleChars = " + str(intCountOfPossibleChars))
        cv2.imshow("2a", imgContours)

    return listOfPossibleChars
Beispiel #5
0
    def __init__(self, conteneur=None):
        if conteneur is None: conteneur = self
        QMainWindow.__init__(conteneur)
        self.setupUi(conteneur)
        self.setCentralWidget(self.centralwidget)

        self.answer = {
            "A": self.pushButtonRep1,
            "B": self.pushButtonRep2,
            "C": self.pushButtonRep3,
            "D": self.pushButtonRep4
        }
        self.createConnexions()

        self.user = None
        self.nom = ""

        self.stats = Stats(self.progressBarQCM, self.progressBarTraduction,
                           self.progressBarCours, self.progressBarQCM_2)

        self.toeic = Toeic()
        self.stats.initPb("toeic", self.toeic.nb)
        self.stats.initPb("toeic2", self.toeic.nb)

        self.cours = Cours()
        self.questionnaire = QCM()

        self.UserWindow = None
        self.LevelWindow = None
        #self.PreferencesWindow=None
        self.recog = Recognizer()

        self.sujet = ""
        self.chapter = ""
        self.sujpter = ""
        self.dictChapter = None

        self.coursKey = ""
        self.qcm = None
        self.qcmKey = ""
        self.type = ""

        self.timeBegin = 0

        self.init()
        self.computeQCMScore()
Beispiel #6
0
 def preferences(self):
     boolChapter = False  #True
     if self.chapter != "":
         boolChapter = False
     mod = []
     lvl = ""
     self.Pw = Preferences.PreferencesWindow(self.user, boolChapter)
     self.Pw.show()
     if self.Pw.exec_():
         mod = self.Pw.getMod()
         lvl = self.Pw.getLevel()
     if mod != []:
         keys = self.Pw.getKeys()
         for x in range(len(keys)):
             self.user.mod[keys[x]] = mod[x]
         self.user.mod["d"] = mod[-1]
     self.recog = Recognizer(self.user.getMod(), self.user.mod["d"])
     return
Beispiel #7
0
 def init(self):
     self.MainStackedWidget.setCurrentIndex(0)
     self.update()
     self.show()
     while self.nom=="":
         self.profil()
     self.computeQCMScore()
     self.recog=Recognizer(self.user.getMod(),self.user.mod["d"])
     self.retourMenu()
Beispiel #8
0
def face_recognition(greyImages):
    UtilsRest.writeToLogger("RECONIZING", "debug")

    if not os.path.isfile(Constants.PATH_TO_TRAINER):
        UtilsRest.writeToLogger(
            "No trainer file exist, " + Constants.RECOGNIZE_FAILED, "error")
        raise FileNotFoundError(Constants.ERROR_MESSAGE +
                                Constants.RECOGNIZE_FAILED)

    recognizer = Recognizer.getRecognizer()

    ids = {}
    index = 1
    for img in greyImages:
        if (img is None):
            UtilsRest.writeToLogger("No image exist by name: %d.pgm" % index,
                                    Constants.DEBUG_MODE)
            break

        x, y = 0, 0
        height, width = img.shape[:2]
        id, confidence = recognizer.predict(img[y:y + height, x:x + width])
        UtilsRest.writeToLogger("id: %d, conf: %d" % (id, confidence), "debug")

        # values that lower than FISHERFACE_CONFIDENCE are good enough for prediction
        if (confidence <= Constants.FISHERFACE_CONFIDENCE):
            if (id not in ids):
                ids[id] = 0
            ids[id] = ids[id] + 1

        index = index + 1

    maxID = 0
    maxVal = 0

    for i in ids:
        if (ids[i] > maxVal):
            maxID = i
            maxVal = ids[i]

    UtilsRest.writeToLogger("Recognized id: %d" % maxID, "debug")
    UtilsRest.writeToLogger("Number of times recognized: %d" % maxVal, "debug")

    if (maxVal >= (len(greyImages) / 2)):
        return maxID
    else:
        return Constants.UNKNOWN
Beispiel #9
0
 def preferences(self):
         boolChapter=False#True
         if self.chapter!="":
             boolChapter=False
         mod=[]
         lvl=""
         self.Pw=Preferences.PreferencesWindow(self.user,boolChapter)
         self.Pw.show()
         if self.Pw.exec_():
                 mod=self.Pw.getMod()
                 lvl=self.Pw.getLevel()
         if mod != []:
             keys=self.Pw.getKeys()
             for x in range(len(keys)):
                 self.user.mod[keys[x]]=mod[x]
             self.user.mod["d"] = mod[-1]
         self.recog=Recognizer(self.user.getMod(), self.user.mod["d"])
         return
Beispiel #10
0
    def __init__(self,  conteneur=None):
        if conteneur is None : conteneur = self
        QMainWindow.__init__(conteneur)
        self.setupUi(conteneur)
        self.setCentralWidget(self.centralwidget)

        self.answer={"A":self.pushButtonRep1,"B":self.pushButtonRep2,"C":self.pushButtonRep3,"D":self.pushButtonRep4}
        self.createConnexions()

        self.user=None
        self.nom=""

        self.stats = Stats(self.progressBarQCM,
                   self.progressBarTraduction,
                   self.progressBarCours,
                   self.progressBarQCM_2)

        self.toeic=Toeic()
        self.stats.initPb("toeic", self.toeic.nb)
        self.stats.initPb("toeic2", self.toeic.nb)

        self.cours=Cours()
        self.questionnaire=QCM()

        self.UserWindow=None
        self.LevelWindow=None
        #self.PreferencesWindow=None
        self.recog=Recognizer()

        self.sujet=""
        self.chapter=""
        self.sujpter=""
        self.dictChapter=None

        self.coursKey=""
        self.qcm=None
        self.qcmKey=""
        self.type=""

        self.timeBegin=0

        self.init()
        self.computeQCMScore()
Beispiel #11
0
def read_and_write(filepath):
    assert os.path.isfile(filepath), 'Invalid filepath as argument'

    video1 = cv2.VideoCapture(filepath)

    frame_width = int(video1.get(3))  # float
    frame_height = int(video1.get(4))  # float

    s = (frame_width, frame_height)

    outfile = get_output_filename(filepath)
    out1 = cv2.VideoWriter(outfile, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'),
                           100, (frame_width, frame_height))

    while (True):
        ret, frame = video1.read()
        if ret == True:

            # Write the frame into the file 'output.avi'
            out1.write(frame)

            # todo
            #emotion = Recognizer.predict(frame)
            #print(emotion)
            frame = Recognizer.predict_and_rectangle(frame)

            # Display the resulting frame
            cv2.imshow('frame', frame)

            # Press Q on keyboard to stop recording
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

        # Break the loop
        else:
            break

    out1.release()
Beispiel #12
0
    def __init__(self, KBpath):

        self.KBpath = KBpath
        self.g = None
        self.title = ''

        # Abort the whole program
        self.close_flag = False

        # flags used for action recording
        self.actionVideo = []
        self.video_name = ' '
        self.record_start_flag = False
        self.record_stop_flag = False
        self.record_flag = False
        self.draw_graph_flag = False

        print(
            '\033[1;33;0m Initializing hand detector. Please cover the squares with your hands... \033[0m'
        )
        self.hd = Recognizer.handDetector(0, 1)
        self.hd.initDetector()
        self.cur_frame = []
        self.handPosition = 0

        self.val_map = {
            'Tool': 1.0,
            'Motion': 0.8,
            'Fruit': 0.3,
            'Sauce': 0.4,
            '': 0.5
        }

        # mode = (input("Use voice?(Y/N)")).upper()
        self.mode = 'N'
        if self.mode == 'Y':
            # SpeechRecognizer initialization
            self.ARGS, self.model = init_Speechrec()
Beispiel #13
0
                if(OPEN):
                    OPEN = False
                    thread = Thread(target=recognize, args=(frame, ))
                    thread.start()
            else:
                count += 1
        if cv2.waitKey(1) == 27: 
            break  # esc to quit

def recognize(frame):
    recognizer.facedetect(frame, reset_open)

def reset_open():
    global OPEN
    OPEN = True

def onReady():
    print('Something')
    #socketio.run(app, host='', port=7190)

def readbase(base_string):
    dope = base64.b64decode(base_string)
    filename = 'img.jpg'
    with open(filename, 'wb') as f:
        f.write(dope)
    return filename

if __name__ == '__main__':
    recognizer = Recognizer.Recognizer()
    showUI()
Beispiel #14
0
def initSession():
    """ Activate and Initialize a interaction session with ontology knowledge base. """
    global hd, out

    print(
        '\033[1;33;0m Initialize hand detector. Please cover the squares with your hands... \033[0m'
    )
    hd = Recognizer.handDetector(0)
    hd.initDetector()

    while True:
        order = (input("waiting for order...")).lower()
        global g
        # New knowledge base
        match = re.match('new', order)
        if match is not None:
            title = order[4:]
            if len(
                    title
            ) == 0:  # If title was not specified, it will be specified as current local time
                title = time.strftime('%Y-%m-%d %H:%M:%S',
                                      time.localtime(time.time()))
            try:
                g = KB.Graph(title=title, directed=True)
                filename = cur_gpath + '\\' + title
                os.mkdir(filename)
                filename = cur_gpath + '\\' + title + '\\Objects'
                os.mkdir(filename)
                filename = cur_gpath + '\\' + title + '\\Motions'
                os.mkdir(filename)
                filename = cur_gpath + '\\' + title + '\\' + title + '.kb'
                KB.save_KB(g, filename)
                print(
                    "\033[1;34m Knowledge base opened successfully... \033[0m")
                print('\033[1;34m <--------------------------', g.title,
                      '--------------------------> \033[0m')
                return
            except:
                ans = (input(
                    '\033[1;33;0m Knowledge base has existed, do you want to load it? (Y/N) \033[0m'
                )).lower()
                if ans == 'y' or ans == 'yes':
                    g = KB.load_KB(cur_gpath + '\\' + order[4:] + '\\' +
                                   order[4:] + '.kb')
                    print(
                        "\033[1;34;0m Knowledge base opened successfully... \033[0m"
                    )
                    print('\033[1;34;0m <--------------------------', g.title,
                          '--------------------------> \033[0m')
                elif ans == 'n' or ans == 'no':
                    continue
                return

        # Open an existing knowledge base
        match = re.match('open', order)
        if match is not None:
            g = KB.load_KB(cur_gpath + '\\' + order[5:] + '\\' + order[5:] +
                           '.KB')
            print("\033[1;34;0m Knowledge base opened successfully... \033[0m")
            print('\033[1;34;0m <--------------------------', g.title,
                  '--------------------------> \033[0m')
            return

        print('\033[0;31m Order cannot be identified... \033[0m')
Beispiel #15
0
class MainWindow(QMainWindow, UiMainWindow):
    def __init__(self, conteneur=None):
        if conteneur is None: conteneur = self
        QMainWindow.__init__(conteneur)
        self.setupUi(conteneur)
        self.setCentralWidget(self.centralwidget)

        self.answer = {
            "A": self.pushButtonRep1,
            "B": self.pushButtonRep2,
            "C": self.pushButtonRep3,
            "D": self.pushButtonRep4
        }
        self.createConnexions()

        self.user = None
        self.nom = ""

        self.stats = Stats(self.progressBarQCM, self.progressBarTraduction,
                           self.progressBarCours, self.progressBarQCM_2)

        self.toeic = Toeic()
        self.stats.initPb("toeic", self.toeic.nb)
        self.stats.initPb("toeic2", self.toeic.nb)

        self.cours = Cours()
        self.questionnaire = QCM()

        self.UserWindow = None
        self.LevelWindow = None
        #self.PreferencesWindow=None
        self.recog = Recognizer()

        self.sujet = ""
        self.chapter = ""
        self.sujpter = ""
        self.dictChapter = None

        self.coursKey = ""
        self.qcm = None
        self.qcmKey = ""
        self.type = ""

        self.timeBegin = 0

        self.init()
        self.computeQCMScore()

    def init(self):
        self.MainStackedWidget.setCurrentIndex(0)
        self.update()
        self.show()
        while self.nom == "":
            self.profil()
        self.computeQCMScore()
        self.recog = Recognizer(self.user.getMod(), self.user.mod["d"])
        self.retourMenu()

    def createConnexions(self):

        self.connect(self.pushButtonProfil, SIGNAL("clicked()"), self.profil)
        self.connect(self.toolButtonQCM, SIGNAL("clicked()"), self.actionQCM)
        self.connect(self.toolButtonTraduction, SIGNAL("clicked()"),
                     self.actionTrad)
        self.connect(self.toolButtonCours, SIGNAL("clicked()"),
                     self.actionCours)

        self.connect(self.pushButtonBack, SIGNAL("clicked()"), self.retourMenu)
        self.connect(self.pushButtonBack3, SIGNAL("clicked()"),
                     self.retourMenu)

        self.connect(self.pushButtonHelp, SIGNAL("clicked()"), self.about_me)

        self.connect(
            self.listSujet,
            SIGNAL(
                "currentItemChanged (QListWidgetItem *, QListWidgetItem *)"),
            self.changeSujet)
        self.connect(
            self.listChapter,
            SIGNAL(
                "currentItemChanged (QListWidgetItem *, QListWidgetItem *)"),
            self.changeChapter)

        self.connect(self.listChapter,
                     SIGNAL("itemDoubleClicked (QListWidgetItem *)"), self.go)
        #self.connect(self.listChapter , SIGNAL("itemPressed (QListWidgetItem *)"), self.go)
        self.connect(self.pushButtonGo, SIGNAL("toggled (bool)"), self.go)
        self.connect(self.pushButtonGo, SIGNAL("clicked()"), self.go)

        self.connect(self.actionPreferences, SIGNAL("triggered()"),
                     self.preferences)
        self.connect(self.actionChange_level, SIGNAL("triggered()"),
                     self.changeLessonLevel)

        #self.toolButtonQCM.resizeEvent =  self.pt

        QCours(self)
        QToeic(self)

##    def pt(self,event):
##        print "prout",event.oldSize().height()

    def profil(self):
        if self.user != None:
            self.user.save()
        self.UserWindow = UserWindow.Window(contain=a)
        self.labelIndex.hide()
        self.labelNiveau.hide()
        self.labelBonjour.setText("Bonjour " + self.nom)
        if self.UserWindow.exec_():
            self.user = self.UserWindow.getUser()
            self.nom = self.user.nom
            self.user.save()
            self.update()

    def changeLessonLevel(self):
        niv = self.level()
        if self.type == "cours":
            self.user.persos[self.sujpter].niveau = niv
        elif self.type == "qcm":
            self.user.qcmpersos[self.sujpter].niveau = niv
        else:
            self.user.toeic.niveau = niv

    def level(self):
        niv = ""
        self.LevelWindow = LevelWindow.Window()
        self.LevelWindow.show()
        while niv == "":
            if self.LevelWindow.exec_():
                niv = self.LevelWindow.getLevel()
        return niv

    def preferences(self):
        boolChapter = False  #True
        if self.chapter != "":
            boolChapter = False
        mod = []
        lvl = ""
        self.Pw = Preferences.PreferencesWindow(self.user, boolChapter)
        self.Pw.show()
        if self.Pw.exec_():
            mod = self.Pw.getMod()
            lvl = self.Pw.getLevel()
        if mod != []:
            keys = self.Pw.getKeys()
            for x in range(len(keys)):
                self.user.mod[keys[x]] = mod[x]
            self.user.mod["d"] = mod[-1]
        self.recog = Recognizer(self.user.getMod(), self.user.mod["d"])
        return

    def afficherEtat(self):
        ## label Bonjour : Haut + gauche
        ## label Exp : bas + gauche
        ## label Niveau : Haut + droite
        ## label Index : bas + droite
        if self.type == "menu":
            self.labelBonjour.setText("Bonjour " + self.profil.name)
            self.labelExp.setText(u"Total de questions répondues : " +
                                  unicode(self.user.persos[self.sujpter].exp))
            self.labelNiveau.hide()
            self.labelIndex.hide()
        else:
            self.labelBonjour.setText("Session : 0/0")
            self.labelExp.setText(u"Questions réussies : " + unicode("0") +
                                  "/" + "X")
            self.labelNiveau.setText("Niveau " +
                                     self.user.persos[self.sujpter].niveau)
            self.labelIndex.setText(self.sujpter)

    def helpe(self):
        a = Gui.QMessageBox(self)
        if self.type == "cours":
            s = u"""Pour ajouter des cours, allez dans le répertoire d'installation puis dans "cours".
Vous devez y créer un dossier dont le nom correspond au nom du sujet de votre cours.
Enfin, vous pouvez placez vos fichiers ".txt" contenant vos listes de vocabulaire
dans ce nouveau répertoire, avec le format suivant pour chaque ligne du fichier :

                                            question:réponse
                                            question:réponse
                                                   etc..."""
        elif self.type == "qcm":
            s = u"""Pour ajouter un QCM, allez dans le répertoire d'installation puis dans "qcm".
Vous devez y créer un dossier dont le nom correspond au nom du sujet de votre QCM.
Enfin, vous pouvez placez vos fichiers ".txt" contenant vos questionnaires
dans ce nouveau répertoire, avec le format suivant pour chaque question :
                                            question
                                            réponse1
                                            réponse2
                                            réponse3
                                            réponse4
                                            réponse5 (optionnel)
                                            #explications (optionnel)
                                            réponse
                               Une ligne vide doit séparer chaque question.
                                            question
                                            etc..."""
        a.information(self, u"Information", s)

    def about_me(self):
        a = Gui.QMessageBox(self)
        s = u"""Ce programme est génial <br> <br />
        Auteur : Adrien Vernotte<br> <br />
        Contact en cas de bug : <A HREF="mailto:[email protected]">[email protected]</A>"""
        a.setTextFormat(Qt.RichText)
        a.setWindowTitle(u"À propos")
        a.setText(s)
        a.exec_()

    ##################################################################
    ### Méthodes
    ##################################################################

    def retourMenu(self):
        self.actionChange_level.setEnabled(False)
        if self.type != "qcm":
            self.MainStackedWidget.setCurrentIndex(0)
            self.sujet = ""
            self.type = ""
            self.labelBonjour.setText("Bonjour " + self.nom)
            self.labelIndex.hide()
            self.labelNiveau.hide()
            self.update()
        else:
            self.MainStackedWidget.setCurrentIndex(0)
            self.sujet = ""
            self.type = ""
            self.labelBonjour.setText("Bonjour " + self.nom)
            self.labelIndex.hide()
            self.labelNiveau.hide()
            self.update()

    def update(self):

        exp = 0
        if self.nom != "":
            exp += self.user.toeic.exp
            for x in self.user.persos.values():
                exp += x.exp
            #self.labelNom
        self.labelExp.setText(u"Total de questions répondues : " +
                              unicode(exp))
        #self.labelNiveau.clear()
        #self.labelIndex.clear()

    def update2(self):  #,item):
        self.labelNiveau.setText("Niveau " + self.user.toeic.niveau)


##        self.labelBonjour.setText("Session : 0/0")
##        self.labelExp.setText(u"Total de questions répondues : "+unicode(self.user.persos[self.sujpter].exp))

    def repondre(self):
        self.labelValidite.setText("Correct ! " + self.lineEditTrad.text())

    def changeSujet(self):
        self.listChapter.clear()
        a = self.listSujet.row(self.listSujet.item(
            self.listSujet.currentRow()))
        if self.type == "cours":
            self.sujet = self.cours.getKeyfromInt(a)
            y = self.cours.getListfromKey(self.sujet)
        else:
            self.sujet = self.questionnaire.getKeyfromInt(a)
            y = self.questionnaire.getListfromKey(self.sujet)
        y.sort()
        self.listChapter.insertItems(0, y)
        self.chapter = ""

    def changeChapter(self):
        if self.sujet != "":
            a = self.listChapter.row(
                self.listChapter.item(self.listChapter.currentRow()))
            if self.type == "cours":
                self.chapter = self.cours.getListfromKey(self.sujet)
            else:
                self.chapter = self.questionnaire.getListfromKey(self.sujet)
            self.chapter.sort()
            self.chapter = self.chapter[a]

    def go(self):
        if self.chapter != "":
            #for cours in ["cours","qcm"]:
            if self.type == "cours":
                self.sujpter = self.sujet + ":" + self.chapter
                self.MainStackedWidget.setCurrentIndex(3)
                self.dictChapter = self.cours.cours[self.sujet][self.chapter]
                if not self.user.xyinKeys(self.sujet, self.chapter):
                    # on regarde si le joueur a déjà participé a ce chapitre
                    ## génial !State du cours avec keys du cours= parfait
                    self.user.addState(self.level(), self.sujpter,
                                       self.dictChapter.keys())

                self.labelNiveau.setText("Niveau " +
                                         self.user.persos[self.sujpter].niveau)
                self.labelIndex.setText(self.sujpter)
                self.labelBonjour.setText("Session : 0/0")
                self.labelExp.setText(
                    u"Total de questions répondues : " +
                    unicode(self.user.persos[self.sujpter].exp))
                self.coursKey = self.user.persos[self.sujpter].getAnswer()

                self.labelIndex.show()
                self.labelNiveau.show()

                self.setCours()
            elif self.type == "qcm":
                self.sujpter = self.sujet + ":" + self.chapter
                self.dictChapter = self.questionnaire.qcm[self.sujet][
                    self.chapter]
                self.MainStackedWidget.setCurrentIndex(1)
                if not self.user.xyinQcmKeys(self.sujet, self.chapter):
                    # on regarde si le joueur a déjà participé a ce chapitre
                    self.user.addQcmState(self.level(), self.sujpter,
                                          self.dictChapter.keys())

                self.labelNiveau.setText(
                    "Niveau " + self.user.qcmpersos[self.sujpter].niveau)
                self.labelIndex.setText(self.sujpter)
                self.labelBonjour.setText("Session : 0/0")
                self.labelExp.setText(
                    u"Total de questions répondues : " +
                    unicode(self.user.qcmpersos[self.sujpter].exp))
                #print self.user.qcmpersos[self.sujpter].question
                self.qcmKey = self.user.qcmpersos[self.sujpter].getAnswer()

                self.labelIndex.show()
                self.labelNiveau.show()
                self.setQCM()
            else:
                print "error type"

    #######################Traduction Vocabulaire#####################

    def actionTrad(self):
        self.actionChange_level.setEnabled(True)
        self.type = "qcm"
        self.MainStackedWidget.setCurrentIndex(2)
        self.listSujet.clear()
        self.listChapter.clear()

        x = []
        for a in self.questionnaire.qcm.keys():
            x.append(a)
        x.sort()
        self.listSujet.insertItems(0, x)

        self.pageTrad()

    def pageTrad(self):
        self.labelTextPerso.setText(
            u"Ici vous pouvez sélectionner votre QCM :")
        self.pushButtonHelp.setText(u"Ajouter un QCM")

    ####################### Cours persos ###############################

    def actionCours(self):
        self.actionChange_level.setEnabled(True)
        self.type = "cours"
        self.MainStackedWidget.setCurrentIndex(2)
        self.listSujet.clear()
        self.listChapter.clear()

        x = []
        for a in self.cours.cours.keys():
            x.append(a)
        x.sort()
        self.listSujet.insertItems(0, x)
        self.pageCours()

    def pageCours(self):
        self.labelTextPerso.setText(
            u"Ici vous pouvez sélectionner l'une de vos listes d'apprentissage personnalisées :"
        )
        self.pushButtonHelp.setText(u"Ajouter une nouvelle liste")

    def retourCours(self):
        self.MainStackedWidget.setCurrentIndex(2)
        self.update()
        self.labelEnonceCours.setText("")

    def setCours(self):
        font = self.labelEnonceCours.font()
        if len(self.dictChapter[self.coursKey]) > 23:
            font.setPointSize(12)
            self.labelEnonceCours.setFont(font)
        else:
            font.setPointSize(48)
            self.labelEnonceCours.setFont(font)
        self.labelEnonceCours.setText(self.dictChapter[self.coursKey])
        self.update()
        self.timeBegin = time.time()

    def saisPas(self):
        self.lineEditCours.clear()
        self.checkCours()

    def checkCours(self):
        self.labelValiditeCours.clear()
        rep = self.lineEditCours.text()
        codec0 = Core.QTextCodec.codecForName("UTF-16")
        rep = unicode(codec0.fromUnicode(rep), 'UTF-16')
        result = "done"

        #utilisation de la réponse
        if not self.recog.isInList(rep, self.coursKey):
            if time.time() - self.timeBegin < 1:  # or rep=="":
                result = "zap"
            else:
                result = "bad"

            a = Gui.QMessageBox()

            s = u"La bonne réponse était : " + unicode(self.coursKey) + ".\n"

            self.statusBar().showMessage("T'es nul !", 1000)
            a.information(self, u"Mauvaise réponse", s)
        else:
            self.labelValiditeCours.setText(u"Bonne réponse !")
        self.coursKey = self.user.persos[self.sujpter].suivant(result)
        self.lineEditCours.clear()
        self.setCours()

    def clearValidite(self):
        self.labelValiditeCours.clear()

    ####################### QCM #####################

    def actionGoQCM(self):

        self.labelEnonceCours.setText(self.dictChapter[self.coursKey])
        self.update()
        self.timeBegin = time.time()

        if self.user.questionnaire[sujpter].niveau == "":
            ## Nouvel utilisateur, ou nouveau QCM
            self.user.toeic.question[0] = self.toeic.getKeys()
            self.user.setToeic(self.level())
            self.user.toeic.experience()

        self.labelNiveau.setText("Niveau " + self.user.toeic.niveau)
        self.labelIndex.setText("QCM de TOEIC")

        total = 0
        fait = 0
        for i in self.user.toeic.question.keys():
            total += len(self.user.toeic.question[i])
        fait == len(self.user.toeic.question[0])
        fait = total - fait

        self.labelBonjour.setText(u"Questions répondues :" + unicode(fait))

        self.labelIndex.show()
        self.labelNiveau.show()

        self.qcmKey = self.user.toeic.getAnswer()
        self.update()
        self.setQCM()
        self.MainStackedWidget.setCurrentIndex(1)
        self.timeBegin = time.time()

    def computeQCMScore(self):
        somme = 0
        for x in ["su", "decouvert"]:
            somme += len(self.user.toeic.question[x])
        self.labelBonjour.setText(u"Questions réussies : " + unicode(somme))
        self.stats.update("toeic", somme)
        self.stats.update("toeic2", somme)

    def actionQCM(self):
        self.actionChange_level.setEnabled(True)
        self.type = "toeic"
        if self.user.toeic.niveau == "":
            ## Nouvel utilisateur, ou nouveau QCM
            self.user.toeic.question[0] = self.toeic.getKeys()
            self.user.setToeic(self.level())
            self.user.toeic.experience()

        self.labelNiveau.setText("Niveau " + self.user.toeic.niveau)
        self.labelIndex.setText("QCM de TOEIC")

        total = 0
        fait = 0
        for i in self.user.toeic.question.keys():
            total += len(self.user.toeic.question[i])
        fait == len(self.user.toeic.question[0])
        fait = total - fait

        self.labelBonjour.setText(u"Questions répondues :" + unicode(fait))

        self.labelIndex.show()
        self.labelNiveau.show()

        self.dictChapter = self.toeic
        self.qcmKey = self.user.toeic.getAnswer()
        self.update()
        self.setQCM()
        self.MainStackedWidget.setCurrentIndex(1)
        self.timeBegin = time.time()

    def setQCM(self):
        if self.type == "toeic":
            self.qcm = self.toeic.questionnaire[self.qcmKey]
            self.labelQuestion.setText(self.qcm["question"])
            self.labelSpeak.setText("Question " + str(self.user.toeic.exp) +
                                    "/" + str(self.toeic.nb))
            for x in "ABCD":
                self.answer[x].show()
                answer = self.qcm["choix"][x]
                #cut the answer in line of length 20
                lk = len(answer) / 20
                for k in range(lk):
                    fi = (k + 1) * 20
                    while (fi < len(answer) - 1 and answer[fi] != ' '):
                        fi += 1
                    answer = answer[:fi] + "\n" + answer[fi:]
                self.answer[x].setText(x + " : " + answer)

        elif self.type == "qcm":
            self.qcm = self.questionnaire.qcm[self.sujet][self.chapter][
                self.qcmKey].getDict()
            self.labelQuestion.setText(self.qcm["question"])
            self.labelSpeak.setText("Question " + str(self.qcmKey) + "/" + "X")
            for x in "ABCD":
                self.answer[x].hide()
            for x in self.qcm["choix"].keys():
                if x == "E": break
                self.answer[x].show()
                answer = self.qcm["choix"][x]
                #cut the answer in line of length 20
                lk = len(answer) / 20
                for k in range(lk):
                    fi = (k + 1) * 20
                    while (fi < len(answer) - 1 and answer[fi] != ' '):
                        fi += 1
                    answer = answer[:fi] + "\n" + answer[fi:]
                self.answer[x].setText(x + " : " + answer)

        self.update()
        self.computeQCMScore()

        self.timeBegin = time.time()

    def checkQCM1(self):
        self.checkQCM("A")

    def checkQCM2(self):
        self.checkQCM("B")

    def checkQCM3(self):
        self.checkQCM("C")

    def checkQCM4(self):
        self.checkQCM("D")

    def checkQCM5(self):
        self.checkQCM("E")

    def checkQCM(self, rep=0):
        result = "done"

        #utilisation de la réponse
        if rep != self.qcm["reponse"]:
            if time.time() - self.timeBegin < 2.5:  # or rep=="E":
                result = "zap"
            else:
                result = "bad"

            a = Gui.QMessageBox()
            s = ""
            if self.type == "qcm":
                s += self.qcm["explications"] + "\n"
                s += "La bonne reponse est ".encode(
                    "utf-8") + self.qcm["reponse"] + " : " + self.qcm["choix"][
                        self.qcm["reponse"]] + ".\n"
            else:
                if self.qcm["explications"] != []:
                    for x in range(len(self.qcm["explications"])):
                        s += self.qcm["explications"][x] + "\n"
                        if x == len(self.qcm["explications"]) - 1: s += "\n"
                s += "The correct answer is " + self.qcm[
                    "reponse"] + " : " + self.qcm["choix"][
                        self.qcm["reponse"]] + ".\n"
            self.statusBar().showMessage("T'es nul !", 1000)
            a.information(self, u"Mauvaise réponse", s)
        else:
            self.statusBar().showMessage(u"Bonne réponse !", 3000)
        if self.type == "toeic":
            self.qcmKey = self.user.toeic.suivant(result)
        else:
            self.qcmKey = self.user.qcmpersos[self.sujpter].getAnswer()
        self.setQCM()
        self.computeQCMScore()

    ###### end #########

    def __del__(self):
        self.user.save()
Beispiel #16
0
import Recognizer
from threading import Thread

app = Flask(__name__)
app.config['SECRET_KEY'] = 'ogil-jax'
socketio = SocketIO(app)

@socketio.on('connect')
def handle_connect():
    print('connected')
    
@socketio.on('on-data')
def handle_data(data):
    img = readbase(data)
    ans = recognizer.predict(img)
    print(ans)
    emit('completed', ans)

def onReady():
    print('Everything is ready')

def readbase(base_string):
    dope = base64.b64decode(base_string)
    filename = 'img.jpg'
    with open(filename, 'wb') as f:
        f.write(dope)
    return filename

if __name__ == '__main__':
    recognizer = Recognizer.Recognizer(onReady)
    socketio.run(app, host='', port=7190)
Beispiel #17
0
class MainWindow(QMainWindow,  UiMainWindow):
    def __init__(self,  conteneur=None):
        if conteneur is None : conteneur = self
        QMainWindow.__init__(conteneur)
        self.setupUi(conteneur)
        self.setCentralWidget(self.centralwidget)

        self.answer={"A":self.pushButtonRep1,"B":self.pushButtonRep2,"C":self.pushButtonRep3,"D":self.pushButtonRep4}
        self.createConnexions()

        self.user=None
        self.nom=""

        self.stats = Stats(self.progressBarQCM,
                   self.progressBarTraduction,
                   self.progressBarCours,
                   self.progressBarQCM_2)

        self.toeic=Toeic()
        self.stats.initPb("toeic", self.toeic.nb)
        self.stats.initPb("toeic2", self.toeic.nb)

        self.cours=Cours()
        self.questionnaire=QCM()

        self.UserWindow=None
        self.LevelWindow=None
        #self.PreferencesWindow=None
        self.recog=Recognizer()

        self.sujet=""
        self.chapter=""
        self.sujpter=""
        self.dictChapter=None

        self.coursKey=""
        self.qcm=None
        self.qcmKey=""
        self.type=""

        self.timeBegin=0

        self.init()
        self.computeQCMScore()

    def init(self):
        self.MainStackedWidget.setCurrentIndex(0)
        self.update()
        self.show()
        while self.nom=="":
            self.profil()
        self.computeQCMScore()
        self.recog=Recognizer(self.user.getMod(),self.user.mod["d"])
        self.retourMenu()

    def createConnexions(self):

        self.connect(self.pushButtonProfil,  SIGNAL("clicked()"), self.profil)
        self.connect(self.toolButtonQCM,  SIGNAL("clicked()"), self.actionQCM)
        self.connect(self.toolButtonTraduction,  SIGNAL("clicked()"), self.actionTrad)
        self.connect(self.toolButtonCours,  SIGNAL("clicked()"), self.actionCours)

        self.connect(self.pushButtonBack,  SIGNAL("clicked()"), self.retourMenu)
        self.connect(self.pushButtonBack3,  SIGNAL("clicked()"), self.retourMenu)

        self.connect(self.pushButtonHelp,  SIGNAL("clicked()"), self.about_me)

        self.connect(self.listSujet,  SIGNAL("currentItemChanged (QListWidgetItem *, QListWidgetItem *)"), self.changeSujet)
        self.connect(self.listChapter,  SIGNAL("currentItemChanged (QListWidgetItem *, QListWidgetItem *)"), self.changeChapter)

        self.connect(self.listChapter , SIGNAL("itemDoubleClicked (QListWidgetItem *)"), self.go)
        #self.connect(self.listChapter , SIGNAL("itemPressed (QListWidgetItem *)"), self.go)
        self.connect(self.pushButtonGo,  SIGNAL("toggled (bool)"), self.go)
        self.connect(self.pushButtonGo,  SIGNAL("clicked()"), self.go)

        self.connect(self.actionPreferences,  SIGNAL("triggered()"), self.preferences)
        self.connect(self.actionChange_level, SIGNAL("triggered()"), self.changeLessonLevel)

        #self.toolButtonQCM.resizeEvent =  self.pt

        QCours(self)
        QToeic(self)

##    def pt(self,event):
##        print "prout",event.oldSize().height()

    def profil(self):
        if  self.user != None:
            self.user.save()
        self.UserWindow=UserWindow.Window(contain=a)
        self.labelIndex.hide()
        self.labelNiveau.hide()
        self.labelBonjour.setText("Bonjour "+self.nom)
        if self.UserWindow.exec_():
            self.user=self.UserWindow.getUser()
            self.nom=self.user.nom
            self.user.save()
            self.update()
        
    def changeLessonLevel(self):
        niv = self.level()
        if self.type=="cours":
            self.user.persos[self.sujpter].niveau = niv
        elif self.type=="qcm":
            self.user.qcmpersos[self.sujpter].niveau=niv
        else:
            self.user.toeic.niveau=niv

    def level(self):
            niv=""
            self.LevelWindow=LevelWindow.Window()
            self.LevelWindow.show()
            while niv=="":
                if self.LevelWindow.exec_():
                    niv=self.LevelWindow.getLevel()
            return niv

    def preferences(self):
            boolChapter=False#True
            if self.chapter!="":
                boolChapter=False
            mod=[]
            lvl=""
            self.Pw=Preferences.PreferencesWindow(self.user,boolChapter)
            self.Pw.show()
            if self.Pw.exec_():
                    mod=self.Pw.getMod()
                    lvl=self.Pw.getLevel()
            if mod != []:
                keys=self.Pw.getKeys()
                for x in range(len(keys)):
                    self.user.mod[keys[x]]=mod[x]
                self.user.mod["d"] = mod[-1]
            self.recog=Recognizer(self.user.getMod(), self.user.mod["d"])
            return

    def afficherEtat(self):
        ## label Bonjour : Haut + gauche
        ## label Exp : bas + gauche
        ## label Niveau : Haut + droite
        ## label Index : bas + droite
        if self.type=="menu":
            self.labelBonjour.setText("Bonjour "+self.profil.name)
            self.labelExp.setText(u"Total de questions répondues : "+unicode(self.user.persos[self.sujpter].exp))
            self.labelNiveau.hide()
            self.labelIndex.hide()
        else:
            self.labelBonjour.setText("Session : 0/0")
            self.labelExp.setText(u"Questions réussies : "+unicode("0")+"/"+"X")
            self.labelNiveau.setText("Niveau "+self.user.persos[self.sujpter].niveau)
            self.labelIndex.setText(self.sujpter)

    def helpe(self):
        a=Gui.QMessageBox(self)
        if self.type=="cours":
            s=u"""Pour ajouter des cours, allez dans le répertoire d'installation puis dans "cours".
Vous devez y créer un dossier dont le nom correspond au nom du sujet de votre cours.
Enfin, vous pouvez placez vos fichiers ".txt" contenant vos listes de vocabulaire
dans ce nouveau répertoire, avec le format suivant pour chaque ligne du fichier :

                                            question:réponse
                                            question:réponse
                                                   etc..."""
        elif self.type=="qcm":
            s=u"""Pour ajouter un QCM, allez dans le répertoire d'installation puis dans "qcm".
Vous devez y créer un dossier dont le nom correspond au nom du sujet de votre QCM.
Enfin, vous pouvez placez vos fichiers ".txt" contenant vos questionnaires
dans ce nouveau répertoire, avec le format suivant pour chaque question :
                                            question
                                            réponse1
                                            réponse2
                                            réponse3
                                            réponse4
                                            réponse5 (optionnel)
                                            #explications (optionnel)
                                            réponse
                               Une ligne vide doit séparer chaque question.
                                            question
                                            etc..."""
        a.information(self,u"Information",s)
            
    def about_me(self):
        a=Gui.QMessageBox(self)
        s=u"""Ce programme est génial <br> <br />
        Auteur : Adrien Vernotte<br> <br />
        Contact en cas de bug : <A HREF="mailto:[email protected]">[email protected]</A>"""
        a.setTextFormat(Qt.RichText);
        a.setWindowTitle(u"À propos");
        a.setText(s)
        a.exec_()



    ##################################################################
    ### Méthodes
    ##################################################################

    def retourMenu(self):
        self.actionChange_level.setEnabled(False)
        if self.type!="qcm":
            self.MainStackedWidget.setCurrentIndex(0)
            self.sujet=""
            self.type=""
            self.labelBonjour.setText("Bonjour "+self.nom)
            self.labelIndex.hide()
            self.labelNiveau.hide()
            self.update()
        else :
            self.MainStackedWidget.setCurrentIndex(0)
            self.sujet=""
            self.type=""
            self.labelBonjour.setText("Bonjour "+self.nom)
            self.labelIndex.hide()
            self.labelNiveau.hide()
            self.update()

    def update(self):

        exp=0
        if self.nom!="":
            exp+=self.user.toeic.exp
            for x in self.user.persos.values():
                    exp+=x.exp
            #self.labelNom
        self.labelExp.setText(u"Total de questions répondues : "+unicode(exp))
        #self.labelNiveau.clear()
        #self.labelIndex.clear()

    def update2(self):#,item):
        self.labelNiveau.setText("Niveau "+self.user.toeic.niveau)
##        self.labelBonjour.setText("Session : 0/0")
##        self.labelExp.setText(u"Total de questions répondues : "+unicode(self.user.persos[self.sujpter].exp))

    def repondre(self):
        self.labelValidite.setText("Correct ! "+self.lineEditTrad.text())

    def changeSujet(self):
        self.listChapter.clear()
        a=self.listSujet.row(self.listSujet.item(self.listSujet.currentRow()))
        if self.type=="cours":
            self.sujet=self.cours.getKeyfromInt(a)
            y=self.cours.getListfromKey(self.sujet)
        else:
            self.sujet=self.questionnaire.getKeyfromInt(a)
            y=self.questionnaire.getListfromKey(self.sujet)
        y.sort()
        self.listChapter.insertItems(0,y)
        self.chapter=""

    def changeChapter(self):
        if self.sujet!="":
            a=self.listChapter.row(self.listChapter.item(self.listChapter.currentRow()))
            if self.type=="cours":
                self.chapter=self.cours.getListfromKey(self.sujet)
            else :
                self.chapter=self.questionnaire.getListfromKey(self.sujet)
            self.chapter.sort()
            self.chapter=self.chapter[a]

    def go(self):
        if self.chapter != "" :
            #for cours in ["cours","qcm"]:
            if self.type=="cours":
                self.sujpter=self.sujet+":"+self.chapter
                self.MainStackedWidget.setCurrentIndex(3)
                self.dictChapter=self.cours.cours[self.sujet][self.chapter]
                if not self.user.xyinKeys(self.sujet,self.chapter):
                    # on regarde si le joueur a déjà participé a ce chapitre
                    ## génial !State du cours avec keys du cours= parfait
                    self.user.addState(self.level(),self.sujpter,self.dictChapter.keys())

                self.labelNiveau.setText("Niveau "+self.user.persos[self.sujpter].niveau)
                self.labelIndex.setText(self.sujpter)
                self.labelBonjour.setText("Session : 0/0")
                self.labelExp.setText(u"Total de questions répondues : "+unicode(self.user.persos[self.sujpter].exp))
                self.coursKey=self.user.persos[self.sujpter].getAnswer()

                self.labelIndex.show()
                self.labelNiveau.show()

                self.setCours()
            elif self.type=="qcm" :
                self.sujpter=self.sujet+":"+self.chapter
                self.dictChapter=self.questionnaire.qcm[self.sujet][self.chapter]
                self.MainStackedWidget.setCurrentIndex(1)
                if not self.user.xyinQcmKeys(self.sujet,self.chapter):
                    # on regarde si le joueur a déjà participé a ce chapitre
                    self.user.addQcmState(self.level(),self.sujpter,self.dictChapter.keys())

                self.labelNiveau.setText("Niveau "+self.user.qcmpersos[self.sujpter].niveau)
                self.labelIndex.setText(self.sujpter)
                self.labelBonjour.setText("Session : 0/0")
                self.labelExp.setText(u"Total de questions répondues : "+unicode(self.user.qcmpersos[self.sujpter].exp))
                #print self.user.qcmpersos[self.sujpter].question
                self.qcmKey=self.user.qcmpersos[self.sujpter].getAnswer()

                self.labelIndex.show()
                self.labelNiveau.show()
                self.setQCM()
            else : print "error type"


    #######################Traduction Vocabulaire#####################

    def actionTrad(self):
        self.actionChange_level.setEnabled(True)
        self.type="qcm"
        self.MainStackedWidget.setCurrentIndex(2)
        self.listSujet.clear()
        self.listChapter.clear()

        x=[]
        for a in self.questionnaire.qcm.keys():
            x.append(a)
        x.sort()
        self.listSujet.insertItems(0,x)

        self.pageTrad()

    def pageTrad(self):
        self.labelTextPerso.setText(u"Ici vous pouvez sélectionner votre QCM :")
        self.pushButtonHelp.setText(u"Ajouter un QCM")

    ####################### Cours persos ###############################

    def actionCours(self):
        self.actionChange_level.setEnabled(True)
        self.type="cours"
        self.MainStackedWidget.setCurrentIndex(2)
        self.listSujet.clear()
        self.listChapter.clear()

        x=[]
        for a in self.cours.cours.keys():
            x.append(a)
        x.sort()
        self.listSujet.insertItems(0,x)
        self.pageCours()

    def pageCours(self):
        self.labelTextPerso.setText(u"Ici vous pouvez sélectionner l'une de vos listes d'apprentissage personnalisées :")
        self.pushButtonHelp.setText(u"Ajouter une nouvelle liste")

    def retourCours(self):
        self.MainStackedWidget.setCurrentIndex(2)
        self.update()
        self.labelEnonceCours.setText("")

    def setCours(self):
        font = self.labelEnonceCours.font()
        if len(self.dictChapter[self.coursKey])>23:
            font.setPointSize(12)
            self.labelEnonceCours.setFont(font)
        else :
            font.setPointSize(48)
            self.labelEnonceCours.setFont(font)
        self.labelEnonceCours.setText(self.dictChapter[self.coursKey])
        self.update()
        self.timeBegin=time.time()

    def saisPas(self):
        self.lineEditCours.clear()
        self.checkCours()

    def checkCours(self):
        self.labelValiditeCours.clear()
        rep=self.lineEditCours.text()
        codec0 = Core.QTextCodec.codecForName("UTF-16");
        rep=unicode(codec0.fromUnicode(rep), 'UTF-16')
        result="done"

        #utilisation de la réponse
        if not self.recog.isInList(rep,self.coursKey):
            if time.time()-self.timeBegin<1:# or rep=="":
                result="zap"
            else : result="bad"

            a=Gui.QMessageBox()

            s=u"La bonne réponse était : "+unicode(self.coursKey)+".\n"

            self.statusBar().showMessage("T'es nul !",1000)
            a.information(self,u"Mauvaise réponse",s)
        else :
            self.labelValiditeCours.setText(u"Bonne réponse !")
        self.coursKey=self.user.persos[self.sujpter].suivant(result)
        self.lineEditCours.clear()
        self.setCours()

    def clearValidite(self):
        self.labelValiditeCours.clear()

    ####################### QCM #####################

    def actionGoQCM(self):

        self.labelEnonceCours.setText(self.dictChapter[self.coursKey])
        self.update()
        self.timeBegin=time.time()

        if self.user.questionnaire[sujpter].niveau=="":
            ## Nouvel utilisateur, ou nouveau QCM
            self.user.toeic.question[0]=self.toeic.getKeys()
            self.user.setToeic(self.level())
            self.user.toeic.experience()

        self.labelNiveau.setText("Niveau "+self.user.toeic.niveau)
        self.labelIndex.setText("QCM de TOEIC")

        total=0;fait=0
        for i in self.user.toeic.question.keys():
            total+=len(self.user.toeic.question[i])
        fait==len(self.user.toeic.question[0])
        fait=total-fait

        self.labelBonjour.setText(u"Questions répondues :"+unicode(fait))

        self.labelIndex.show()
        self.labelNiveau.show()

        self.qcmKey=self.user.toeic.getAnswer()
        self.update()
        self.setQCM()
        self.MainStackedWidget.setCurrentIndex(1)
        self.timeBegin=time.time()

    def computeQCMScore(self):
        somme=0
        for x in ["su","decouvert"]:
            somme+=len(self.user.toeic.question[x])
        self.labelBonjour.setText(u"Questions réussies : "+unicode(somme))
        self.stats.update("toeic", somme)
        self.stats.update("toeic2", somme)

    def actionQCM(self):
        self.actionChange_level.setEnabled(True)
        self.type="toeic"
        if self.user.toeic.niveau=="":
            ## Nouvel utilisateur, ou nouveau QCM
            self.user.toeic.question[0]=self.toeic.getKeys()
            self.user.setToeic(self.level())
            self.user.toeic.experience()

        self.labelNiveau.setText("Niveau "+self.user.toeic.niveau)
        self.labelIndex.setText("QCM de TOEIC")

        total=0;fait=0
        for i in self.user.toeic.question.keys():
            total+=len(self.user.toeic.question[i])
        fait==len(self.user.toeic.question[0])
        fait=total-fait

        self.labelBonjour.setText(u"Questions répondues :"+unicode(fait))

        self.labelIndex.show()
        self.labelNiveau.show()

        self.dictChapter=self.toeic
        self.qcmKey=self.user.toeic.getAnswer()
        self.update()
        self.setQCM()
        self.MainStackedWidget.setCurrentIndex(1)
        self.timeBegin=time.time()

    def setQCM(self):
        if self.type=="toeic":
            self.qcm=self.toeic.questionnaire[self.qcmKey]
            self.labelQuestion.setText(self.qcm["question"])
            self.labelSpeak.setText("Question "+str(self.user.toeic.exp)+"/"+str(self.toeic.nb))
            for x in "ABCD":
                self.answer[x].show()
                answer = self.qcm["choix"][x]
                #cut the answer in line of length 20
                lk=len(answer)/20
                for k in range(lk):
                  fi=(k+1)*20
                  while(fi<len(answer)-1 and answer[fi]!=' '):
                      fi+=1
                  answer=answer[:fi]+"\n"+answer[fi:]
                self.answer[x].setText(x+" : "+answer)

        elif self.type=="qcm":
            self.qcm=self.questionnaire.qcm[self.sujet][self.chapter][self.qcmKey].getDict()
            self.labelQuestion.setText(self.qcm["question"])
            self.labelSpeak.setText("Question "+str(self.qcmKey)+"/"+"X")
            for x in "ABCD":
                self.answer[x].hide()
            for x in self.qcm["choix"].keys():
                if x=="E":break
                self.answer[x].show()
                answer = self.qcm["choix"][x]
                #cut the answer in line of length 20
                lk=len(answer)/20
                for k in range(lk):
                  fi=(k+1)*20
                  while(fi<len(answer)-1 and answer[fi]!=' '):
                      fi+=1
                  answer=answer[:fi]+"\n"+answer[fi:]
                self.answer[x].setText(x+" : "+answer)

        self.update()
        self.computeQCMScore()

        self.timeBegin=time.time()

    def checkQCM1(self):
        self.checkQCM("A")

    def checkQCM2(self):
        self.checkQCM("B")

    def checkQCM3(self):
        self.checkQCM("C")

    def checkQCM4(self):
        self.checkQCM("D")

    def checkQCM5(self):
        self.checkQCM("E")

    def checkQCM(self,rep=0):
        result="done"

        #utilisation de la réponse
        if rep!=self.qcm["reponse"]:
            if time.time()-self.timeBegin<2.5:# or rep=="E":
                result="zap"
            else : result="bad"

            a=Gui.QMessageBox()
            s=""
            if self.type=="qcm":
                s+=self.qcm["explications"]+"\n"
                s+="La bonne reponse est ".encode("utf-8")+self.qcm["reponse"]+" : "+self.qcm["choix"][self.qcm["reponse"]]+".\n"
            else :
                if self.qcm["explications"]!=[]:
                    for x in range(len(self.qcm["explications"])):
                        s+=self.qcm["explications"][x]+"\n"
                        if x==len(self.qcm["explications"])-1:s+="\n"
                s+="The correct answer is "+self.qcm["reponse"]+" : "+self.qcm["choix"][self.qcm["reponse"]]+".\n"
            self.statusBar().showMessage("T'es nul !",1000)
            a.information(self,u"Mauvaise réponse",s)
        else:
            self.statusBar().showMessage(u"Bonne réponse !",3000)
        if self.type=="toeic":
            self.qcmKey=self.user.toeic.suivant(result)
        else :
            self.qcmKey=self.user.qcmpersos[self.sujpter].getAnswer()
        self.setQCM()
        self.computeQCMScore()

    ###### end #########

    def __del__(self):
        self.user.save()
Beispiel #18
0
def handle_start(data):
    global recognizer
    recognizer = Recognizer(user=1)
    return 'loaded'
Beispiel #19
0
import Recognizer
import cv2 as cv

isSecured = True

faceDetect = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
camera = cv.VideoCapture(0)

while True or (isSecured == False):
    _, image = camera.read()
    grayImage = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    faces = faceDetect.detectMultiScale(grayImage, 1.3, 5)

    if len(faces) > 0:
        for (x, y, w, h) in faces:
            image = Recognizer.recognizePerson(x, y, w, h, image, grayImage)

    cv.imshow("Face", image)

    key = cv.waitKey(1)
    if key == 27:
        break

camera.release()
cv.destroyAllWindows()
Beispiel #20
0
from Cours import *
import LevelWindow
import Preferences
import PyQt4.QtCore as Core
import PyQt4.QtGui as Gui
from QCM import *
from Recognizer import *
from State import *
from Toeic import *
import UserWindow
from Stats import *

from os import path

Recognizer().synonymes()

UiMainWindow, Klass = uic.loadUiType(path.join("dep", "Assimilator.ui"))


class MainWindow(QMainWindow, UiMainWindow):
    def __init__(self, conteneur=None):
        if conteneur is None: conteneur = self
        QMainWindow.__init__(conteneur)
        self.setupUi(conteneur)
        self.setCentralWidget(self.centralwidget)

        self.answer = {
            "A": self.pushButtonRep1,
            "B": self.pushButtonRep2,
            "C": self.pushButtonRep3,
Beispiel #21
0
# マスター

import os
import Recognizer
import Data
import cv2
import numpy as np

# -   -   -   -   初期化    -   -   -   - #
trainPath = "./Train/"
# トレイン画像を初期化
for fileName in os.listdir(trainPath):
    # カスケード処理した画像, ラベル
    trainImages, trainLabels = Recognizer.getImgData(trainPath, fileName)

    # 画像1枚ずつ処理
    i = 0
    while i < len(trainLabels):
        # TrainData.imagesに保存
        Data.TrainData.images.append(trainImages[i])
        # TrainData.labelsに保存
        Data.TrainData.labels.append(trainLabels[i])

        # trainフォルダに保存する命名規則の番号を増やす
        for key, value in Data.Name.items():
            if str(trainLabels[i]) == key:
                Data.Name[key] += 1
        i += 1

# トレーニング実施
Recognizer.train()
Beispiel #22
0
def inTrue(mot, corr):

    return Recognizer().isInList(mot, corr)
Beispiel #23
0
def face_training():

    path = Constants.DATASET_PATH  # Path to the face images folder
    targetPath = Constants.PATH_TO_TRAINER

    print("Downloding faces from S3 Storage...")
    downloadDirectoryFromS3(path)

    print("Training faces...")
    if os.path.exists(path):

        def getImagesAndLabels(
                path):  # function to get the images and label data
            workerPaths = [os.path.join(path, d) for d in os.listdir(path)]
            faceSamples = []
            ids = []

            for workerPath in workerPaths:
                imagePaths = [
                    os.path.join(workerPath, f) for f in os.listdir(workerPath)
                ]
                for imagePath in imagePaths:
                    if (os.path.split(imagePath)[-1].split(".")[-1] != 'pgm'):
                        continue

                    img = (cv2.imread(imagePath))
                    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
                    x = 0
                    y = 0
                    h, w = img.shape[:2]

                    id = int(os.path.split(workerPath)[-1])
                    faceSamples.append(
                        cv2.resize(img[y:y + h, x:x + w],
                                   (Constants.WIDTH, Constants.HEIGHT)))
                    ids.append(id)

            return faceSamples, ids

        UtilsRest.writeToLogger(
            "[INFO] Training faces. It will take a few seconds. Wait ...",
            Constants.DEBUG_MODE)
        faces, ids = getImagesAndLabels(path)

        if (len(ids) == 0):
            UtilsRest.writeToLogger("No faces found in dataset",
                                    Constants.DEBUG_MODE)
            return

        recognizer = Recognizer.getRecognizer()
        recognizer.train(faces, np.array(ids))

        UtilsRest.writeToLogger("done train", Constants.DEBUG_MODE)

        path = 'trainer'
        if not os.path.exists(path):
            os.makedirs(path)

        else:
            if os.path.isfile(targetPath):  # delete old file if exist
                os.remove(targetPath)

        # Save the model into trainer/trainer.yml
        recognizer.save(targetPath)

        # write in the log file the number of faces trained
        str = "[INFO] {0} faces trained.".format(len(np.unique(ids)))
        UtilsRest.writeToLogger(str, Constants.DEBUG_MODE)
        print(str)

        UtilsRest.deleteFoldersAndFileInPath(
            Constants.DATASET_PATH
        )  # delete the face images folder and the content
        Recognizer.readFromFile()
Beispiel #24
0
    sys.exit("Connection to the database failed. (is the database settings correct?)")  # closes the program

except Exception as e:
    UtilsRest.writeToLogger(traceback.format_exc(), Constants.ERROR_MODE)  # saves the stacktrace to the logger
    sys.exit("Connection to the database failed.")  # closes the program

lock = _thread.allocate_lock()

try:
    Google_Auth_Gmail.google_auth()

except Exception as e:
    UtilsRest.writeToLogger(traceback.format_exc(), Constants.ERROR_MODE)  # saves the stacktrace to the logger
    sys.exit("Gmail Connection problem.")  # closes the program

Recognizer.initRecognizer()
DelayedTrain.delayedTrain()
trainRecognizerNow()

print("waiting for a connection...")

app = Flask(__name__)
api = Api(app)


def convertWorkerJsonToWorkerObject(worker_str):
    worker = Worker(**worker_str)  # convert to Worker object
    UtilsRest.writeToLogger(worker, Constants.DEBUG_MODE)
    UtilsRest.writeToLogger("Converted from json to object(worker)", Constants.DEBUG_MODE)
    return worker
Beispiel #25
0
    porta = str(input('Digite a porta em que está conectado seu arduino '))
    ser = serial.Serial(porta.upper())  # Abre uma porta

except:
    porta = str(input(porta + ' não é uma porta valida, digite-a novamente: '))
    ser = serial.Serial(porta.upper())



print ("Diga Olá!: ")
while True:

    
    if  config_ ==  'Voz':
        print('Ouvindo \n')
        fala = Recognizer.Fala()  # Reconhecimento de voz
        
    else: fala = str(input('Digite sua fala ')) # String de texto (modo sem voz)

    
    print("Você: "+fala)
 

    #------------------------------------------------------------------------------------------------
    if "deslig" in fala.lower() or 'apag' in fala.lower():
        if 'luz' in fala.lower() or 'rele um' in fala.lower(): ser.write(b"\x00")
        if 'ventilador' in fala.lower() or 'rele dois' in fala.lower(): ser.write(b'\x02')
        #
        #
    
    elif  "lig" in fala.lower() or 'acend' in fala.lower():