Google Speech to Text API を使用しています。タイプ google.cloud.speech_v1.types.RecognizeResponse のオブジェクトを返します。複数のテキスト文字列を返すために繰り返し処理できないため、これは Python ではほとんど使用できないことがわかりました。
これを Python で使用できるようにするための解決策をよく探した後、Stack Overflow で google.protobuf.json_format.MessageToJson() から使用する解決策を見つけました。ただし、以下の関数を実行すると...
def transcribe(self, fp):
transcribed = []
data = fp.read()
speech_content_bytes = base64.b64encode(data)
speech_content = speech_content_bytes.decode('utf-8')
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = self.json_path
os.environ["GCLOUD_PROJECT"] = proj_name
config = {'language_code': 'en-US'}
audio = {'content': data}
client = speech.SpeechClient()
response = client.recognize(config, audio)
print('response is a ' + str(type(response)))
result_json = MessageToJson(response)
print('result_json is a ' + str(type(result_json)))
result_json = json.loads(result_json)
print('now result_json is a ' + str(type(result_json)))
for result in result_json["results"]:
transcribed.append(result["alternatives"][0]["transcript"].upper())
return transcribed
...次の出力が得られます。
response is a <class 'google.cloud.speech_v1.types.RecognizeResponse'>
result_json is a <class 'str'>
now result_json is a <class 'dict'>
ご覧のとおり、google MessageToJson 関数を実行した結果は実際には文字列であり、json.loads 関数を使用して Dict にロードする必要があります。
- MessageToJson 関数が Dict / json オブジェクトではなく文字列を返すのはなぜですか?
- Python で google.cloud.speech_v1.types.RecognizeResponse オブジェクトを操作して文字起こしされたテキストを取得する別の方法はありますか?
Google がこのオブジェクトを返す理由がわかりませんが、これは扱いが非常に困難です。