将大型WAV文件转换为python中的文本

时间:2019-09-19 07:46:39

标签: python speech-recognition speech-to-text

我已经尝试使用此代码将大型 wav 文件转换为文本

import speech_recognition as sr
r = sr.Recognizer()

hellow=sr.AudioFile('hello_world.wav')
with hellow as source:
    audio = r.record(source)
try:
    s = r.recognize_google(audio)
    print("Text: "+s)
except Exception as e:
    print("Exception: "+str(e))

但是它转换得并不准确,我觉得这是“美国”口音的原因。 请告诉我如何准确转换整个 wav 大文件。

1 个答案:

答案 0 :(得分:0)

Google对文本的语音非常有效,请尝试以下链接,

https://cloud.google.com/speech-to-text/

您可以选择语言(以美国英语为例),也可以上传文件。

像@bigdataolddriver一样,尚无法实现100%的准确性,它将价值数百万美元。

Google语音文本具有三种类型的API

同步,异步和流式传输,其中异步允许您进行约480分钟的音频转换,而其他人则只能进行约1分钟的转换。以下是执行转换的示例代码。

filepath = "~/audio_wav/"     #Input audio file path
output_filepath = "~/Transcripts/" #Final transcript path
bucketname = "callsaudiofiles" #Name of the bucket created in the step before

# Import libraries
from pydub import AudioSegment
import io
import os
from google.cloud import speech
from google.cloud.speech import enums
from google.cloud.speech import types
import wave
from google.cloud import storage

语音到文本支持带有LINEAR16或MULAW编码音频的wav文件。

下面是使用代码获取帧频和频道的代码。

def frame_rate_channel(audio_file_name):
    with wave.open(audio_file_name, "rb") as wave_file:
        frame_rate = wave_file.getframerate()
        channels = wave_file.getnchannels()
        return frame_rate,channels

和下面的代码是异步转换。

def google_transcribe(audio_file_name):

    file_name = filepath + audio_file_name

    # The name of the audio file to transcribe

    frame_rate, channels = frame_rate_channel(file_name)

    if channels > 1:
        stereo_to_mono(file_name)

    bucket_name = bucketname
    source_file_name = filepath + audio_file_name
    destination_blob_name = audio_file_name

    upload_blob(bucket_name, source_file_name, destination_blob_name)

    gcs_uri = 'gs://' + bucketname + '/' + audio_file_name
    transcript = ''

    client = speech.SpeechClient()
    audio = types.RecognitionAudio(uri=gcs_uri)

    config = types.RecognitionConfig(
    encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=frame_rate,
    language_code='en-US')

    # Detects speech in the audio file
    operation = client.long_running_recognize(config, audio)
    response = operation.result(timeout=10000)

    for result in response.results:
        transcript += result.alternatives[0].transcript

    delete_blob(bucket_name, destination_blob_name)
    return transcript

这就是将它们写入文件的方式

def write_transcripts(transcript_filename,transcript):
    f= open(output_filepath + transcript_filename,"w+")
    f.write(transcript)
    f.close()

请让我知道是否需要进一步的澄清。