es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para remodelar el archivo sample_wav.wav como salida esperada, puedes utilizar la función librosa.util.fix_length para rellenar o truncar la señal a una longitud fija de 8000 muestras, y luego remodelarla a (8000, 1) utilizando la función numpy.reshape. Así es como puedes modificar tu código:

    import librosa
    import numpy as np
    
    # Python y modelo de ML de TensorFlow
    # [...]
    
    # sample_wav.wav frecuencia de muestreo: 44100 Hz
    path_to_sample_wav = '../muestras-de-prueba/sample_wav.wav'
    
    samples, sample_rate = librosa.load(path_to_sample_wav, sr=44100)
    print(sample_rate)
    print(type(samples))
    print(samples.shape)
    
    # Corregir longitud
    fixed_samples = librosa.util.fix_length(samples, size=8000)
    
    # Remodelar
    reshaped_samples = np.reshape(fixed_samples, (8000, 1))
    
    print('reshaped_samples.shape:', reshaped_samples.shape)
    
    print('proceso de remuestreo:--------------')
    samples = librosa.resample(samples, orig_sr=sample_rate, target_sr=8000)
    print(samples.shape)
    

    La salida debería ser:

    44100
    <class 'numpy.ndarray'="">
    (52992,)
    reshaped_samples.shape: (8000, 1)
    proceso de remuestreo:--------------
    (9614,)
    

    Ahora, puedes pasar reshaped_samples a la función predict(audio) y debería funcionar sin problemas.

    print("Texto:", predict(reshaped_samples))
    

    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.

Comments are closed.