С помощью каких инструментов можно провести анализ аудиоданных для выявления схожих паттернов?
Есть несколько аудиодампов (звук из видеозаписей). С помощью какого подхода можно выявить характерные паттерны в них? Например, надо понять в каком месте аудиодампов находится лай собаки или определенная мелодия или хлопок в ладоши? Примеры паттернов могут быть известны заранее, но могут быть и неизвестны (тогда нужно попытаться найти их средствами машинного обучения).
Спектры — это понятно. Видел пример на хабре. Хотя лично мне непонятно, какая разница для нейронки приходят ей данные в виде картинки или массива байтов (видимо это более наглядно для питонистов, ну ОК).
Непонятно дальше чем это нужно разбирать и по какому принципу...
Роман Кофф, все нейронки в мире работат так. Это ящик которым на вход приходит
вектор вида
{ 0.0, 1.1, -1.0 .... }
и на выходе они тоже выдают вектор.
Если работаешь в текстом - то там тоже есть хитрые приемчики как текст свернуть в вектор.
Для обработки звука - тоже самое. Почему спектр лучше - потому что он толерантен
к фазовым преобразованиям. А если ты будешь анализировать одномерный график типа PCM
то можешь получить не просто лай собаки а минус-лай собаки. Тоесть результат парадоксальный
и неправильный.
mayton2019, я сделал два небольших тестовых файла (wav) с фоном и звуком шаблона. В Audacity могу посмотреть спектр, но не понимаю как и в каком виде его нужно сохранить (кроме того там еще есть разные форматы спектра)...
В тестовых файлах звук светового меча смещен в разные позиции и имеет разную громкость звучания.
Исходники, если что, положил здесь: https://github.com/RomanKoff/AiTest1/tree/main/Sources
Там файлы Sample 1.wav и Sample 2.wav — это тестовые примеры.
Хм... плохо что они такой выбрали градиент. Непонятно можно ли по уровню яркости брать.
Вобщем желтому цвету пиксела соотвествует логический максимум. Допустим это 1.0
А темно синему - минимум. 0.0. Между ними - интерполяция. Придумай сам как ее сделать.
Получится примерно такой pipeline. Попробуем без нейросетей просто на операциях с векторами.
1) Берем картинки и преобразуем их в матрицы чисел.
2) Тоже самое с паттернами.
3) Нормируем все таким образом чтобы по ширине спектра они были одинаковые. Допустим
семпл собаки был снят с частотой 22050 Гц а оригинал записи 44100 - делаем прореживание
частоты так чтобы было ровно.
4) Ищем вхождение семпла в оригинал. Критерий - максимум скалярного произведения двух
матриц. Где одна из них - семпл. А вторая - под-матрица такой же размерности. И эту под-матрицу
надо будет двигать по всему временному интервалу где была запись.
Если будешь рисовать график скалярного произведения - в момент максимальной близости
семпла и реального лая собаки - там будет скачок графика вверх и будет заметен локальный максимум.
Вот эта точка и будет "Гавк".
Вот такой грубый и примитивный алгоритм и возможно он медленно работает но он простой
и в этом его преимущество.
В более сложном варианте можно добавить пороговый фильтр шумов и варпинг звуков с целью
сохранить их профиль но сократить длительность. Варпинг я никогда не делал. Но делал мой друг
на фактультете распознавания звуковых образов. У него дипломная была и он мне рассказал.
Еще у него была сильная квантизация. Он почти полностью ушел от вещественных чисел и
его алгоритм работал просто на булевых матрицах. А определял он команды управления
мобильным роботом. Ну... такие как "Стоп Вперед-назад", и эти голосовые семплы было удобно
делать в таком дискретном виде.
mayton2019, спасибо, это хорошая теория для меня. Но это не решит моей задачи. Мне, в оригинале, нужно выделять одинаковые паттерны в разных аудиозаписях и понимать в какое время они проявились в записи. Проблема в том, что паттерны и их длительность заранее тоже не известны...
Правда, ваша теоретическая часть навела меня на другое возможное решение задачи, чисто визуальное)))