Не удаётся распознать голос в текст из .wav файла потоком, используя google speech-to-text
Имеются чанки аудиофайла с расширением .wav. Пытаюсь сделать потоковое распознавание голоса в текст. Но в итоге либо вовсе не распознает, либо распознает но совсем некорректно.
import wave
from typing import Tuple
from google.cloud import speech
from google.cloud.speech import RecognitionConfig, StreamingRecognitionConfig
# https://www.slanglabs.in/blog/automatic-speech-recognition-in-python-programs
def read_wav_file(filename) -> Tuple[bytes, int]:
with wave.open(filename, 'rb') as w:
rate = w.getframerate()
frames = w.getnframes()
buffer = w.readframes(frames)
return buffer, rate
def simulate_stream(buffer: bytes, batch_size: int = 4096):
buffer_len = len(buffer)
offset = 0
while offset < buffer_len:
end_offset = offset + batch_size
buf = buffer[offset:end_offset]
yield buf
offset = end_offset
def response_stream_processor(responses):
transcript = ''
for response in responses:
if not response.results:
continue
result = response.results[0]
if not result.alternatives:
continue
transcript = result.alternatives[0].transcript
print(transcript)
return transcript
def google_streaming_stt() -> str:
buffer, rate = read_wav_file("chunk0.wav")
client = speech.SpeechClient()
config = RecognitionConfig(
encoding=RecognitionConfig.AudioEncoding["LINEAR16"],
sample_rate_hertz=rate,
language_code="en-US",
model='video'
)
streaming_config = StreamingRecognitionConfig(
config=config,
interim_results=True
)
audio_generator = simulate_stream(buffer) # chunk generator
requests = (
speech.StreamingRecognizeRequest(audio_content=chunk) for chunk in audio_generator
)
responses = client.streaming_recognize(
config=streaming_config, requests=requests
)
return response_stream_processor(responses)
google_streaming_stt()
Однако, если распознать файл по этой ссылке - все распознает верно. https://cloud.google.com/speech-to-text
Пример чанка - https://sndup.net/5trk