Библиотека распознавания звукового образца / код - PullRequest
14 голосов
/ 12 мая 2010

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

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

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

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

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

Ответы [ 6 ]

9 голосов
/ 15 мая 2010

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

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

Вот введение в Аудио дактилоскопию

7 голосов
/ 15 мая 2010

То, что вы описываете, это согласованный фильтр , и все, что вам нужно, это кросс-корреляция , которая должна быть частью любой разумной библиотеки 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

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

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

4 голосов
/ 18 мая 2010

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

3 голосов
/ 20 мая 2010

Возможно, вы захотите взглянуть на эту статью Ли-Чун Вана относительно www.shazam.com .

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

0 голосов
/ 07 апреля 2012

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

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

0 голосов
/ 15 мая 2010

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

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

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

...