Как ускорить время обработки AWS Transcribe?

1

У меня есть 6-секундная аудиозапись (ar-01.wav) в формате wav. Я хочу, чтобы транскрибировать аудиофайл в текст, используя службы amazon. Для этого я создал ведро по имени 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
    Почему время является проблемой для вас? Это проблема, если n-секундный клип обрабатывается дольше, чем n-секундный?
  • 0
    Предоставляет ли AWS какие-либо гарантии того, насколько быстро файл будет обработан? Они могут показывать вам новый экземпляр где-то, что занимает несколько секунд, иначе вашему файлу придется ждать в очереди, прежде чем его можно будет обработать. Вот почему API основан на заданиях, а не на синхронном API с немедленным возвратом.
Показать ещё 5 комментариев
Теги:
amazon-web-services
amazon-s3
boto3

1 ответ

0

Для меня AWS Transcribe занял 20 минут, чтобы расшифровать 17 минутный файл. Одна из возможных идей - разделить аудиофайл на куски, а затем использовать многопроцессорную обработку с 16 ядрами в EC2, как экземпляр 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 ядрами для одновременной записи, сопоставляя вашу функцию транскрипции (transcribe.start_transcription_job) для каждого из TranscriptionJobName и job_uri:

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())
  • 0
    Проект, который я пытался остановить, был остановлен из-за нехватки времени. Я попробую и надеюсь, что смогу перезапустить свой проект, если решение будет работать! Я скоро опубликую результат.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню