Как предварительно обработать аудиоданные для ввода в нейронную сеть - PullRequest
0 голосов
/ 29 апреля 2018

В настоящее время я разрабатываю систему определения ключевых слов, которая распознает цифры от 0 до 9, используя глубокие нейронные сети. У меня есть набор данных людей, произносящих числа (а именно набор данных TIDIGITS, собранный в Texas Instruments, Inc), однако данные не подготовлены для подачи в нейронную сеть, потому что не все аудиоданные имеют одинаковую длину звука, плюс некоторые файлы содержат несколько цифр, произносимых последовательно, например, «один два три».

Может кто-нибудь сказать мне, как мне преобразовать эти файлы WAV в файлы WAV с 1 секундами, содержащие только звук одной цифры? Есть ли способ автоматически сделать это? Индивидуальная подготовка аудиофайлов будет дорогостоящей.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Я бы разделил каждую волну на зоны молчания. Обрежьте тишину от начала и до конца. Затем я запускаю каждый из них через БПФ для разных разделов. Меньшие в начале звука. Тогда я бы нормализовал частоты по отношению к основному. Затем я передаю результаты в NN в виде трехмерного массива, частоты и времени.

0 голосов
/ 29 апреля 2018

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

Для каждого входного аудиофайла определите одно секундное окно, которое вы извлекаете и сохраняете в своем собственном файле, затем передвигаете это окно дальше в аудиофайл и снова извлекаете следующий фрагмент в свой собственный файл.

Так как нам нужны клипы за одну секунду, и мы не знаем, где в исходном входном файле лежат наши цифры, после сохранения фрагмента первого окна сдвиньте, скажем, 100 мс и вытащите следующее окно. Таким образом, для каждого входного аудиофайла мы создадим последовательность перекрывающихся фрагментов, каждый с начальной точкой всего в 100 мс, отделенных от предыдущего фрагмента. Для этого легко использовать инструмент командной строки ffmpeg

https://ffmpeg.org/ffmpeg.html

https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax

input_audio=audio_from_your_dataset.wav

output_audio=output/aaa

ffmpeg -i $input_audio -ss 0    -t 1 -acodec copy ${output_audio}.0.00.wav
ffmpeg -i $input_audio -ss 0.20 -t 1 -acodec copy ${output_audio}.0.20.wav
ffmpeg -i $input_audio -ss 0.40 -t 1 -acodec copy ${output_audio}.0.40.wav
ffmpeg -i $input_audio -ss 0.60 -t 1 -acodec copy ${output_audio}.0.60.wav
ffmpeg -i $input_audio -ss 0.80 -t 1 -acodec copy ${output_audio}.0.80.wav
ffmpeg -i $input_audio -ss 1.00 -t 1 -acodec copy ${output_audio}.1.00.wav  
ffmpeg -i $input_audio -ss 1.20 -t 1 -acodec copy ${output_audio}.1.20.wav

выше parm -ss определяет начальную точку фрагмента в секундах ... поэтому 0.60 запустит 600 мс в файл ... parm -t определяет длину окна в секундах

поэтому его вывод будет

./output/aaa.0.00.wav
./output/aaa.0.20.wav
./output/aaa.0.40.wav
./output/aaa.0.60.wav
./output/aaa.0.80.wav
./output/aaa.1.00.wav   
./output/aaa.1.20.wav

проблема выше в командной строке ... это не ограничивается просто wav, другие кодеки тоже в порядке ... теперь у вас есть несколько односекундных аудиофайлов фрагментов, извлеченных из одного и того же входного аудио ... Я бы затем обернул выше процесс с мета-процессом, который изменяет ширину вашего окна ... ничто в камне не говорит 1 секунду, так что делайте все выше для окон, которые варьируются, скажем, от 0,1 секунды до 1 секунды ... это будет геометрически взрывать количество файлов сниппетов, которые вы генерируете ... бонусные баллы, если вы добавите еще один внешний цикл, в котором вы изменяете время инкремента, на которое каждая начальная точка окна скользит, поскольку 100 мс также должны быть свободной переменной ... поэтому ваш код должен определить три цикла for для вызовов ffmpeg (to продвигаться по входному файлу, изменять ширину окна, изменять слайд окна)

ffmpeg - это промышленный стандарт Swiss Army Knife для работы с аудио / видео (наряду с Sox) ... в дополнение к набору инструментов командной строки, ffmpeg также представляет собой набор библиотек, вызываемых из любого языка (python, go,. ..)

Теперь выполните ML, чтобы определить, какие из этих фрагментов наиболее точно соответствуют звучанию известной произносимой цифры, чтобы определить, какие фрагменты вы сохраняете или отбрасываете

...