Библиотека/код распознавания звуковых образцов
Мне не нужно программное обеспечение "звук-текст". Мне нужно следующее:
- Я запишу несколько (скажем, 50+) аудиопотоков (записи радиостанций)
- из этих записей я отмечу интересные аудиоклипы-их длина составляет от 2 до 60 секунд-будет несколько тысяч таких аудиоклипов
- библиотека должна иметь возможность найти другие экземпляры тех же аудиоклипов из записанных звуковых потоков
- фактор доверия должен сообщается, что используется и дополнительный ввод, чтобы распознавание могло работать лучше в следующий раз
знаете ли вы о такой библиотеке программного обеспечения? LGPL был бы для меня самым ценным, но я также могу пойти на коммерческую лицензию.
аудиоклипы будут содержать музыку, текст, эффекты или любую их комбинацию. Таким образом, о распознавании текста не может быть и речи.
архитектура: c++, C# для клея, CUDA, если это возможно.
6 ответов
Я не нашел никаких библиотек (пока), но две интересные статьи, которые могут дать вам терминологию и фон для уточнения ваших поисков:
EDIT: Поиск "аудио отпечатков пальцев" пришел на страницу реализаций, как с открытым исходным кодом, так и коммерческий.
- http://wiki.musicbrainz.org/AudioFingerprint
- Пикард кажется, хорошо установлены, и может быть полезно, если ваши клипы содержат музыку.
то, что вы описываете-это согласованный фильтр и все, что вам нужно-это кросс-корреляции функция, которая должна быть частью любой разумной библиотеки 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
мой порог выше произвольно. Вы должны экспериментально определить, что подходит именно вам.
имейте в виду, что чем дольше ваш "интересный клип", тем больше времени потребуется для вычисления корреляции. Хотя более длинные клипы помогут фактическим матчам лучше выделиться из не-матчей, вам, вероятно, не понадобится больше нескольких секунд.
AudioDB - это проект с открытым исходным кодом c++, который ищет Похожие разделы аудио и обрабатывает шумные потоки и может дать вам меру сходства. Он может быть запущен как клиент / сервер, но я считаю, что вы можете сделать автономную программу.
Другие ответы о корреляции dsp являются правильными, но в целом эти алгоритмы dsp хотят сравнить два потока одинаковой длины,которые имеют совпадающие части.
Что потребуется для работы на произвольных сегментах потока; это то, для чего был построен AudioDB. (Одно приложение-найти скрытые ссылки / выборку или вопиющее злоупотребление авторским правом.) Я использовал его для поиска звуков, которые были воспроизведены в обратном порядке, и он также находит случай, когда вводятся некоторые изменения шума или речи.
Обратите внимание, что он все еще находится в разработке, хотя даты на домашней странице кажутся выключенными. Я бы подписался на список рассылки и спросил, какое текущее состояние и как вы можете пойти включаю его.
вы можете посмотреть на этой статье Ли-Чун Ван относительно www.shazam.com.
Это не API, но он дает подробную информацию о том, как был разработан их алгоритм.
взгляните на API Microsoft Speech(SAPI):
http://msdn.microsoft.com/en-us/library/ee125077%28VS.85%29.aspx
все остальные перечисленные вами требования-это в основном детали реализации, которые вам придется реализовать самостоятельно. Например, по мере интерпретации аудиопотоков программа может хранить их в SQL server с полнотекстовым индексированием ... из этого вы делаете поиск, чтобы найти похожие/одинаковые аудиоклипы.
есть конечно, другие способы реализовать это, и это только одна идея: -)
Я бы пошел куда-то в соответствии с ответом Тима Крайгера и использовал простые статистические корреляционные функции, поскольку вы хотите оставаться контент-агностиком.
Что касается функций, я бы определенно попробовал MFCC, поскольку он используется как в обработке речи, так и в распознавании музыки (жанры, песни). Вы можете найти MFCC и множество других аудио функций, доступных в отличном открытом источнике Vamp Плагины (или более высокого уровня пакет, программа под названием Соник Аннотатор) или альтернативно в Марсия основы.