開発ブログ

第13回 パペロで音声認識をしてみた

投稿日時:2019年3月8日 09:03

こんにちは。ピャペロンです!
今回はパペロで音声認識をしてみよう。

あらかじめパペロシミュレーターを動かす環境を整えておこう。第2回 Windowsからパペロシミュレーターを動かしてみた

使用するソフト
・Windows 10
・テキストエディタ(Visual Studio Code
・Google Chrome
・Python 3.6.6 ※実機で動かす場合はPython 3.4で開発しないと動作しない可能性があります。

参考
本体の音声認識機能について | PaPeRo i [非公式] Developer Forum


中央ボタンで音声認識のオン・オフ
ユーザによる発話内容に応じてパペロが受け答え
右ボタンで終了
このような動きを実現してみよう

  1. from logging import basicConfig, DEBUG, getLogger
  2. basicConfig(level=DEBUG)
  3. import sys
  4. import pypapero
  5. from time import sleep
  6. #logger = getLogger(__name__)
  7. def send_event_message(msg, end=False): #イベントメッセージを処理
  8.     if msg[0]["Name"] == "detectButton" and msg[0]["Status"] == "C": #中央ボタンが押されたら
  9.         papero.send_get_speech_recognition_status() #認識状態を取得
  10.         while True:
  11.             msg = papero.papero_robot_message_recv(None)
  12.             if msg[0]["Name"] == "getSpeechRecognitionStatusRes" and msg[0]["Return"] == 0: #音声認識停止中なら
  13.                 papero.send_start_speech("音声認識を開始します")
  14.                 while True:
  15.                     sleep(0.5)
  16.                     papero.send_get_speech_status() #発話中/停止中の状態を取得
  17.                     msg = papero.papero_robot_message_recv(None)
  18.                     if msg[0]["Name"] == "getSpeechStatusRes" and msg[0]["Return"] == 0: #発話停止中なら
  19.                         papero.send_read_dictionary("/opt/papero/lib/Standard.mrg") #音声認識辞書ファイルを読み込み
  20.                         papero.send_add_speech_recognition_rule("Standard") #音声認識開始時に使用する認識ルールを登録
  21.                         papero.send_start_speech_recognition() #音声認識を開始
  22.                         break
  23.                 break
  24.             elif (msg[0]["Name"] == "getSpeechRecognitionStatusRes" and msg[0]["Return"] == 1) or \
  25.                 (msg[0]["Name"] == "getSpeechRecognitionStatusRes" and msg[0]["Return"] == 2): #音声認識動作中なら
  26.                 papero.send_start_speech("音声認識を停止します")
  27.                 while True:
  28.                     sleep(0.5)
  29.                     papero.send_get_speech_status() #発話中/停止中の状態を取得
  30.                     msg = papero.papero_robot_message_recv(None)
  31.                     if msg[0]["Name"] == "getSpeechStatusRes" and msg[0]["Return"] == 0: #発話停止中なら
  32.                         papero.send_stop_speech_recognition() #音声認識を停止
  33.                         papero.send_delete_speech_recognition_rule("Standard") #認識ルールを削除
  34.                         papero.send_free_dictionary("/opt/papero/lib/Standard.mrg") #読み込んだ音声認識辞書を解放
  35.                         break
  36.                 break
  37.     elif msg[0]["Name"] == "detectPhrase" and msg[0]["Expression"] != "Reject": #音声を正しく認識出来た場合
  38.         if msg[0]["Expression"] == "こんにちは":
  39.             papero.send_stop_speech_recognition()
  40.             papero.send_start_speech("こんにちは。パペロです。早口言葉が大好きです。鹿もカモシカも鹿の仲間 しかしアシカは鹿ではない 仕方ないが叱ってやった。")
  41.             while True:
  42.                 sleep(0.5)
  43.                 papero.send_get_speech_status() #発話中/停止中の状態を取得
  44.                 msg = papero.papero_robot_message_recv(None)
  45.                 if msg[0]["Name"] == "getSpeechStatusRes" and msg[0]["Return"] == 0: #発話停止中なら
  46.                     papero.send_start_speech_recognition() #音声認識を開始
  47.                     break
  48.         elif msg[0]["Expression"] == "好きな食べ物は":
  49.             papero.send_stop_speech_recognition()
  50.             papero.send_start_speech("ラーメンです")
  51.             while True:
  52.                 sleep(0.5)
  53.                 papero.send_get_speech_status() #発話中/停止中の状態を取得
  54.                 msg = papero.papero_robot_message_recv(None)
  55.                 if msg[0]["Name"] == "getSpeechStatusRes" and msg[0]["Return"] == 0: #発話停止中なら
  56.                     papero.send_start_speech_recognition() #音声認識を開始
  57.                     break
  58.         else:
  59.             papero.send_stop_speech_recognition()
  60.             papero.send_start_speech("え?なんですか?")
  61.             while True:
  62.                 sleep(0.5)
  63.                 papero.send_get_speech_status() #発話中/停止中の状態を取得
  64.                 msg = papero.papero_robot_message_recv(None)
  65.                 if msg[0]["Name"] == "getSpeechStatusRes" and msg[0]["Return"] == 0: #発話停止中なら
  66.                     papero.send_start_speech_recognition() #音声認識を開始
  67.                     break
  68.     elif msg[0]["Name"] == "detectButton" and msg[0]["Status"] == "R": #右ボタンを押されたら
  69.         papero.send_delete_speech_recognition_rule("Standard") #認識ルールを削除
  70.         papero.send_free_dictionary("/opt/papero/lib/Standard.mrg") #読み込んだ音声認識辞書を解放
  71.         papero.send_stop_speech_recognition() #音声認識を停止
  72.         papero.send_stop_speech()
  73.         sleep(0.5)
  74.         papero.send_start_speech("おやすみなさい")
  75.         papero.papero_cleanup()
  76.         end = True
  77.     return end
  78. if __name__ == "__main__":
  79.     simulator_id, robot_name, ws_server_addr = pypapero.get_params_from_commandline(sys.argv)
  80.     papero = pypapero.Papero(simulator_id, robot_name, ws_server_addr)
  81.     if papero.errOccurred == 0:
  82.         end = False
  83.         while end == False:
  84.             message = papero.papero_robot_message_recv(None)
  85.             end = send_event_message(message)


シミュレーターの項目からユーザによる発話で音声を認識させてみよう。
このように動けば成功だ!

 


0

最新開発ブログ一覧  (一覧で確認
2020年8月19日 14:08
開発ブログ
第30回 パペロで赤外線アレイセンサを動かしてみよう!【中編:顔の表面温度を測ってみよう】
by 管理者
2020年7月22日 16:07
開発ブログ
第29回 パペロで赤外線アレイセンサを動かしてみよう!【前編:簡易サーモグラフィを作ろう】
by 管理者
2019年11月20日 17:11
開発ブログ
第28回 パペロでJulius4.5を実行してみた
by 管理者
2019年11月13日 09:11
開発ブログ
第27回 JuliusをPaPeRoi向けにクロスコンパイルしてみた
by 管理者
2019年9月19日 17:09
開発ブログ
第26回Linaro Toolchainでクロスコンパイルしてみた
by 管理者

コメントは受け付けていません。