Edited at

GCPと連携してPepperに音声ファイル分析機能を搭載

More than 1 year has passed since last update.


概要

ペッパーの音声認識機能として、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アドレスを入れると実行できます。


speech.py

#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 アトリエスタッフ