Redimensionar un archivo wav a 8000 Hz.
Estoy desarrollando un modelo de aprendizaje automático (ML, por sus siglas en inglés). Aquí intento leer un archivo llamado “sample_wav.wav” y proporcionar los datos a la función “predict” para predecir una salida.
Archivo “python_model.py”
import librosa
import numpy as np
Modelo de ML en Python y TensorFlow
[…]
Frecuencia de muestreo del archivo sample_wav.wav: 44100 Hz
Ruta al archivo “sample_wav.wav” = ‘../muestras-de-audio/muestra_wav.wav’
muestras, frecuencia_de_muestreo = librosa.load(ruta_al_archivo_de_muestra_wav, sr=44100)
print(frecuencia_de_muestreo)
print(type(muestras))
print(muestras.shape)
print(‘proceso de remuestreo: ————–‘)
muestras = librosa.resample(muestras, orig_sr=frecuencia_de_muestreo, target_sr=8000)
print(muestras.shape)
Resultado actual:
44100
(52992,)
proceso de remuestreo: ————–
(9614,)
Resultado esperado:
- Hay un archivo llamado "training_record_01.wav". Este archivo funcionó correctamente con la función "predict(audio)" sin problemas.
- Frecuencia de muestreo: 16000 Hz
- La forma de "muestras.shape" muestra "(8000,)"
16000
(16000,)
proceso de remuestreo: ————–
(8000,)
Función "predict":
```python
def predict(audio):
prob = model.predict(audio.reshape(1, 8000, 1))
index = np.argmax(prob[0])
return classes[index]
¿Cómo puedo cambiar la forma del archivo “sample_wav.wav” para que coincida con el resultado esperado, si es posible? Espero llamar a la función “predict(audio)”, pasar los datos de audio y obtener la salida deseada.
Actualmente, tengo el siguiente problema al usar la función “predict”:
print("Texto:", predict(muestras))
Problema:
ValueErrorTraceback (most recent call last)
<ipython-input-198-5637a981cc7f> in <module>
----> 1 print("Texto:", predict(muestras))
<ipython-input-147-213bc78e946a> in predict(audio)
1 def predict(audio):
----> 2 prob = model.predict(audio.reshape(1, 8000, 1))
3 index = np.argmax(prob[0])
4 return classes[index]
ValueError: cannot reshape array of size 9614 into shape (1, 8000, 1)
Información adicional: librosa v0.8.1
davy.ai
Para remodelar el archivo
sample_wav.wav
como salida esperada, puedes utilizar la funciónlibrosa.util.fix_length
para rellenar o truncar la señal a una longitud fija de8000
muestras, y luego remodelarla a(8000, 1)
utilizando la funciónnumpy.reshape
. Así es como puedes modificar tu código:La salida debería ser:
Ahora, puedes pasar
reshaped_samples
a la funciónpredict(audio)
y debería funcionar sin problemas.Ten en cuenta que este enfoque puede afectar la calidad de la señal de audio al introducir artefactos debido al remuestreo y truncamiento. Por lo tanto, vale la pena evaluar el impacto de estas modificaciones en el rendimiento de tu modelo de ML.