Двоичная классификация аудио .wav файлов - PullRequest
0 голосов
/ 15 мая 2018

Привет, я всего лишь Layman в случае обработки аудио, поэтому мой вопрос будет очень простым. У меня есть аудио из 2 групп X и Y с аудио-сэмплами .wav, и мне нужно сделать модель, которая будет правильно классифицировать звук X или Y. Я понял, как загружать данные в список, а затем преобразовал их в Dataframe. У меня есть 2 столбца (во втором - 8000 элементов в каждой строке).

       0    1
0   2000    [0.1329449, 0.14544961, 0.19810106, 0.21718721...
1   2000    [-0.30273795, -0.6065889, -0.4967722, -0.47117...
2   2000    [-0.07037315, -0.6685449, -0.48479277, -0.4535...

Я основал эти полезные функции из модуля python_speech_features:

 rate,signal = sw.read(i)
    features = psf.base.mfcc(signal)
    features = psf.base.fbank(features)
    features = psf.base.logfbank(features[1])
    features = psf.base.lifter(features,L=22)
    features = psf.base.delta(features,N=13)
    features = pd.DataFrame(features)
  1. Какие другие функции я должен извлечь из аудиофайлов?
  2. Что стоит визуализировать здесь, чтобы раскрыть некоторые закономерности? например. можно ли визуализировать какую-то функцию, которая может показать разницу между А и В?
  3. Каков наилучший способ сделать эту классификацию, лучше ли делать их с NN, или традиционные модели будут удовлетворять?

Я буду признателен за любую помощь Также будут приветствоваться дополнительные ресурсы для самообучения.

1 Ответ

0 голосов
/ 24 мая 2018

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

def audio_to_image(path, height=192, width=192):
    signal, sr = lr.load(path, res_type='kaiser_fast')
    hl = signal.shape[0]//(width*1.1)
    spec = lr.feature.melspectrogram(signal, n_mels=height, hop_length=int(hl))
    img = lr.logamplitude(spec)**2
    start = (img.shape[1] - width) // 2
    return img[:, start:start+width]
  1. Загрузить аудиофайл
  2. Сделать длину прыжка на 10% длиннее указанной ширины
  3. Создание мельспектрограммы из аудиосигнала
  4. Логарифмическая шкала амплитуды, аналогичной человеческому слуху
  5. Отрезать 5% от начала и конца, чтобы справиться с тишиной

Результат будет выглядеть примерно так:

melspectrogram

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

РЕДАКТИРОВАТЬ: Здесь - полный код моего собственного проекта, классифицирующий аудио образцы речи на их разговорный язык.

...