Cómo usar la Inteligencia Artificial para el Análisis de Audios de WhatsApp o Youtube en OSINT
Una vez instalado, ejecutarlo es muy sencillo, pero para demostrar las diferentes opciones de Demucs, he usado otro modelo para realizar la separación:
demucs -n mdx_extra AudioWhatsApp.wav
Pero podemos mejorar la separación de las pistas, para eso debemos usar otros modelos con Demucs y en concreto de MDX-Net. Existe una aplicación Open Source llamada “Ultimate Vocal Remover” que es una GUI para Demucs, facilitando mucho su utilización y selección de diferentes modelos:
Cambiando de diferentes modelos y jugando con las diferentes opciones, podemos llegar a obtener una salida óptima, prácticamente limpia, en dos pistas diferentes, una con el tráfico y otra con la voz:
Tener la pista del sonido de tráfico puede permitir descubrir sonidos de todo tipo. Trenes, coches, camiones o motos. E incluso, podríamos analizar qué tipo de moto (o de coche) se escucha de fondo en uno de estos audios. Ya hicimos hace años un experimento con esto en el equipo de Ideas Locas llamado: ««Colega, ¿dónde está mi moto?». Cómo reconocer motos por su sonido con Inteligencia Artificial«.
Para poder separar diferentes pistas en función del tipo de audio concreto como por ejemplo para identificar acciones o eventos específicos (como disparos, cristales rotos, etcétera) , artefactos (aviones, coches, motos, etcétera) tenemos que ir buscando modelos pre-entrenados o entrenarlo nosotros.
Cómo crear nuestro propio identificador de sonidos
Una vez tenemos ya nuestra implementación para separar los sonidos en diferentes pistas de audio, tocaría entonces identificarlos. Para esto existen multitud de datasets, modelos pre-entrenados, aplicaciones online, etcétera. De nuevo nos centraremos en una aplicación Open Source y creando nuestro propio código en Python para que pase a formar parte de nuestra mochila de herramientas OSINT.
Usaremos Librosa para cargar y preprocesar el audio, asegurando que esté en mono y a 16 kHz, que es la tasa de muestreo esperada por YAMNet. Después de procesar el audio, el modelo genera probabilidades para cada clase de sonido, seleccionando las cinco etiquetas más probables. Estas etiquetas se cargan desde un archivo CSV local, lo que permite personalizar las categorías que el modelo puede reconocer.
import tensorflow as tf import tensorflow_hub as hub import numpy as np import librosa import csv # YAMNet desde TensorFlow Hub yamnet_model_url = 'https://tfhub.dev/google/yamnet/1' yamnet_model = hub.load(yamnet_model_url) # Etiquetas de clase de YAMNet desde un archivo CSV local # https://github.com/tensorflow/models/blob/ # /master/research/audioset/yamnet/yamnet_class_map.csv labels_csv_path = 'yamnet_class_map.csv' # Aquí cargamos las etiquetas desde el archivo CSV def load_labels(csv_path): with open(csv_path, 'r') as f: reader = csv.reader(f) labels = [row[2] for row in reader if len(row) > 2] return labels yamnet_labels = load_labels(labels_csv_path) # Esta función se encarga de predecir sonidos partiendo de un archivo de audio def predict_yamnet(file_path): # Cargar el archivo de audio waveform, sample_rate = librosa.load(file_path, sr=16000, mono=True) # Nos aseguramos que el audio es mono y tiene la tasa de muestreo adecuada if len(waveform.shape) > 1: waveform = waveform.mean(axis=1) # Borrado de cualquier dimensión extra waveform = waveform.astype(np.float32) # Predicción scores, embeddings, spectrogram = yamnet_model(waveform) # Obtenemos las 5 etiquetas más probables mean_scores = np.mean(scores, axis=0) top5_indices = np.argsort(mean_scores)[-5:][::-1] top5_labels = [yamnet_labels[i] for i in top5_indices] top5_scores = mean_scores[top5_indices] return list(zip(top5_labels, top5_scores)) # Archivo a analizar audio_file_path = 'subway_sound.wav' # Código principal para obtener predicciones predictions = predict_yamnet(audio_file_path) for label, score in predictions: print(f"{label}: {score:.4f}")
Al ejecutarlo obtendremos una salida similar a la siguiente, en la cual hemos pasado como parámetro un fichero .wav del sonido de un tren de metro, donde vemos que aparece como la etiqueta más probable (0.54) pero también nos ofrece otras interesantes y relacionadas como ”traqueteo” o “crujido” (Crackle) con 0.65:
Si pasamos el código por un fragmento del audio de ejemplo extraído anteriormente del ruido de fondo del tráfico (sin voz y sin procesar la calidad) que tenemos en la Figura 5, obtenemos este resultado:
Como vemos, “Crackle” suele ser un elemento bastante común ya que se encuentra en este tipo de audios (en todos estos sonidos hay crujidos, traqueteos, etcérera), pero la segunda etiqueta sí que la identifica como un sonido de tráfico, muy cercano al ruido de un tren.
Conclusiones
La Inteligencia Artificial ha propiciado un salto sin precedentes en el procesamiento de audio, ofreciendo herramientas precisas que pueden separar y analizar pistas de audio en contextos musicales y de cualquier otra naturaleza. Esta capacidad de aislar sonidos específicos en una grabación es un gran paso adelante en el Análisis Forense Digital, permitiendo a los investigadores examinar pruebas sonoras con una gran precisión y detalle.
Contactar con Fran Ramírez en MyPublicInbox |
Powered by WPeMatico