Ошибка в коде относительно разделения каналов с использованием AWS Transcribe - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь разработать лямбду, которая будет сортировать выходной файл AWS Transcribe .JSON. Эта лямбда удалит все ненужные данные и объединит все слова вместе для отдельного канала.

Я следую руководству от парня по имени Srce Cde, который создает такую ​​лямбду, но использует разделение спикеров вместо каналаразделение.

Это проект аудио анализа, над которым я работаю с использованием AWS. Вызовы загружаются в корзину S3, лямбда запускает задание транскрибирования, вывод транскрибирования направляется в другое ведро S3. Затем этот сегмент S3 запускает окончательную лямбду, которая отделяет каналы от вызова.

Я попробовал следующий код:

import json
import boto3

def lambda_handler(event, context):
    if event:
        s3 = boto3.client("s3")
        s3_object = event["Records"][0]["s3"]
        bucket_name = s3_object["bucket"]["name"]
        file_name = s3_object["object"]["key"]
        file_obj = s3.get_object(Bucket=bucket_name, Key=file_name)
        transcript_result = json.loads(file_obj["Body"].read())

        segments = transcript_result["results"]["channel_labels"]
        items = transcript_result["results"]["items"]

        speaker_text = []
        flag = False
        speaker_json = {}
        for no_of_speaker in range(segments["channels"]):
            for word in items:
                for seg in segments["items"]:
                    if seg["channel_label"] == "ch_"+str(no_of_speaker):
                        end_time = seg["end_time"]
                        if "start_time" in word:
                            if seg["items"]:
                                for seg_item in seg["items"]:
                                    if word["end_time"] == seg_item["end_time"] and word["start_time"] == seg_item["start_time"]:
                                        speaker_text.append(word["alternatives"][0]["content"])
                                        flag = True
                        elif word["type"] == "punctuation":
                            if flag and speaker_text:
                                temp = speaker_text[-1]
                                temp += word["alternatives"][0]["content"]
                                speaker_text[-1] = temp
                                flag = False
                                break

            speaker_json["ch_"+str(no_of_speaker)] = ' '.join(speaker_text)
            speaker_text = []
    print(speaker_json)
    s3.put_object(Bucket="aws-mrp-speaker-separation", Key=file_name, Body=json.dumps(speaker_json))

    return {
        'statusCode': 200,
        'body': json.dumps('Speaker transcript seperated successfully!')
}

Я ожидал бы, что вывод разделит транскриптпо каналам. Однако я получаю следующую ошибку:

Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 19, in lambda_handler
    for no_of_speaker in range(segments["channels"]):```
...