##概要
ペッパーの音声認識機能として、Speech Recoボックスがありますが、これで聞き分けられるのは、事前に設定しておいた文字列だけです。
そこで、GCP(Google Cloud Platform)のSpeech APIという音声認識APIとペッパーを提携して、ペッパーの音声認識機能を拡張してみたいと思います。
今回はそれの前段階として、日本語の音声ファイルをテキストに起こし、それをペッパーに喋らせるというものを作りました。ペッパーに録音もさせるのは次回、やってみようと思います。
※当記事のコードは、PythonでCloud Speech APIを叩いて音声をテキスト化をpepperで動くように書き換えたものです。
###PythonSDK
PythonSDK(PythonだけでPepperの開発が出来るSDK)を使って開発しています。PythonSDKの導入は↓
https://qiita.com/kyohara/items/ae0dd0f57413caa90674
などをご覧ください。
##ソースコード
音声ファイル名(日本語が入ってる)、APIKey、ペッパーのIPアドレスを入れると実行できます。
#coding:utf8
import base64
from googleapiclient import discovery
import httplib2
from naoqi import ALProxy #pepperのライブラリを使うため
#ペッパーの接続情報
pepperIP = "YourIPAddress"
#APIキーを設定
key = "YourAPIkey"
#音声を保存するファイル名
WAVE_OUTPUT_FILENAME = "sample.wav"
#インスタンスを生成
tts = ALProxy("ALTextToSpeech",pepperIP,9559)
#APIのURL情報
DISCOVERY_URL = ('https://{api}.googleapis.com/$discovery/rest?'
'version={apiVersion}')
#APIの情報を返す関数
def get_speech_service():
http = httplib2.Http()
return discovery.build(
'speech', 'v1', http=http, discoveryServiceUrl=DISCOVERY_URL, developerKey=key)
def SpeechAPI():
#音声ファイルを開く
with open(WAVE_OUTPUT_FILENAME, 'rb') as speech:
speech_content = base64.b64encode(speech.read())
#APIの情報を取得して、音声認識を行う
service = get_speech_service()
service_request = service.speech().recognize(
body={
'config': {
'encoding': 'LINEAR16',
'sampleRateHertz': 44100,
'languageCode': 'ja-JP', #日本語に設定
'enableWordTimeOffsets': 'false',
},
'audio': {
'content': speech_content.decode('UTF-8')
}
})
#SpeechAPIによる認識結果を保存
response = service_request.execute()
#認識した日本語をペッパーにしゃべらせる。
for i in response["results"]:
tts.say(i["alternatives"][0]["transcript"].encode("utf-8"))
if __name__ == "__main__":
SpeechAPI()
##まとめ
今回は外部APIと連携してPepperに音声ファイルからテキストを取得する機能を搭載しました。やっぱりAPIを使うと出来ることがだいぶ広がりそうです。
次回以降、ペッパーのマイクを用いて、音声ファイルを生成して、それをテキストに起こすというのをやってみたいと思います。
by アトリエスタッフ