Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save glilco/ad98d14b7ec5b9813f2d4fe790acf976 to your computer and use it in GitHub Desktop.
Save glilco/ad98d14b7ec5b9813f2d4fe790acf976 to your computer and use it in GitHub Desktop.
Diarização de áudio com o Whisper e o pyannote_whisper

Documentando a criação do docker para diarização (transcrição com nomes) de áudios utilizando Whisper e pyannote.

Criação do Docker

Para a criação do Docker, foi utilizado o comando:

docker run --name transcreve --security-opt seccomp:unconfined -v /home/murilo/docker/:/home/docker --gpus all -e NVIDA_DRIVER_CAPABILITIES=all -ti ubuntu:rolling /bin/bash

Detalhamento dos parâmetros:

--name Define um nome para o container
--security-opt seccomp:unconfined Permite a instalação de novos pacotes no container via apt
-v /home/murilo/docker/:/home/docker Mapeia o diretório /home/murilo/docker para /home/docker no container
--gpus all -e NVIDA_DRIVER_CAPABILITIES=all Libera todas as capacidades da placa de vídeo para o container

Configuração do container

Inicialmente, instalaremos alguns pacotes necessários para prosseguirmos com a configuração.

apt install -y bash-completion vim software-properties-common python3 wget git ffmpeg

Vamos então alterar o arquivo /etc/bash.bashrc, removendo os comentários das linhas a seguir para permitir o bash-completion

# enable bash completion in interactive shells
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

Remova o arquivo /etc/apt/apt.conf.d/docker-clean para o bash-completion funcionar também com o apt.

Depois disso, execute os comandos para atualizar o apt.

apt clean
apt autoclean
apt update

Instalação do Anaconda

Para instalar o Anaconda, execute os comandos, substituindo pela URL mais atual do Anaconda:

wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh
chmod +x Anaconda3-2024.06-1-Linux-x86_64.sh 
/Anaconda3-2024.06-1-Linux-x86_64.sh

Após o download, execute a instalação.

chmod +x Anaconda3-2024.06-1-Linux-x86_64.sh 
./Anaconda3-2024.06-1-Linux-x86_64.sh 

Após a instalação, adicionar o Anaconda ao PATH, editando o arquivo /root/.bashrc e adicionando o texto a seguir no final:

export PATH=/root/anaconda3/condabin/:$PATH

Execute os comandos:

conda init bash
exit

Saia do container. Entre novamente no container e execute:

conda activate env
conda install numpy ninja pyyaml mkl mkl-include setuptools cmake cffi

Instalando o Whisper

Para instalar o Whisper, execute o comando:

pip install openai-whisper

Instalando o PyAnnote.Audio

Para instalar o pyannote.audio, execute o comando a seguir:

pip install pyannote.audio

Aparecerão erros de compatibilidade mas podemos ignorar por enquanto.

Instalando o pyannote-whisper

Para instalar o pyannote-whisper, primeiro devemos clonar o git do projeto.

git clone https://github.com/yinruiqing/pyannote-whisper.git

Depois, entraremos no diretório do pyannote-whisper e realizamos a instalação.

cd pyannote-whisper/
pip install .

Configurando o pyannote-whisper

Para configurar, devemos criar um token no site huggingface, com permissões para leitura, e depois colar no código, no local indicado, no arquivo /root/anaconda3/lib/python3.12/site-packages/pyannote_whisper/cli/transcribe.py.

if diarization:
        from pyannote.audio import Pipeline
        pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization",
                                            use_auth_token="ENTRE SEU TOKEN")

É necessário alterar uma linha de código do arquivo também para consertar a chamada do Whisper:

from whisper import load_model

    devices = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    model = load_model(model_name, device=devices, download_root=model_dir)


    #model = load_model(model_name, device=device, download_root=model_dir)

Também é necessário outra alteração para utilizar o CUDA, logo depois da inicialização do pipeline, no mesmo arquivo.

from pyannote.audio import Pipeline
        pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization",
                                            use_auth_token="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")
        # Adiciona a linha a seguir para utilizar o cuda
        pipeline = pipeline.to(torch.device('cuda:0'))

O ambiente deve estar pronto para executar a diarização.

Teste com o comando a seguir:

python -m pyannote_whisper.cli.transcribe --model tiny --device gpu --verbose False --language Portuguese  --threads 10 --diarization True --output_format SRT audio.wav

O arquivo de áudio precisa estar em wav.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment