본문 바로가기

TIL

Google Speech-to-Text API Response를 JSON으로 저장하는 방법

반응형

Google 음성인식 API를 사용하기로 결정한 다음 여러 자료를 찾아본 다음 파일을 API로 보내면 Response를 받을 수 있다.

파이썬 클라이언트 라이브러리를 이용해서 리스폰스를 받았는데 이건 일단 메모리 상에 올라가 있는 것이고 파일로 저장하려고 보니 따로 포팅하는 자체 함수가 전혀 없다. (파이썬 기준)

Google은 자체적으로 Protocol Buffer라는 프로토콜을 이용해서 네트워크 통신을 하는 것으로 보인다. 본인들이 만든 API에도 이를 이용하고 있으며, API 결과로 돌아오는 Speech.RecognizeResponse는 이 Protocol Buffer의 래퍼쯤으로 생각하면 된다.

이 protocol buffer의 내용이 Speech.RecognizeResponse._pb에 존재한다.

Protocol Buffer도 물론 구글 측에서 만든 라이브러리가 존재하며 이를 바로 JSON으로 바꿔줄 수 있다.

아래는 리퀘스트를 날려서 리스폰스를 받고 그것을 JSON으로 바꿔주는 예시 코드다.

client = speech.SpeechClient()

encoding = speech.RecognitionConfig.AudioEncoding.FLAC
if os.path.splitext(speech_file)[1] == ".wav":
    encoding = speech.RecognitionConfig.AudioEncoding.LINEAR16
with io.open(speech_file, "rb") as audio_file:
    content = audio_file.read()

audio = speech.RecognitionAudio(content=content)
config = speech.RecognitionConfig(
    encoding=encoding,
    sample_rate_hertz=32000,
    language_code="ja-JP",
    max_alternatives=3,
    enable_word_time_offsets=True,
    enable_automatic_punctuation=True,
    enable_word_confidence=True,
)

response = client.recognize(config=config, audio=audio)
#print(speech_file, "Recognition Done")
return response

response = transcribe_file(audio_path)

from google.protobuf.json_format import MesageToJson
response_json = MessageToJson(response._pb)

아래는 노트북에서 실행한 결과의 일부다

반응형