gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:07:30 26 4
gpt4 key购买 nike

我有 wav 格式的 6 秒录音 (ar-01.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,提取所需信息的时间就可以忽略不计。如何加快转录过程或有其他更好的方法吗?

最佳答案

对我来说,AWS Transcribe 需要 20 分钟才能转录 17 分钟的文件。一种可能的想法是将音频文件分割成 block ,然后在 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())

关于python - 如何加快 AWS Transcribe 的处理时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51929131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com