Транскрипция звуковых субтитров - C ++

Я работаю над проектом, который среди других задач, связанных с видео, должен в конечном итоге быть способным извлекать аудио из видео и применять к нему какое-то распознавание речи и получать транскрибированный текст того, что говорится на видео. В идеале он должен выводить субтитры в каком-то формате, чтобы текст был привязан к определенной точке видео.

Я думал об использовании Microsoft Speech API (он же SAPI). Но, насколько я мог видеть, пользоваться им довольно сложно. Очень немногие примеры, которые я нашел для распознавания речи (большинство из них для преобразования текста в речь, что намного проще), работали не очень хорошо (они ничего не распознают). Например, этот: http://msdn.microsoft.com/en-us/library/ms717071%28v=vs.85%29.aspx

В некоторых примерах используется так называемые файлы грамматики, которые должны определять слова, которые ожидает распознаватель, но, поскольку я не обучил распознавание речи Windows полностью, я думаю, что это может искажать результаты.

Итак, мой вопрос ... какой инструмент лучше всего подходит для подобных ситуаций? Не могли бы вы предоставить как платные, так и бесплатные варианты? Что ж, лучший «бесплатный» (поскольку он поставляется с Windows) вариант, я считаю, это SAPI, все остальные должны быть платными, но если они действительно хороши, это может того стоить. Также было бы замечательно, если у вас есть хорошие учебники по использованию SAPI (или другого API) в контексте, подобном этому.


person petersaints    schedule 28.08.2011    source источник


Ответы (2)


В целом это большой вопрос!

Проблема с любой системой распознавания речи в том, что она лучше всего работает после тренировки. Ему нужен контекст (какие слова ожидать) и какой-то тест звука (как звучит каждый голос). Это может быть возможно в некоторых случаях, например, в телесериале, если вы хотите потратить часы на речь, отведенную для каждого персонажа, для ее тренировки. Хотя там много работы. Для чего-то вроде фильма, вероятно, нет никакой надежды обучить распознавателя, если вы не сможете овладеть актерами.

Большинство кинокомпаний и телекомпаний просто нанимают медиа-компании для расшифровки субтитров либо на основе прямой транскрипции с использованием человека-оператора, либо на основе преобразования сценария. Тот факт, что им все еще нужны люди, участвующие в этих огромных операциях, говорит о том, что автоматизированные системы еще не готовы к этому.

В видео есть множество вещей, которые усложняют вашу жизнь, в значительной степени охватывающие огромные массивы текущих исследований в области речевых технологий:

-> Несколько динамиков -> «Идентификация говорящего» (вы можете различать символы? Кроме того, субтитры обычно имеют разный цвет текста для разных динамиков)

-> Несколько одновременных выступающих -> "Проблема коктейля" - можете ли вы разделить два голосовых компонента и расшифровать оба?

-> Фоновый шум -> Вы можете выбрать речь из любого саундтрека / фоли / взрывающихся вертолетов.

Речевой алгоритм должен быть чрезвычайно надежным, поскольку разные персонажи могут иметь разный пол / акценты / эмоции. Насколько я понимаю, после некоторого обучения вы сможете получить одного оратора, но попросить одну программу, чтобы охватить их всех, может быть непросто!

--

Я не знаю ни одного формата "субтитров". Я бы посоветовал сохранить изображение текста, используя шрифт типа Tiresias Screenfont, который конкретно разработан для удобочитаемости в этих обстоятельствах, и использовать таблицу поиска для перекрестных ссылок на изображения с временным кодом видео (помня, что NTSC / PAL / Cinema используют разные форматы синхронизации).

--

Существует множество проприетарных систем распознавания речи. Если вам нужно самое лучшее, вы, вероятно, захотите лицензировать решение у одного из таких больших парней, как Nuance. Если вы хотите, чтобы вещи оставались бесплатными, университеты RWTH и CMU собрал вместе несколько решений. Я понятия не имею, насколько они хороши и насколько хорошо они подходят для решения этой проблемы.

--

Единственное решение, которое я могу придумать, похожее на то, к чему вы стремитесь, - это субтитры, которые вы можете получить на новостных каналах здесь, в Великобритании, «Live Closed Captioning». Поскольку он жив, я предполагаю, что они используют какую-то систему распознавания речи, обученную читателю (хотя она может быть не обучена, я не уверен). За последние несколько лет ситуация улучшилась, но в целом все еще довольно плохо. Самая большая проблема, с которой он борется, - это скорость. Диалог обычно происходит очень быстро, поэтому с живыми субтитрами возникает дополнительная проблема, заключающаяся в том, чтобы все было сделано вовремя. Живые субтитры довольно часто остаются позади, и им приходится пропускать много контента, чтобы наверстать упущенное.

Придется ли вам с этим справиться, зависит от того, будете ли вы использовать субтитры для «живого» видео или можете ли вы его предварительно обработать. Чтобы справиться со всеми дополнительными сложностями, описанными выше, я предполагаю, что вам нужно будет его предварительно обработать.

--

Как бы я ни ненавидел цитировать большую букву W, здесь есть кладезь полезных ссылок !

Удачи :)

person Speedy    schedule 28.08.2011

Это относится к категории диктовки, а это очень большая словарная задача. Такие продукты, как Dragon Naturally Speaking, потрясающе хороши и имеют интерфейс SAPI для разработчиков. Но это не так-то просто.

Обычно диктофон представляет собой один динамик, и лучшие продукты автоматически адаптируются к этому динамику, тем самым улучшая лежащую в основе акустическую модель. У них также есть сложное языковое моделирование, которое служит для ограничения проблемы в любой момент, ограничивая так называемую запутанность словарного запаса. Это причудливый способ сказать, что система выясняет, о чем вы говорите, и, следовательно, какие типы слов и фраз, вероятнее всего, появятся или не появятся дальше.

Было бы интересно применить действительно хорошую систему диктовки к вашим записям и посмотреть, насколько хорошо она справляется. Мое предложение для платной системы - получить Dragon Naturally Speaking от Nuance и получить API разработчика. Я считаю, что это предоставляет интерфейс SAPI, преимущество которого заключается в том, что вы можете переключаться между речью Microsoft или любым другим механизмом ASR, поддерживающим SAPI. IBM была бы еще одним поставщиком, на которого стоит обратить внимание, но я не думаю, что вы добьетесь большего успеха, чем Dragon.

Но это не сработает! После всей работы по интеграции движка ASR вы, вероятно, обнаружите, что вы получаете довольно высокую частоту ошибок (возможно, половину). Это может быть связано с несколькими серьезными проблемами при выполнении этой задачи:

1) несколько динамиков, что ухудшит акустическую модель и адаптацию. 2) фоновая музыка и звуковые эффекты.
3) смешанная речь - люди переговариваются друг с другом. 4) отсутствие хорошей языковой модели для поставленной задачи.

Во-первых, если бы у вас был способ выделить каждого актера на отдельный трек, это было бы идеально. Но нет надежного способа автоматического разделения говорящих, который был бы достаточно хорош для распознавания речи. Если бы каждый динамик был на совершенно разной высоте звука, вы могли бы попробовать определение высоты тона (для этого есть какое-то бесплатное программное обеспечение) и разделить его на основе этого, но это сложная задача, подверженная ошибкам.) Лучше всего было бы вручную редактировать динамики. отдельно, но вы можете просто вручную расшифровать речь на этом этапе! Если бы вы могли расположить актеров на разных дорожках, вам нужно было бы запускать ASR, используя разные профили пользователей.

Что касается музыки (2), вам нужно либо надеяться на лучшее, либо пытаться отфильтровать его. Речь имеет более ограниченную полосу пропускания, чем музыка, поэтому вы можете попробовать полосовой фильтр, который ослабляет все, кроме полосы голоса. Вы бы хотели поэкспериментировать с обрезкой, но я полагаю, что от 100 Гц до 2-3 кГц сохранят разборчивость речи.

Для (3) решения нет. Механизм ASR должен возвращать оценки достоверности, поэтому в лучшем случае я бы сказал, что если вы можете пометить низкие оценки, вы могли бы затем вернуться и вручную расшифровать эти фрагменты речи.

(4) - сложная задача для логолога. Лучше всего будет поискать существующую языковую модель, созданную для темы фильма. Собственно говоря, поговорите с Nuance или IBM. Может быть, они смогут указать вам правильное направление.

Надеюсь это поможет.

person srf    schedule 30.08.2011
comment
Для (3) на самом деле существует несколько потенциальных подходов к разделению динамиков, например, независимый компонентный анализ. Они просто не так хороши, и объединение их с плохим механизмом распознавания будет способствовать дальнейшим ошибкам. - person Speedy; 30.08.2011
comment
Да, было много попыток разделения говорящих, но я не знаю ничего, что можно было бы запустить автоматически для задачи, подобной описанной выше. Особенно для случаев из трех или более динамиков с микшированием или двух динамиков с одинаковой высотой тона. - person srf; 30.08.2011