Ошибка: Несоответствие частоты дискретизации: Ожидаемое: 16000; Фактически: 48000. Ошибка выдачи Tensorflow js

Я хочу записать звук на частоте 16000 Гц и получить его спектрограмму. Моя модель принимает ввод [null.1998.101]. Я не могу добиться этого в javascript

    const mic = await tf.data.microphone({
    fftSize: 256,
    columnTruncateLength: 101,
    numFramesPerSpectrogram: 1998 ,
    sampleRateHz:16000,
    includeSpectrogram: true,
    includeWaveform: true
});

const audioData = await mic.capture();
console.log(audioData)
const spectrogramTensor = audioData.spectrogram;
console.log(spectrogramTensor)
spectrogramTensor.print();
const waveformTensor = audioData.waveform;
waveformTensor.print();
mic.stop(); 

Моя модель - обнаружение триггерного слова. В Python я использовал следующий код.

def graph_spectrogram(wav_file):
rate, data = get_wav_info(wav_file)
print(data)
print(len(data))
nfft = 200 # Length of each window segment
fs = 8000 # Sampling frequencies
noverlap = 120 # Overlap between windows
nchannels = data.ndim
if nchannels == 1:
    pxx, freqs, bins, im = plt.specgram(data, nfft, fs, noverlap = noverlap)
elif nchannels == 2:
    pxx, freqs, bins, im = plt.specgram(data[:,0], nfft, fs, noverlap = noverlap)
return pxx

person Anmol Duggal    schedule 28.04.2020    source источник


Ответы (1)


Браузер имеет стандартное и фиксированное значение частоты дискретизации аудиозаписи. Следующее выведет скорость frequency браузера.

new window.AudioContext().sampleRate

Ошибка возникает из-за того, что 16000 не соответствует частоте дискретизации браузера. В настоящее время невозможно изменить частоту дискретизации аудиозаписи из браузера. Что можно сделать, так это

  • для обучения модели с использованием частоты
  • изменить форму (или нарезать) тензор на модель inputShape
  • запишите звук и передискретизируйте его (используя этот ответ) и создайте тензор из аудиозаписи (используя этот #59267611">ответить
  • Хотя я не пробовал, кажется, что значение частоты дискретизации исходит из настроек операционной системы. Его изменение позволит записи иметь правильную частоту дискретизации. В linux частоту записи можно задать в файле /etc/pulse/daemon.conf
person edkeveked    schedule 01.05.2020