📣

Google Cloud Text-to-Speechは変な文字の並びになるとたまにバグる

2023/03/06に公開

OCRで画像を文字認識してGoogle Cloud Text-to-Speechにかませて音声データを生成すると、
文字数制限とかには引っかかってないのに定期的にエラーレスポンスが返ってきてた。

{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT"
  }
}

どうやらたまたまOCRの精度が悪くて記号多めで読み上げが辛そうなテキストになると
たまにRequest contains an invalid argument.なるエラーが出力されるらしい。

sample.txt(適当に作った読み上げるには辛そうなテキスト)

{`{'_?*}*{{~=)=()(&)#"$%、あsふぁdsjgふぉああgf
@☻fdさgふぁmS,ふぁsがえgふぁsふぁ「」あfだ
¥43¥¥^~r32rfsad,fda/fdsaaj@[@fasにゃ@<imoopa34t4wtfq#$%&'U()IO
¥43¥¥¥43¥¥¥43¥¥¥_03432432423{`{'_?*}*{{~=)=()(&)#"$%&'())('&%$#"$%&'()=`{}_*`?>+`*?{`{'_?*}*{{~=)=()(&)#"$%&'())('&%$#"$%&'()=`{}_*`?>+`*?{`{'_?*}*{{~=)=()(&)#"$%&'())('&%$#"$%&'()=`{}_*`?>+`*?{`{'_?*}*{{~=)=()(&)#"$%&'())('&%$#"$%&'()=`{}_*`?>+43¥¥¥43¥¥¥43¥¥¥43¥¥¥43¥¥¥43¥¥¥43¥¥¥43¥¥¥43¥¥¥43¥¥¥43¥¥¥43¥¥
fdsagaga48u||||fsavfdsaP{`)UPOJOIRUGIOSPJKL{`+}*S
{`{'_?*}*{{~=)=()(&)#"$%&'())('&%$#"$%&'()=`{}_*`?>+`*?+><LP`*+><MJKIOP`PLKJKL+
()’&)(%’(%()={`}*_?<L+KNHUYRE&%'&(`P}*_}}*P{~=)(&%#”#$%&’()P+`*+?<UG'&F$ED&%TVBILOM+L)I()'&('$&']}{{{_*}

test.py

with open("sample.txt", "r", encoding="utf-8") as f:
    text = f.read()
client = texttospeech.TextToSpeechClient()
synthesis_input = texttospeech.SynthesisInput(text=text)

voice = texttospeech.VoiceSelectionParams(
    language_code="ja-JP",
    name="ja-JP-Neural2-C",
)
audio_config = texttospeech.AudioConfig(
    audio_encoding=texttospeech.AudioEncoding.MP3
)
response = client.synthesize_speech(
    input=synthesis_input, voice=voice, audio_config=audio_config
)
with open("audio.mp3", "wb") as out:
    out.write(response.audio_content)

ただし、同じテキストでも2分割して2回送信した上で音声データを結合してあげるとエラーにならなかったり、VoiceTypeをいじったら解消されたり発動条件はよくわからなかった。

Discussion