Spaces:
Configuration error
Configuration error
| #!/usr/bin/env python3 | |
| import sys | |
| sys.path.append('third_party/Matcha-TTS') | |
| print("=== Teste de TTS em Português Melhorado ===\n") | |
| try: | |
| from cosyvoice.cli.cosyvoice import CosyVoice | |
| from cosyvoice.utils.file_utils import load_wav | |
| import torchaudio | |
| import os | |
| # Teste 1: Usar o modelo SFT que tem vozes pré-treinadas | |
| print("1. Testando com modelo SFT (vozes pré-treinadas)") | |
| print("-" * 50) | |
| sft_path = 'pretrained_models/CosyVoice-300M-SFT' | |
| # Verificar se o modelo SFT está completo | |
| if os.path.exists(f'{sft_path}/llm.pt'): | |
| print("Modelo SFT encontrado!") | |
| else: | |
| # Copiar arquivos necessários | |
| print("Preparando modelo SFT...") | |
| os.system(f'cp pretrained_models/CosyVoice-300M-direct/*.pt {sft_path}/') | |
| os.system(f'cp pretrained_models/CosyVoice-300M-direct/*.onnx {sft_path}/') | |
| cosyvoice_sft = CosyVoice(sft_path, load_jit=False, load_trt=False, fp16=False) | |
| # Listar vozes disponíveis | |
| print("\nVozes disponíveis no modelo SFT:") | |
| speakers = cosyvoice_sft.list_available_spks() | |
| for i, spk in enumerate(speakers[:10]): # Mostrar primeiras 10 | |
| print(f" {i}: {spk}") | |
| # Testar com diferentes vozes | |
| test_text = "Olá! Este é um teste de síntese de voz em português brasileiro. Espero que a qualidade esteja melhor agora." | |
| # Tentar vozes que podem ser mais adequadas para português | |
| voice_tests = [] | |
| # Procurar vozes femininas/masculinas em chinês que podem soar melhor | |
| for spk in speakers: | |
| if '中文女' in spk or '中文男' in spk or 'Chinese' in spk.lower(): | |
| voice_tests.append(spk) | |
| if len(voice_tests) >= 3: | |
| break | |
| for i, voice in enumerate(voice_tests): | |
| print(f"\nTestando com voz: {voice}") | |
| for j, audio in enumerate(cosyvoice_sft.inference_sft(test_text, voice, stream=False)): | |
| output_file = f'output_pt_sft_{i}.wav' | |
| torchaudio.save(output_file, audio['tts_speech'], cosyvoice_sft.sample_rate) | |
| duration = audio['tts_speech'].shape[1] / cosyvoice_sft.sample_rate | |
| print(f"✓ Gerado: {output_file} ({duration:.2f}s)") | |
| # Teste 2: Usar áudio de referência diferente | |
| print("\n\n2. Testando com áudio de referência cross-lingual") | |
| print("-" * 50) | |
| # Usar o modelo base com cross-lingual prompt | |
| cosyvoice_base = CosyVoice('pretrained_models/CosyVoice-300M-direct', load_jit=False, load_trt=False, fp16=False) | |
| # Usar o prompt cross-lingual que pode ter melhor qualidade | |
| if os.path.exists('asset/cross_lingual_prompt.wav'): | |
| prompt_cross = load_wav('asset/cross_lingual_prompt.wav', 16000) | |
| # Teste com prompt em inglês para gerar português | |
| for i, audio in enumerate(cosyvoice_base.inference_cross_lingual( | |
| '<|pt|>' + test_text, # Indicar idioma português | |
| prompt_cross, | |
| stream=False | |
| )): | |
| output_file = 'output_pt_crosslingual.wav' | |
| torchaudio.save(output_file, audio['tts_speech'], cosyvoice_base.sample_rate) | |
| duration = audio['tts_speech'].shape[1] / cosyvoice_base.sample_rate | |
| print(f"✓ Gerado: {output_file} ({duration:.2f}s)") | |
| # Teste 3: Ajustar o texto de prompt | |
| print("\n\n3. Testando com prompts otimizados") | |
| print("-" * 50) | |
| # Usar prompts mais curtos e simples | |
| prompt_speech = load_wav('asset/zero_shot_prompt.wav', 16000) | |
| prompts_test = [ | |
| "Olá.", # Prompt muito curto | |
| "Teste de voz.", # Prompt médio | |
| "Esta é uma voz brasileira." # Prompt com contexto | |
| ] | |
| for i, prompt_text in enumerate(prompts_test): | |
| print(f"\nPrompt: '{prompt_text}'") | |
| for j, audio in enumerate(cosyvoice_base.inference_zero_shot( | |
| test_text, | |
| prompt_text, | |
| prompt_speech, | |
| stream=False | |
| )): | |
| output_file = f'output_pt_prompt_{i}.wav' | |
| torchaudio.save(output_file, audio['tts_speech'], cosyvoice_base.sample_rate) | |
| duration = audio['tts_speech'].shape[1] / cosyvoice_base.sample_rate | |
| print(f"✓ Gerado: {output_file} ({duration:.2f}s)") | |
| print("\n✅ Testes concluídos!") | |
| print("\nArquivos gerados:") | |
| for f in sorted(os.listdir('.')): | |
| if f.startswith('output_pt_') and f.endswith('.wav'): | |
| size = os.path.getsize(f) / 1024 | |
| print(f" - {f} ({size:.1f} KB)") | |
| print("\n💡 Dicas para melhorar a qualidade:") | |
| print("1. Use um áudio de referência de um falante nativo de português") | |
| print("2. O modelo CosyVoice2-0.5B pode ter melhor suporte multilíngue") | |
| print("3. Fine-tuning com dados em português melhoraria significativamente") | |
| except Exception as e: | |
| print(f"\n❌ Erro: {e}") | |
| import traceback | |
| traceback.print_exc() |