Watson Speech to Text & pepper
こんにちは。
AI coordinatorの清水秀樹です。
Pepper単体でも音声認識機能は持っていますが、如何せん認識精度が悪いのは周知の事実ですよね。
Pepperと会話をしたければ、想定される会話をあらかじめSpeech Reco.やダイアログに登録しておく必要があります。
これはこれでPepperと会話が出来なくはないけど、かなり限定的な会話しかできません。
この問題の解決策の一つして、WatsonとPepperの連携があげられます。
Bluemix上にあるWatson APIの中にSpeech to Textというアプリがあり、これをPepperに組み込むだけで飛躍的に音声認識精度をあげることができます。
ここではPepperにWatsonのSpeech to Textを組み込む方法を紹介します。
Blumiexは30日間は無料で使用できるので、ぜひ試してみてください。
また、当記事最後にプロジェクトファイルのダウンロードリンクを貼ってあります。
手っ取り早く使ってみたい方は記事最後まで読み飛ばしてください。
事前準備
Pepperを使う以上はコレグラフのインストールは必須です。
また、Bluemix上でWatson Speech to Textアプリを作成しておく必要があります。
Speech to Textの作成方法は以下の記事を参考にしてください。
Watosn Speech to Text をPythonで使ってみよう
プロジェクトファイルの説明
コレグラフで実装するプロジェクトファイルの説明です。
ここで紹介するプロジェクトファイルは、人間が話した内容をPepperがオウム返ししてくれるというアプリケーションです。
非常に単純に作っていますので、特に実装に難しい部分はありません。
ボックスは全部で4つです。
- Speech Reco.ボックスはアプリを開始するために準備しただけです。
ペッパーと声がけするとアプリがスタートします。 - Record SoundボックスはPepperに話しかけている内容を録音します。
ここでは5秒間録音します。
録音後はwav形式で保存し、次のボックスにファイルのパスを連携します。 - Watson STTはPythonボックスで実装しています。
このボックス内で先ほど録音した音声ファイル(wav)をWatsonのSpeech to Textに渡し、そこでテキスト化された音声データを次のボックスに受け渡します。class MyClass(GeneratedClass): def __init__(self): GeneratedClass.__init__(self) def onLoad(self): self.pathModified = False self.appFolder = self.behaviorAbsolutePath().replace(self.behaviorRelativePath(), "") self.folderName = os.path.join(self.appFolder, "lib") if self.folderName not in sys.path: sys.path.append(self.folderName) self.pathModified = True def onUnload(self): if self.pathModified and self.folderName and self.folderName in sys.path: sys.path.remove(self.folderName) self.folderName = None def onInput_onStart(self, p): #self.onStopped() #activate the output of the box import requests import json url = 'https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?model=ja-JP_BroadbandModel' username = 'サービス資格情報のusername' password = 'サービス資格情報のpassword' headers={'Content-Type': 'audio/wav'} audio = open(p, 'rb') r = requests.post(url, data=audio, headers=headers, auth=(username, password),) res =json.loads(r.text) for result in res['results']: for alternative in result['alternatives']: text = alternative['transcript'] final= text.encode('utf-8') self.onStopped(final) def onInput_onStop(self): self.onUnload() #it is recommended to reuse the clean-up as the box is stopped self.onStopped() #activate the output of the box
- 最後のSay Textボックスはオウム返しするために準備しただけです。
以上です。
プロジェクトファイルのダウンロードはこちらから → Speech To Text.zip
実機で確認済みです。
ぜひお試しあれ。
その他のPepperアプリ記事はこちらから
とても分かりやすい記事でした、ありがとうございます。
実機のペッパーで試したみたところ、以下のようなエラーが出てしまいます。
原因が分からないのですが、どうしたら良いのでしょうか。
コードはurl,username,password以外の部分はいじっておりません。
[ERROR] behavior.box :_safeCallOfUserMethod:125 _Behavior__lastUploadedChoregrapheBehaviorbehavior_1622976592:/Watson STT_2: Traceback (most recent call last):
File “/usr/lib/python2.7/site-packages/albehavior.py”, line 113, in _safeCallOfUserMethod
func(functionArg)
File “”, line 35, in onInput_onStart
KeyError: ‘results’
お問い合わせありがとうございます。
watsonからのリターンをからうまく文章が抜き出せない感じでエラーになっているみたいですね。
url,username,passwordに間違いはないでしょうか?
返信ありがとうございます。
エラーはそのような意味なのですね。ありがとうございます。
url,username,passwordをもう一度確認しましたが、間違いはないようです。
23-25行のみを変更すれば良いのですよね?
あ!?
urlはそのままにして、変更する箇所はusername,passwordのみでやってみてください。
サービス資格情報のurlはパラメータが不足しているので、サービス資格情報のurlをそのまま貼り付けただけでは動きません。