Звуковая библиотека распознавания образцов/код

Я не хочу использовать программное обеспечение для чтения звука. Мне нужно следующее:

  • Я записываю несколько (например, 50+) аудиопотоков (записи радиостанций)
  • из этих записей, я помету интересные аудиоклипы - их длина колеблется от 2 до 60 секунд - там будет несколько тысяч таких аудиоклипов Библиотека
  • должна иметь возможность находить другие экземпляры одних и тех же аудиоклипов из записанных звуковых потоков.
  • следует сообщить о достоверности и использовать дополнительный вход, чтобы в следующий раз распознавание могло улучшиться.

Знаете ли вы о такой библиотеке программного обеспечения? LGPL будет для меня самым ценным, но я могу пойти и на коммерческую лицензию.

Аудиоклипы будут содержать как музыку, так и текст, эффекты или любую их комбинацию. Таким образом, распознавание TEXT не может быть и речи.

Архитектура: С++, С# для клея, CUDA, если возможно.

Ответ 1

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

РЕДАКТИРОВАТЬ: поиск "Отпечатки пальцев аудио" попал на страницу реализаций, как с открытым исходным кодом, так и с коммерческой.

Вот описание для аудиопечати.

Ответ 2

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

Если вы действительно не заботитесь о производительности, вы можете использовать Python...

$ python
Python 2.6.4 (r264:75706, Dec  7 2009, 18:45:15) 
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
>>> interesting_clip = [ 5, 7, 2, 1]
>>> full_stream = [ 1, 5, 7, 2, 1, 4, 3, 2, 4, 7, 1, 2, 2, 5, 1]
>>> correlation = scipy.correlate (full_stream, interesting_clip)
>>> print correlation
[56 79 55 28 41 49 44 53 73 48 28 35]
>>> for offset, value in enumerate(correlation) :
...     if (value > 60) :
...         print "match at position", offset, "with value of", value
... 
match at position 1 with value of 79
match at position 8 with value of 73

Мой порог выше произвольно. Вы должны экспериментально определить, что подходит вам.

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

Ответ 3

AudioDB - проект С++ с открытым исходным кодом, который ищет похожие разделы аудио и обрабатывает шумные потоки и может дать вам меру подобия. Его можно запустить как клиент/сервер, но я считаю, что вы можете сделать отдельную программу.
Другие ответы о корреляции dsp являются правильными, но в целом эти алгоритмы dsp хотят сравнить два потока одинаковой длины, которые имеют перекрывающиеся аналогичные части.
Для этого требуется, чтобы он работал на произвольных сегментах потока; для этого и был создан AudioDB. (Одно приложение - найти скрытые ссылки/выборку или вопиющее использование авторских прав.) Я использовал его для поиска звуков, которые были воспроизведены в обратном направлении, и также обнаруживает случай, когда вводятся некоторые изменения шума или речи.
Обратите внимание, что он все еще находится в разработке, даже если даты на главной странице отключены. Я бы подписался на список рассылки и спросил, что такое текущее состояние и как вы можете включить его.

Ответ 4

Вы можете посмотреть эту статью Ли Чун Ван о www.shazam.com.

Это не API, но он дает подробную информацию о том, как их алгоритм был разработан.

Ответ 5

Взгляните на API речи Microsoft (SAPI):
http://msdn.microsoft.com/en-us/library/ee125077%28VS.85%29.aspx

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

Есть, конечно, другие способы реализовать это, и это только одна идея: -)

Ответ 6

Я бы пошел где-то в соответствии с ответом Тима Кригера и использовал простые статистические корреляционные функции, так как вы хотите остаться агностиком контента.

Что касается функций, я бы определенно попробовал MFCC, поскольку он использовался как в обработке речи, так и в распознавании музыки (жанры, песни). Вы можете найти MFCC и множество других аудио-функций, доступных в отличном исходном формате Vamp plugins (или его более высокоуровневый пакет, Sonic Annotator) или, альтернативно, в Marsyas.