Síntese de Voz com IA: Utilizando so-vits-svc e GPU Gratuita no Google Colab

O avanço das tecnologias de inteligência artificial permitiu a criação de modelos de conversão de voz extremamente realistas. No entanto, o treinamento e a execução desses modelos exigem processamento gráfico (GPU) de alto desempenho, o que pode ser um obstáculo para muitos usuários. Uma solução eficiente é o uso do Google Colab, um ambiente baseado em nuvem que oferece acesso gratuito a recursos de hardware robustos, como a GPU Tesla T4.

Configuração do Ambiente no Colab

O Google Colab funciona de forma integrada ao Google Drive, permitindo que scripts, datasets e modelos treinados sejam armazenados de forma persistente. Para começar, é necessário vincular o Colab à sua conta do Drive.

Após criar um novo notebook (.ipynb), o primeiro passo técnico é verificar a disponibilidade da GPU e a versão dos drivers CUDA instalados no ambiente virtual:

!/usr/local/cuda/bin/nvcc --version
!nvidia-smi

O comando nvidia-smi exibirá detalhes sobre a placa de vídeo alocada. Para tarefas de síntese de voz com a biblioteca so-vits-svc, a Tesla T4 com 15GB de memória de vídeo é a configuração ideal frequentemenet disponibilizada pelo Google.

Instalação de Dependências

A biblioteca so-vits-svc requer versões específicas de bibliotecas de manipulação de áudio e processamento numérico. Devido à natureza do ambiente Colab, pode ser necessário reiniciar o tempo de execução (runtime) após a instalação de pacotes como o numpy para evitar conflitos de versão.

!pip install pyworld==0.3.2
!pip install numpy==1.23.5

Em seguida, clonamos o repositório do projeto e instalamos os requisitos fundamentais, incluindo frameworks de deep learning e ferramentas de manipulação de modelos do HuggingFace:

import os
import glob

# Clonagem do repositório oficial (branch específica para estabilidade)
!git clone https://github.com/effusiveperiscope/so-vits-svc -b eff-4.0
os.chdir('/content/so-vits-svc')

# Instalação automatizada de dependências via pip
!cat requirements.txt | xargs -n 1 pip install --extra-index-url https://download.pytorch.org/whl/cu117
!pip install praat-parselmouth ipywidgets huggingface_hub fairseq==0.12.2 tensorflow==2.11.0

Utilitários de Gerenciamento de Dados

Para facilitar o download de modelos pré-treinados de diversas fontes (Mega, Google Drive, HuggingFace), implementamos uma série de funções auxiliares para extração e transferência de arquivos grandes.

import tarfile
from zipfile import ZipFile

def gerenciar_arquivos_compactados(caminho):
    pasta_destino = os.path.split(caminho)[0]
    if caminho.endswith(".zip"):
        with ZipFile(caminho, 'r') as z:
            z.extractall(pasta_destino)
    elif caminho.endswith((".tar.gz", ".tar.bz2", ".tar")):
        modo = "r:" + caminho.split('.')[-1] if "tar." not in caminho else "r:" + caminho.split('.')[-2]
        with tarfile.open(caminho, modo.replace("tar.gz", "gz").replace("tar.bz2", "bz2")) as t:
            t.extractall(pasta_destino)
    print(f"Arquivo {caminho} processado com sucesso.")

# Exemplo de lógica para download via HuggingFace
import huggingface_hub
import shutil

def baixar_modelo_hf(repo_id, nome_modelo, pasta_alvo):
    if not os.path.exists(pasta_alvo):
        os.makedirs(pasta_alvo, exist_ok=True)
    
    # Download do checkpoint e configuração
    arquivo_g = huggingface_hub.hf_hub_download(repo_id=repo_id, filename=f"{nome_modelo}/G_18500.pth")
    arquivo_cfg = huggingface_hub.hf_hub_download(repo_id=repo_id, filename=f"{nome_modelo}/config.json")
    
    shutil.move(os.path.realpath(arquivo_g), os.path.join(pasta_alvo, "G_18500.pth"))
    shutil.copy(arquivo_cfg, os.path.join(pasta_alvo, "config.json"))
    print("Download do modelo concluído.")

Proceso de Inferência e Conversão de Voz

Com o ambiente configurado e os modelos (como o do Donald Trump ou outros locutores) carregados na pasta models/, utilizamos o motor de inferência do so-vits-svc para transformar um áudio de origem (vocal) na voz do modelo alvo.

O código abaixo inicializa a interface de inferência, permitindo ajustar parâmetros como o Transpose (ajuste de tom para converter vozes masculinas em femininas e vice-versa) e o Clustering Ratio (para melhorar a fidelidade do timbre).

import torch
from inference import infer_tool
from inference.infer_tool import Svc
import soundfile as sf

class ProcessadorVozIA:
    def __init__(self, model_path, config_path, cluster_path=""):
        self.svc_model = Svc(model_path, config_path, cluster_model_path=cluster_path)
        self.target_sample = self.svc_model.target_sample

    def converter_audio(self, input_path, output_path, tom=0, noise_scale=0.4):
        # O so-vits-svc realiza o slicing automático do áudio para processamento em partes
        print(f"Iniciando conversão de: {input_path}")
        
        # Simulação simplificada do fluxo de inferência
        # Na prática, utiliza-se o método infer_tool.format_wav e svc_model.infer
        # O resultado é exportado via soundfile
        pass

# Instanciação e execução
# processador = ProcessadorVozIA("models/trump/G_18500.pth", "models/trump/config.json")
# processador.converter_audio("input/musica_original.wav", "output/resultado_ia.wav", tom=0)

O sistema processa o áudio de entrada, remove ruídos de fundo e aplica a rede neural para prever a frequência fundamental (F0) e o timbre, resultando em uma nova faixa de áudio com as características vocais do modelo treinado.

Considerações Técnicas sobre Recursos

Ao utilizar o Google Colab para síntese de voz, é fundamental monitorar o espaço em disco disponível no Google Drive (limite de 15GB na versão gratuita). Modelos de deep learning e arquivos de áudio .wav sem compressão podem consumir esse espaço rapidamente. Além disso, o uso intenso da GPU pode levar a uma redução temporária na prioridade de alocação de hardware para a conta, sendo recomendada a limpeza periódica de arquivos temporários no diretório /content/.

Tags: Artificial Intelligence deep learning so-vits-svc Google Colab Python

Publicado em 7-16 17:53