如何加快AWS Transcribe的处理时间?

时间:2018-08-20 10:50:07

标签: python amazon-web-services amazon-s3 boto3

我有ar-01.wav格式的6秒钟录音(wav)。我想使用亚马逊服务将音频文件转录为文本。为此,我创建了名称为test-voip的存储桶,并将音频文件上传到存储桶。当我尝试将语音转换为文本时,6秒钟的音频需要13.12秒。这是我的代码段

session = boto3.Session(aws_access_key_id=aws_access_key_id, 
aws_secret_access_key=aws_secret_access_key)
transcribe = session.client('transcribe', region_name='us-east-1')
job_name = "audio_text_trail9"
job_uri = "https://test-voip.s3.amazonaws.com/ar-01.wav"
transcribe.start_transcription_job(
    TranscriptionJobName=job_name,
    Media={'MediaFileUri': job_uri},
    MediaFormat='wav',
    LanguageCode='en-US',
    MediaSampleRateHertz=16000
    )

while True:
    status = transcribe.get_transcription_job(TranscriptionJobName=job_name)
    if status['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED', 'FAILED']:
        break
print("converted to text")
myurl = status['TranscriptionJob']['Transcript']['TranscriptFileUri']
print(myurl)
Text_Data = (requests.get(myurl).json())['results']['transcripts'][0]['transcript']

print(Text_data)

在这里,我的代码工作正常,即使在嘈杂的音频上,准确性也很棒,但是时间消耗太高。我在哪里犯了错误,是什么拖延了这么多的时间来转录?一旦获得转录的json,提取所需信息的时间就可以忽略不计了。如何加快转录过程,或者还有其他更好的方法吗?

2 个答案:

答案 0 :(得分:0)

对我来说,AWS Transcribe花了20分钟来转录一个17分钟的文件。一种可能的想法是将音频文件分成多个块,然后在EC2上使用具有16个内核的多处理程序,例如g3.4xlarge实例。

将音频文件分为16个部分,静默阈值为-20,然后转换为.wav:

$ sudo apt-get install mp3splt
$ sudo apt-get install ffmpeg
$ mp3splt -s -p th=-20,nt=16 splitted.mp3
$ ffmpeg -i splitted.mp3 splitted.wav 

然后,将多重处理与16个内核同时进行转录,为TranscriptionJobName和job_uri中的每一个映射您的转录函数(transcribe.start_transcription_job):

import multiprocessing

output=[]
data = range(0,16)

def f(x):
    job_name = "Name"+str(x)
    job_uri = "https://s3.amazonaws.com/bucket/splitted"+str(x)+".wav"
    transcribe.start_transcription_job(
    TranscriptionJobName=job_name,
    Media={'MediaFileUri': job_uri},
    MediaFormat='wav',
    LanguageCode='pt-BR',
    OutputBucketName= "bucket",
    MediaSampleRateHertz=8000,
    Settings={"MaxSpeakerLabels": 2,
      "ShowSpeakerLabels": True})
    while True:
        status = transcribe.get_transcription_job(TranscriptionJobName=job_name)
        if status['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED','FAILED']:
            break

def mp_handler():
    p = multiprocessing.Pool(16)
    r=p.map(f, data)
    return r

if __name__ == '__main__':
    output.append(mp_handler())

答案 1 :(得分:0)

我研究了没有运气的字幕速度保证

this forum post(需要aws帐户)中,发帖人进行了基准测试,结果如下:

  • 一个10分钟的剪辑大约花了5分钟
  • 40分钟的剪辑大约需要17分钟
  • 一个2小时的文件耗时36分钟

Amazon官方消息来源指出:“目前,对于30秒以上的音频,转录速度得到了更好的优化。当音频文件长度变长时,您将开始看到更好的处理时间与音频持续时间的比率大约需要2分钟或更长时间。话虽如此,我们正在努力提高整体转录速度”

我希望它对研究人员有帮助