Формат AWS Transcribe Audio Identification

Я искал это решение, не смог найти ничего разумного в том, что AWS в настоящее время имеет в своем пользовательском интерфейсе, поэтому придумал мой в laravel и бросил его здесь, чтобы помочь любому, кто, надеюсь, ищет это.

1 ответ

      public function convertTextToSpeakers($response)
    {
        $segments = $response['results']['speaker_labels']['segments'];
        $items    = $response['results']['items'];
        $result   = [];

        foreach ($items as $key => $item) {

            if (!isset($item['start_time'])) {

                $prev_item = $items[$key - 1];

                if ($prev_item) {

                    $item['start_time'] = $prev_item['start_time'];
                    $item['end_time']   = $prev_item['end_time'];
                    $items[$key]        = $item;
                }
            }
        }

        foreach ($segments as $key => $segment) {

            $has_data = true;

            $temp_key = $key;

            while ($has_data) {

                $temp_key++;

                $next_segment = $segments[$temp_key] ?? null;

                if ($next_segment && $next_segment['speaker_label'] == $segment['speaker_label']) {

                    $itemsData = array_merge($segment['items'], $next_segment['items']);

                    $segment['items'] = $itemsData;

                    unset($segments[$temp_key]);

                    $segments[$key] = $segment;

                } else {

                    $has_data = false;
                }
            }

        }

        $items = collect($items);

        $segments = collect($segments)->sortBy('start_time');

        foreach ($segments as $segment) {

            $text = '';

            $segmentItems = collect($segment['items'])->sortBy('start_time');

            foreach ($segmentItems as $seg_item) {

                $words = $items->where('start_time', $seg_item['start_time'])
                    ->where('end_time', $seg_item['end_time']);

                foreach ($words as $word) {

                    $text .= $word['alternatives'][0]['content'];
                }

                $text .= " ";
            }

            $result[] = [
                'speaker' => $segment['speaker_label'],
                'text'    => $text,
            ];
        }

        return $result;
    }
Другие вопросы по тегам