音声認識について

アプリ開発に関する質問 音声認識について

  • このトピックには4件の返信、2人の参加者があり、最後にsgwにより4年、 4ヶ月前に更新されました。
5件の投稿を表示中 - 1 - 5件目 (全5件中)
  • 投稿者
    投稿
  • #1377
    sgw
    参加者

    お世話になります。

    シミュレーターにて PaPeRo i の音声認識を試しているのですが、うまく認識できないので
    ご教授いただけませんでしょうか。

    papero.send_start_speech_recognition() にて音声認識を開始し、
    papero.send_get_speech_recognition_status() にて認識状態を取得した際に
    getSpeechRecognitionStatusRes に「0」が返ってきます。

    実現したいことは、なんらかの音に反応しLEDを点灯・消灯させることです。
    (現在、音声認識のステータスによって処理を振り分けたいと考えています。)

    勉強を始めたばかりで、手探りの状態ですのでヒントだけでもいただけると
    助かります。

    • このトピックはsgwが4年、 4ヶ月前に変更しました。
    #1380
    takahashi@spi
    参加者

    書き込みありがとうございます。

    音声認識のサンプルプログラムです。音声認識はdetectPhraseイベントを
    待つという使い方になると思います。

    本体の音声認識機能を使う場合の注意点としましては、このサンプル
    プログラムでは真ん中ボタンで終了するのですが、この終了処理を
    ちゃんとやらないと次に開始しようとしても失敗する場合が
    あるようです。
    また、顔検知と同時にはちゃんと使えないかも知れません。

    本来やりたいことが音声認識ではなく、音の有無といったことであれば、
    ちょっと難しくなってしまいますが、arecordを使う方が良いかもしれません。

    
    import sys
    
    import pypapero
    
    def speech_recog_init(papero):
        papero.send_read_dictionary('/opt/papero/lib/Standard.mrg')
        papero.send_add_speech_recognition_rule('Standard')
        papero.send_start_speech_recognition()
        papero.send_turn_led_on('ear', ["W2W2", str(int(2000 / 100)), "NN", str(int(2000 / 100))], repeat=True)
    
    def speech_recog_fin(papero):
        papero.send_stop_speech_recognition()
        papero.send_delete_speech_recognition_rule('Standard')
        papero.send_free_dictionary('/opt/papero/lib/Standard.mrg')
        papero.send_turn_led_on('ear', ["NN", str(int(1000 / 100))], repeat=False)
    
    if __name__ == "__main__":
        simulator_id, robot_name, ws_server_addr = pypapero.get_params_from_commandline(sys.argv)
        papero = pypapero.Papero(simulator_id, robot_name, ws_server_addr)
        if papero.errOccurred == 0:
            papero.send_start_speech("音声認識デモ")
            speech_recog_init(papero)
            while True:
                messages = papero.papero_robot_message_recv(1.0)
                if messages is  None:
                    continue
                if 0 == len(messages):
                    continue
                msg0 = messages[0]
                if "Name" not in msg0:
                    continue
                nm = msg0["Name"]
                if nm == "detectButton":
                    if msg0["Status"] == "C":
                        break
                elif nm == "detectPhrase":
                    if "Expression" in msg0:
                        phrase = msg0["Expression"]
                        if phrase != "Reject":
                            papero.send_start_speech(phrase + "って聞こえたよ")
                        else:
                            # papero.send_start_speech("え?何?")
                            pass
        speech_recog_fin(papero)
        papero.papero_cleanup()
    
    #1381
    sgw
    参加者

    サンプルプログラムをいただき、ありがとうございます。
    いただいたサンプルを元に、いろいろ試してみます。

    #1382
    takahashi@spi
    参加者

    すいません、一つ忘れていました。
    このサンプルでは音声認識有効のまましゃべらせていますが、
    これだと自分のしゃべった声を認識してしまうんだったと
    思います。
    もししゃべらせる必要がある場合には、その間音声認識を
    止めて下さい。

    #1383
    sgw
    参加者

    頂いたサンプルで発話時に音声認識を止める処理を追加し、
    想定通りの動作を行うことを確認いたしました。

    ご教授いただきありがとうございます。

5件の投稿を表示中 - 1 - 5件目 (全5件中)
  • このトピックに返信するにはログインが必要です。