当前位置: 首页 > 知识库问答 >
问题:

如何加快AWS转录的处理时间?

萧渝
2023-03-14

我有6秒钟的音频记录(AR-01.wav),格式为WAV。我想转录音频文件到文本使用亚马逊服务。为此,我创建了一个名为test-voip的bucket,并将音频文件上传到bucket。当我试图将语音转换为文本时,一个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,提取所需信息的时间就可以忽略不计了。如何加快转录的过程,或者有没有其他更好的方法?

共有1个答案

公西博实
2023-03-14

对我来说,AWS转录需要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个核同时转录的多重处理,为每个转录JobName和Job_URI映射转录函数(transcrbe.start_transcruption_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())
 类似资料:
  • 我正在探索AWS Kinesis的数据处理要求,该要求用基于流的方法取代旧的批处理ETL处理。 该项目的关键要求之一是在以下情况下重新处理数据的能力: 发现并修复错误,然后重新部署应用程序。数据需要从一开始就重新处理 这里很好地记录了Kafka-https://cwiki.apache.org/confluence/display/KAFKA/Kafka流数据(重新)处理场景的场景。 我在Kine

  • 例如,RabbitMQ有一种设置队列限制的方法。如果达到这一限制,来自出版商的新消息将被拒绝,从而从消费者向生产者施加某种背压。(因为队列中的消息意味着不由使用者处理)。 有没有一种方法可以确保像Kinesis这样的代理的这种行为,在这种行为中,允许消费者拉取消息,而不是像RabbitMQ那样的代理推给他们。 在动觉方面,与Kafka类似,消费者的状态、消费抵消等都保存在另一个实体中,动觉的Dyn

  • 我正在使用AWS Sagemaker部署在Sagemaker之外培训的语音模型。我能够将我的模型转换为Sagemaker能够理解的东西,并将其部署为endpoint。问题是Sagemaker直接加载模型并调用。预测得到推论。我无法确定在部署的模型中可以在何处添加预处理函数。建议使用AWS Lambda或其他服务器进行预处理。有没有什么方法可以将复杂的预处理(不能通过简单的Scikit、类似熊猫的框

  • 我们正在使用AWS SAM构建API。在CodeStar中的Lambda节点模板上构建。事情一直进展顺利,直到我们的模板。yml文件变得太大了。每当推送代码并且CloudFormation开始执行更改集并为SAMendpoint创建堆栈时,它就会失败并回滚到上一次成功构建。 似乎我们有太多的资源超过了每个堆栈的云形成限制。 我尝试拆分模板文件,并编辑构建规范来处理两个模板文件,执行两个AWS云形成

  • 我正在使用spring-kafka“2.2.7.RELEASE”来创建一个批处理消费者,并且我正在尝试了解当我的记录处理时间超过 max.poll.interval.ms 时消费者重新平衡是如何工作的。 这是我的配置。 这是我的出厂设置。 我添加了自定义消费者监听器,如下所示。 现在我期望消费者群体能够重新平衡,因为处理时间超过 max.poll.interval.ms 但我没有看到任何这样的行为

  • 问题内容: 既然maven-3确实放弃了对快照工件的false的支持,看来您确实需要使用带有时间戳的SNAPSHOTS。特别是在内部确实使用maven 3的m2eclipse似乎受到它的影响,当SNAPSHOTS不是唯一的时,update-snapshots无法正常工作。 将所有快照设置为uniqueVersion=false之前,这似乎是最佳实践 现在,切换到带有时间戳的版本似乎没什么大问题,毕