[PYTHON] Pepper décide du gagnant en mesurant l'ampleur des applaudissements du public

Comment avez-vous écrit cet article?

Il a été créé parce que le mécanisme qui a décidé le prix Pepper lors du hackathon "Voyage d'affaires! Tsukurimi Lab in DMM.make AKIBA with Pepper" organisé par M. Fun Kayak organisé au DMM.make AKIBA le 3 octobre dernier était intéressant. J'ai demandé "Maître Kawada, qui ne sait pas si je faisais Pepper" et il m'a donné un professeur, donc je vais le partager.

** Au fait, je n'ai pas reçu le prix Pepper pour le moment, mais j'ai gagné! Hourra. ** **

supposition

J'écris Qiita pour la première fois, donc je serais heureux si vous pouviez me dire s'il y avait quelque chose comme "C'est plus facile de voir si c'est le cas". Cette fois, je n'ai touché à aucune ligne ni animation.

Conclusion

Pepper mesure le volume du son lorsque d'autres interprètes qui entendent la présentation du présentateur applaudissent, et c'est une application qui "sélectionne l'équipe avec les applaudissements les plus forts".

API utilisée

ALAudioDevice

Méthode utilisée

getFrontMicEnergy()

Préparation

  1. Nom de l'équipe cible
  2. Score pour chaque équipe

Pour le moment, j'en ai fait une variable globale.

init.py


    global members
    global scores

    members = ["Oreiller", "Ma vie poivrée Izu Smile", "bouchon"]
    scores = [0, 0, 0]

Comment ça fonctionne

C'est comme mesurer le volume d'un son à intervalles réguliers et stocker la valeur la plus forte dans les scores des variables globales.

max_SoundCk.py


    def onLoad(self):
        self.timer = None
        self.limit = 0
        self.audio = ALProxy("ALAudioDevice")

    def onUnload(self):
        self.cancelTimer()
        self.audio.disableEnergyComputation()

    def cancelTimer(self):
        if self.timer:
            self.timer.stop()
        self.timer = None

    def onTimer(self):
        v = self.audio.getFrontMicEnergy()
        if self.maxV < v:
            self.maxV = v
        self.limit += int(self.getParameter("Check Interval (s)") * 1000 * 1000)
        if self.limit >= int(self.getParameter("Limit Measure (s)") * 1000 * 1000):
            self.onInput_onStop()

    def startTimer(self):
        import qi
        self.timer = qi.PeriodicTask()
        self.timer.setCallback(self.onTimer)
        self.timer.setUsPeriod(int(self.getParameter("Check Interval (s)") * 1000 * 1000))
        self.timer.start(True)

    def onInput_onStart(self):
        global members
        global current_member

        self.logger.info("Surveillance de l'équipe de démarrage:%s" % members[current_member])
        self.audio.enableEnergyComputation()
        self.maxV = 0
        self.cancelTimer()
        self.startTimer()

    def onInput_onStop(self):
        global scores
        global current_member

        if self.timer and self.timer.isRunning():
            self.logger.info(self.maxV)
            self.onStopped()
            scores[current_member] = self.maxV

        self.onUnload()

Annonce des résultats

Choisissez simplement la plus grande valeur des scores et annoncez-la.

Say_Text.py


    def onInput_onStart(self):
        global members
        global current_member
        global scores
        
        self.logger.info(members)
        m = 0
        mv = 0
        l = len(members)
        for i in range(0,l)  :
            if scores[i] > mv:
                self.logger.info("%d : %d" % (int(i), int(scores[i])))
                m = i
                mv = scores[i]

        p =  members[m]

        self.bIsRunning = True
        try:
            sentence = "\RSPD="+ str( self.getParameter("Speed (%)") ) + "\ "
            sentence += "\VCT="+ str( self.getParameter("Voice shaping (%)") ) + "\ "
            sentence += str(p)
            sentence +=  "\RST\ "
            id = self.tts.post.say(str(sentence))
            self.ids.append(id)
            self.tts.wait(id, 0)
        finally:
            try:
                self.ids.remove(id)
            except:
                pass
            if( self.ids == [] ):
                self.onStopped() # activate output of the box
                self.bIsRunning = False

échantillon

Cette fois, nous avons reçu le code source de Master Kawada ** et avons téléchargé une version peu organisée dans [Robot Library] de Robot Start (https://pepper.robo-lib.com/repositories/summary/41). Alors s'il vous plaît jetez un oeil. https://pepper.robo-lib.com/repositories/summary/41

Recommended Posts

Pepper décide du gagnant en mesurant l'ampleur des applaudissements du public
Augmenter la taille de l'interface utilisateur de MyPaint
À propos de la taille des points dans matplotlib
Décidons le gagnant du bingo
Alignez la taille de la barre de couleurs avec matplotlib
Pandas du débutant, par le débutant, pour le débutant [Python]
Astuces: Comparaison de la taille de trois valeurs