Python-реализация алгоритма MFCC

У меня есть база данных, которая содержит потоковое видео. Я хочу рассчитать функции LBP из изображений и аудио MFCC, и для каждого кадра в видео у меня есть аннотация. В аннотацию встроены видеокадры и время видео. Таким образом, я хочу сопоставить время, которое у меня есть от аннотации, до результата mfcc. Я знаю, что sample_rate = 44100

from python_speech_features import mfcc
from python_speech_features import logfbank
import scipy.io.wavfile as wav

audio_file = "sample.wav"
(rate,sig) = wav.read(audio_file)
mfcc_feat = mfcc(sig,rate)
print len(sig) //2130912
print len(mfcc_feat) // 4831

Во-первых, почему результат длины mfcc равен 4831 и как отобразить это в аннотации, которая у меня есть в секундах? Общая продолжительность видео составляет 48 секунд. И аннотация видео 0 везде, кроме окон 19-29 секунд, где 1. Как я могу найти образцы в окне (19-29) по результатам mfcc?


person konstantin    schedule 27.11.2017    source источник
comment
Просто комментарий: у Librosa есть различные методы извлечения признаков. Это может помочь вашей работе. github.com/librosa/librosa/blob/master/examples/   -  person dkato    schedule 06.12.2017


Ответы (1)


Бежать

 mfcc_feat.shape

Вы должны получить (4831,13) . 13 — это длина вашего MFCC (по умолчанию numcep равно 13). 4831 это окна. По умолчанию winstep составляет 10 мс, и это соответствует длительности вашего звукового файла. Чтобы добраться до окон, соответствующих 19-29 секундам, просто нарежьте

mfcc_feat[1900:2900,:]

Помните, что вы не можете слушать MFCC. Он просто представляет фрагмент аудио 0,025 с (значение параметра winlen по умолчанию).

Если вы хотите добраться до самого аудио, это

sig[time_beg_in_sec*rate:time_end_in_sec*rate]
person igrinis    schedule 29.11.2017
comment
Но нет ли также некоторого совпадения? Вот это меня смутило. - person konstantin; 29.11.2017
comment
Я хочу взять характеристики сигнала и использовать их для дальнейшего анализа. Что значит слушать MFCC (его коэффициенты частотной области - как их слушать)? - person konstantin; 29.11.2017
comment
re: Перекрытие: Конечно. MFCC рассчитываются по winlen, и каждый winstep. Итак, количество окон зависит от winstep. Качество функций зависит от 'winlen'. Для разных приложений вы используете разные размеры окон. - person igrinis; 29.11.2017
comment
Re: слушаю. Я рад, что ты это понимаешь. - person igrinis; 29.11.2017
comment
Легко ли рассчитать джиттер и шаг для одних и тех же окон, чтобы обогатить возможности моего MFCC? Это прямолинейно сделать это? - person konstantin; 29.11.2017
comment
Ты можешь это сделать. Шаг не так тривиален или надежен. Вы не можете рассчитать высоту для одних и тех же окон (нужно примерно полсекунды), но вы можете рассчитать высоту по всему сигналу и взять значение, соответствующее конкретному временному окну. - person igrinis; 29.11.2017
comment
Любой рекомендуемый код Python для джиттера и высоты тона? Я хочу проверить, полезны ли они для классификации. - person konstantin; 29.11.2017
comment
Также вы имеете в виду mfcc_feat.shape, а не sig.shape, верно? - person konstantin; 29.11.2017
comment
ТАКЖЕ возможно ли, что я получаю результаты в обоих каналах? Во время отладки я проверил, что MFCC действительно имеет размер 4831, однако внутри него есть два вектора: один размером 13, а другой размером 26. Есть ли шанс, что это представление двух каналов? - person konstantin; 29.11.2017
comment
Я не могу ответить на это. Это зависит от реализации python_speech_features. Это могут быть энергии банков фильтров, но это вы должны проверить. re code, я не использовал никаких реализаций Python, извините. Вы можете искать детектор высоты тона Инь. - person igrinis; 29.11.2017