Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away