Определение сегментов, когда человек говорит? - PullRequest
9 голосов
/ 27 ноября 2011

Кто-нибудь знает (предпочтительно C # .Net) библиотеку, которая позволила бы мне находить в голосовых записях те сегменты, в которых говорит конкретный человек?

Ответы [ 2 ]

20 голосов
/ 28 ноября 2011

Это возможно с помощью инструментария SHOUT: http://shout -toolkit.sourceforge.net / index.html

Он написан на C ++ и протестирован для Linux, но также должен работать подWindows или OSX.

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

  1. Создание звукового файла PCM без заголовка 16 кГц, 16 бит, little-endian, mono.Я использую ffmpeg для создания необработанных файлов: ffmpeg -i [INPUT_FILE] -vn -acodec pcm_s16le -ar 16000 -ac 1 -f s16le [RAW_FILE] Префикс данных без заголовка с размером файла в кодировке с прямым порядком байтов (4байт).Убедитесь, что файл имеет расширение .raw, так как shout_cluster определяет тип файла на основе расширения.

  2. Выполните сегментацию речи / не речи: . / Shout_segment -a [RAW_FILE] -ams [SHOUT_SAD_MODEL] -mo [SAD_OUTPUT] Выходной файл предоставит вам сегменты, в которых кто-то говорит (помечены как «SPEECH». Конечно, поскольку все это делается автоматически, система может совершать ошибки ..), в котором есть звук, который не является речью («ЗВУК») или тишиной («ТИХАЯ»).

  3. Выполнить диаризацию: . / shout_cluster -a [RAW_FILE]-mo [DIARIZATION_OUTPUT] -mi [SAD_OUTPUT] Используя выход shout_segment, он попытается определить, сколько динамиков было активным в записи, пометить каждый динамик («SPK01», «SPK02» и т. д.), а затемнайти все речевые сегменты каждого из ораторов.

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

2 голосов
/ 11 декабря 2016

Хотя приведенный выше ответ является точным, у меня возникла проблема с установкой в ​​Linux при установке SHoUT.undefined reference to pthread_join чье решение я обнаружил, чтобы открыть configure-make.sh из zoUT установки SHOUT и изменить строку

CXXFLAGS="-O3 -funroll-loops -mfpmath=sse -msse -msse2" LDFLAGS="-lpthread" ../configure

на

CXXFLAGS="-O3 -funroll-loops -mfpmath=sse -msse -msse2" LDFLAGS="-pthread" ../configure

ПРИМЕЧАНИЕ lpthread для изменения на pthread в системах Linux.

ОС: Linux Mint 18, где SHOUT версия: release-2010-версия-0-3

...