Download scripts/eval.py from proxectonos/Nos_StyleTTS2-Brais-GL: direct link, hf CLI and curl.
- Browser
- Download file 3.78 kB
-
https://huggingface.co/proxectonos/Nos_StyleTTS2-Brais-GL/resolve/main/scripts/eval.py
- Command line
-
hf download hf://proxectonos/Nos_StyleTTS2-Brais-GL/scripts/eval.py
-
curl -L -o eval.py https://huggingface.co/proxectonos/Nos_StyleTTS2-Brais-GL/resolve/main/scripts/eval.py
3.78 kB
| import argparse | |
| import os | |
| from unittest import result | |
| import librosa | |
| from pyparsing import results | |
| from speechmos import dnsmos | |
| def main(audio_files, output_file): | |
| # Configuración de sample rate original, ajústalo si es necesario | |
| config = {'sample_rate': 24000} # Cambia 24000 por el sample rate real de tus audios si es distinto | |
| results_txt = [] | |
| results = [] | |
| file_names = [] | |
| ovrl_cmos, sig_cmos, bak_mos, p808_mos = None, None, None, None | |
| for audio_path in audio_files: | |
| head, tail = os.path.split(audio_path) | |
| file_names.append(tail) | |
| if not os.path.isfile(audio_path): | |
| print(f"Archivo no encontrado: {audio_path}") | |
| results.append({'ovrl_mos': None, 'sig_mos': None, 'bak_mos': None, 'p808_mos': None}) | |
| continue | |
| try: | |
| wav, sr = librosa.load(audio_path, sr=None) | |
| wav_resampled = librosa.resample(wav, orig_sr=sr, | |
| target_sr=16000, res_type='kaiser_best', fix=True) | |
| mos_dict = dnsmos.run(wav_resampled, sr=16000) | |
| results.append(mos_dict) | |
| except Exception as e: | |
| print(f"{tail}: ERROR - {str(e)}") | |
| results.append({'ovrl_mos': None, 'sig_mos': None, 'bak_mos': None, 'p808_mos': None}) | |
| # Imprimir tabla de resultados | |
| header = f"{'Audio':<40} {'OVRL':>8} {'SIG':>8} {'BAK':>8} {'P808':>8}" | |
| print(header) | |
| print('-' * len(header)) | |
| for i, res in enumerate(results): | |
| if res['ovrl_mos'] is not None: | |
| print(f"{file_names[i]:<40} {res['ovrl_mos']:8.3f} {res['sig_mos']:8.3f} {res['bak_mos']:8.3f} {res['p808_mos']:8.3f}") | |
| else: | |
| print(f"{file_names[i]:<40} {'ERROR':>8} {'ERROR':>8} {'ERROR':>8} {'ERROR':>8}") | |
| # Calcular CMOS si hay dos audios válidos | |
| if len(results) == 2 and all(r['ovrl_mos'] is not None for r in results): | |
| ovrl_cmos = results[0]['ovrl_mos'] - results[1]['ovrl_mos'] | |
| sig_cmos = results[0]['sig_mos'] - results[1]['sig_mos'] | |
| bak_mos = results[0]['bak_mos'] - results[1]['bak_mos'] | |
| p808_mos = results[0]['p808_mos'] - results[1]['p808_mos'] | |
| print("\nCMOS (Audio1 - Audio2):") | |
| print(f"{'CMOS OVRL':<12}: {ovrl_cmos:.3f}") | |
| print(f"{'CMOS SIG':<12}: {sig_cmos:.3f}") | |
| print(f"{'CMOS BAK':<12}: {bak_mos:.3f}") | |
| print(f"{'CMOS P808':<12}: {p808_mos:.3f}") | |
| else: | |
| print("\nNo es posible calcular CMOS") | |
| # Guardar tabla en archivo | |
| with open(output_file, "w") as f: | |
| f.write(header + "\n") | |
| f.write('-' * len(header) + "\n") | |
| for i, res in enumerate(results): | |
| if res['ovrl_mos'] is not None: | |
| f.write(f"{file_names[i]:<40} {res['ovrl_mos']:8.3f} {res['sig_mos']:8.3f} {res['bak_mos']:8.3f} {res['p808_mos']:8.3f}\n") | |
| else: | |
| f.write(f"{file_names[i]:<40} {'ERROR':>8} {'ERROR':>8} {'ERROR':>8} {'ERROR':>8}\n") | |
| if len(results) == 2 and all(r['ovrl_mos'] is not None for r in results): | |
| f.write("\nCMOS (Audio1 - Audio2):\n") | |
| f.write(f"{'CMOS OVRL':<12}: {ovrl_cmos:.3f}\n") | |
| f.write(f"{'CMOS SIG':<12}: {sig_cmos:.3f}\n") | |
| f.write(f"{'CMOS BAK':<12}: {bak_mos:.3f}\n") | |
| f.write(f"{'CMOS P808':<12}: {p808_mos:.3f}\n") | |
| else: | |
| f.write("\nNo es posible calcular CMOS\n") | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser(description="Evalúa audios con DNSMOS") | |
| parser.add_argument("--audios", nargs="+", help="Lista de archivos de audio a evaluar") | |
| parser.add_argument("--output", default="dnsmos_results.txt", help="Archivo de salida para los resultados") | |
| args = parser.parse_args() | |
| main(args.audios, args.output) |