Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Google Cloud API を REST インタフェースから利用するために、 API Key を利用します。 Google Cloud Console から API Key をコピーしましょう。
In [0]:
import getpass
APIKEY = getpass.getpass()
API Discovery Service を利用して Cloud Speech-to-Text API を発見します。 Cloud Speech-to-Text の REST API 仕様は こちら に解説されています。
In [0]:
from googleapiclient.discovery import build
speech_service = build('speech', 'v1p1beta1', developerKey=APIKEY)
音声録音のための関数 record_audio
を定義しましょう。
In [0]:
#@title このセルを実行して record_audio を定義
# Install required libraries and packages
!pip install -qq pydub
!apt-get -qq update
!apt-get -qq install -y ffmpeg
# Define record_audio
import base64
import google.colab
import pydub
from io import BytesIO
def record_audio(file_id, framerate=16000, channels=1, file_format='flac'):
# Record webm file from Colaboratory.
audio = google.colab._message.blocking_request(
'user_media',
{
'audio': True,
'video': False,
'duration': -1
},
timeout_sec=600)
# Convert web file into in_memory file.
mfile = BytesIO(base64.b64decode(audio[audio.index(',')+1:]))
# Store webm file locally.
with open('{0}.webm'.format(file_id), 'wb') as f:
mfile.seek(0)
f.write(mfile.read())
# Open stored web file and save it as wav with sample_rate=16000
output_file = '{0}.{1}'.format(file_id, file_format)
_ = pydub.AudioSegment.from_file('{0}.webm'.format(file_id), codec='opus')
_ = _.set_channels(channels)
_.set_frame_rate(framerate).export(output_file, format=file_format)
return output_file
record_audio
を実行して音声を録音しましょう。
In [0]:
audio_filename = record_audio('ja-sample', framerate=16000, channels=1)
録音結果を確認しましょう。
In [0]:
from IPython.display import Audio
Audio(audio_filename, rate=16000)
Cloud Speech-to-Text API に入力する情報を定義します.
In [0]:
from base64 import b64encode
from json import dumps
languageCode = 'en-US' #@param ["en-US", "ja-JP", "en-IN"]
model = 'default' #@param ["command_and_search", "phone_call", "video", "default"]
入力する音声データを定義します。
In [0]:
with open(audio_filename, 'rb') as audio_file:
content = b64encode(audio_file.read()).decode('utf-8')
my_audio = {
'content': content
}
RecognitionConfig を定義します。
In [0]:
my_recognition_config = {
'encoding': 'FLAC',
'sampleRateHertz': 16000,
'languageCode': languageCode,
'model': model
}
recognize method のリクエストメッセージの body を定義します。
In [0]:
my_request_body={
'audio': my_audio,
'config': my_recognition_config,
}
recognize method を実行します。
In [0]:
response = speech_service.speech().recognize(body=my_request_body).execute()
recognize method のレスポンスを確認します。
In [0]:
response
In [0]:
for r in response["results"]:
print('認識結果: ', r['alternatives'][0]['transcript'])
print('信頼度: ', r['alternatives'][0]['confidence'])
RecognitionConfig に enableWordTimeOffsets
の設定を追加します。
In [0]:
my_recognition_config = {
'encoding': 'FLAC',
'sampleRateHertz': 16000,
'languageCode': languageCode,
'model': model,
'enableWordTimeOffsets': True
}
my_request_body={
'audio': my_audio,
'config': my_recognition_config,
}
recognize method を実行します。
In [0]:
response = speech_service.speech().recognize(body=my_request_body).execute()
recognize method のレスポンスを確認します。
In [0]:
response
In [0]:
for r in response["results"]:
print('認識結果: ', r['alternatives'][0]['transcript'])
print('信頼度: ', r['alternatives'][0]['confidence'], "\n")
for r in response["results"][0]['alternatives'][0]["words"]:
print("word: ", r["word"])
print("startTime: ", r["startTime"])
print("endTime: ", r["endTime"], "\n")
1. こちらを参考にして、単語レベルの信頼度を見てみましょう
API Discovery Service を利用して Cloud Text-to-Speech API を発見します。 Cloud Text-to-Speech の REST API 仕様は こちら に解説されています。
In [0]:
import textwrap
from googleapiclient.discovery import build
service = build('texttospeech', 'v1beta1', developerKey=APIKEY)
テキスト読み上げ合成のために Cloud Text-to-Speech API で使用できる音声を一覧表示します。なお、 languageCode
はこちらを参考にしてください。
In [0]:
response = service.voices().list(
languageCode="ja_JP",
).execute()
In [0]:
for voice in response['voices']:
print(voice)
text.synthesize メソッドを使用すると、単語や文を自然な人間の音声の base64 でエンコードされた音声データに変換できます。このメソッドは、入力を生のテキストまたは音声合成マークアップ言語(SSML)として受け入れます。
In [0]:
source_language = "ja_JP" #@param {type: "string"}
source_sentence = "Google Cloud Text-to-Speech \u3092\u4F7F\u3046\u3068\u3001\u81EA\u7136\u306A\u4F1A\u8A71\u97F3\u58F0\u3092\u5408\u6210\u3067\u304D\u307E\u3059\u3002" #@param {type:"string"}
audio_encoding = 'OGG_OPUS' #@param ['OGG_OPUS', 'LINEAR16', 'MP3']
voice_gender = 'FEMALE' #@param ['FEMALE', 'MALE', 'NEUTRAL', 'SSML_VOICE_GENDER_UNSPECIFIED']
textwrap.wrap(source_sentence)
voice_name = 'ja-JP-Wavenet-A' #@param {type: "string"}
In [0]:
response = service.text().synthesize(
body={
'input': {
'text': source_sentence,
},
'voice': {
'languageCode': source_language,
'ssmlGender': voice_gender,
'name': voice_name,
},
'audioConfig': {
'audioEncoding': audio_encoding,
},
}
).execute()
合成した音声を確認しましょう
In [0]:
import base64
from IPython.display import Audio
Audio(base64.b64decode(response['audioContent']))
1. 日本語のテキストを Standard モデルで音声合成してみましょう。
2. 英語のテキストを様々なモデルで音声合成してみましょう。