我有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
,提取所需信息的时间就可以忽略不计了。如何加快转录的过程,或者有没有其他更好的方法?
对我来说,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之前,这似乎是最佳实践 现在,切换到带有时间戳的版本似乎没什么大问题,毕