Contenidos
Versión básica (solo detecta música o voz)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
from transformers import pipeline from pathlib import Path ETIQUETAS = [ "music", "speech", "radio transmission", "silence", "background noise", "static", ] ETIQUETAS_VALIDAS = {"music", "speech"} UMBRAL = 0.40 def es_valido(resultado): mejor = resultado[0] return mejor["label"] in ETIQUETAS_VALIDAS and mejor["score"] >= UMBRAL def main(): carpeta = Path("grabaciones") if not carpeta.exists() or not carpeta.is_dir(): print("La carpeta 'grabaciones' no existe.") return archivos = sorted(carpeta.glob("*.wav")) if not archivos: print("No hay archivos .wav en la carpeta 'grabaciones'.") return print("Cargando modelo...") clasificador = pipeline( task="zero-shot-audio-classification", model="laion/clap-htsat-unfused" ) encontrados = 0 for archivo in archivos: try: resultado = clasificador(str(archivo), candidate_labels=ETIQUETAS) if es_valido(resultado): mejor = resultado[0] print(f"{archivo.name} | {mejor['label']} | {mejor['score']:.4f}") encontrados += 1 except Exception as e: print(f"Error procesando {archivo.name}: {e}") if encontrados == 0: print("No se han detectado archivos con music o speech.") if __name__ == "__main__": main() |
Versión avanzada (solo saca si detecta algo interesante y lo mueve a una carpeta nueva)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
from transformers import pipeline from pathlib import Path import sys import shutil ETIQUETAS = [ "music", "speech", "radio transmission", "silence", "background noise", "static", ] ETIQUETAS_VALIDAS = {"music", "speech"} UMBRAL = 0.40 def es_valido(resultado): mejor = resultado[0] return mejor["label"] in ETIQUETAS_VALIDAS and mejor["score"] >= UMBRAL def main(): carpeta = Path("grabaciones") carpeta_destino = Path("archivos_interesantes") if not carpeta.exists() or not carpeta.is_dir(): print("La carpeta 'grabaciones' no existe.") return carpeta_destino.mkdir(exist_ok=True) archivos = sorted(carpeta.glob("*.wav")) if not archivos: print("No hay archivos .wav en la carpeta 'grabaciones'.") return print(f"Se han encontrado {len(archivos)} archivos .wav.") print("Cargando modelo...") clasificador = pipeline( task="zero-shot-audio-classification", model="laion/clap-htsat-unfused" ) movidos = 0 for i, archivo in enumerate(archivos, start=1): sys.stdout.write(f"\rLeyendo [{i}/{len(archivos)}]: {archivo.name}...") sys.stdout.flush() try: resultado = clasificador(str(archivo), candidate_labels=ETIQUETAS) if es_valido(resultado): mejor = resultado[0] destino = carpeta_destino / archivo.name # Si ya existe un archivo con el mismo nombre, añade sufijo contador = 1 while destino.exists(): destino = carpeta_destino / f"{archivo.stem}_{contador}{archivo.suffix}" contador += 1 shutil.move(str(archivo), str(destino)) print() print(f"MOVIDO: {archivo.name} {mejor['label']} {mejor['score']:.4f}") movidos += 1 except Exception as e: print() print(f"Error procesando {archivo.name}: {e}") print() if movidos == 0: print("No se han encontrado archivos interesantes.") else: print(f"Total movidos a 'archivos_interesantes': {movidos}") if __name__ == "__main__": main() |

