Reconhecimento de fala com identificação de falantes (WhisperX)#

Este procedimento exige acesso ao diretorio de instalacao, as configuracoes do servidor e ao Docker. Os valores anteriores dos parametros Whisper devem ser salvos para reversao. No Chat, o Modelo de transcricao atribuido a Conta tem prioridade. Se sua Instancia ativa for usada, ela deve apontar para o Whisper local e solicitar large-v2. Alterar .env nao redireciona automaticamente uma Instancia externa para o servico local.

Este guia explica como habilitar no Sherpa AI Server a transcrição local de áudio e vídeo com separação de falantes (diarização). O processamento ocorre inteiramente no seu servidor, sem serviços externos nem acesso à internet durante a execução.

Os trechos de fala reconhecidos com locutor identificado recebem uma identificação de falante (speaker_1, speaker_2 e assim por diante) e marcas de tempo. As identificações começam em 1, na ordem em que os falantes aparecem na gravação. Elas são incluídas no resultado da API e no contexto do LLM como linhas do tipo [0:00:05] speaker_1: Привет. A interface do Chat não tem uma tela separada para os falantes.

Requisitos#

Antes de habilitar o método, verifique se:

  • o Sherpa AI Server está instalado e o serviço aiserver-whisper é executado com o perfil whisper ou full;
  • o Whisper usa uma GPU NVIDIA (consulte Mudar o Whisper de CPU para GPU); em CPU, esse método funciona muito lentamente;
  • você possui o arquivo de modelos model-whisperx-large-v2.tar.gz (cerca de 3 GB) e espaço suficiente em disco;
  • a versão da imagem aiserver-whisper oferece suporte ao método whisperx.

O arquivo large-v2.pt do método padrão base não é adequado para o WhisperX: o WhisperX usa outro formato de modelos. Não é necessário excluir os arquivos de modelos existentes.

Etapa 1. Extraia os modelos#

No diretório de instalação, execute:

tar -xzvf model-whisperx-large-v2.tar.gz -C ./whisper/models
ls ./whisper/models/whisperx

O diretório ./whisper/models/whisperx deve aparecer ao lado dos arquivos de modelos existentes.

Etapa 2. Habilite o método em .env#

É necessário abrir .env e defina os seguintes valores no bloco # !whisper:

WHISPER_METHOD=whisperx
WHISPER_MODEL=large-v2
WHISPER_DEFAULT_MODEL=large-v2
WHISPERX_DIARIZE=true

Parâmetros adicionais:

Parâmetro Finalidade
WHISPERX_DIARIZE true — separar falantes (padrão); false — apenas transcrição com marcas de tempo
WHISPERX_NUM_SPEAKERS Número exato de falantes, se conhecido. Deixe vazio para detectar automaticamente
WHISPERX_BATCH_SIZE Reduza o valor se ocorrer o erro CUDA out of memory

Etapa 3. Aplicar as configuracoes do servidor e do Whisper#

Os conteineres do servidor e do Whisper devem ser recriados para aplicar os novos parametros de .env, incluindo WHISPER_DEFAULT_MODEL no servidor. O comando usa as imagens locais sem compilar ou baixar. O reinicio do servidor deve ser programado para um momento adequado:

docker compose --profile whisper up -d --no-build --pull never --force-recreate aiserver aiserver-whisper

Etapa 4. É necessário verificar o funcionamento#

curl -sS http://127.0.0.1:3005/health

A resposta deve conter "method":"whisperx" e "diarization_enabled":true.

Essa resposta confirma a configuracao do servico. Nao comprova que os pesos foram carregados nem que a transcricao foi concluida: os pesos sao carregados na primeira solicitacao. O resultado deve ser verificado processando audio pela rota local selecionada.

Em seguida, anexe no Chat um áudio ou vídeo com uma conversa entre duas pessoas e envie uma mensagem. O texto da transcrição enviado ao LLM incluirá as identificações speaker_1 e speaker_2 com marcas de tempo.

Uma gravação curta pode ser enviada diretamente à API local do Whisper para verificar o resultado. A variável do terminal WHISPER_API_KEY deve conter uma chave válida desse serviço quando a verificação de chave estiver ativada. Se o serviço não tiver chave configurada, o cabeçalho Authorization do exemplo não é necessário.

curl -fsS http://127.0.0.1:3005/v1/audio/transcriptions \
  -H "Authorization: Bearer $WHISPER_API_KEY" \
  -F "file=@./meeting.wav" \
  -F "model=large-v2" \
  -F "response_format=verbose_json"

A lista segments da resposta deve ser verificada: text reconhecido, marcas de tempo start e end, e speaker nos trechos cujo locutor foi identificado. A ausência de speaker não significa que o autor do trecho foi identificado. Se a solicitação falhar, os pesos, a disponibilidade de GPU e a mensagem do serviço devem ser verificados. Um /health bem-sucedido não confirma esse resultado sozinho.

Limitações#

  • O processamento demora mais que a transcrição padrão. Para gravações longas, verifique os tempos limite das solicitações.
  • Se as vozes se sobrepuserem muito, podem ocorrer erros na identificação dos falantes.
  • O método não identifica nomes reais: atribui apenas identificações speaker_N.
  • Este método não usa os parâmetros prompt e temperature.

Reversão#

Para reverter, os valores anteriores dos parametros Whisper salvos em .env devem ser restaurados e a etapa 3 repetida para ambos os conteineres. Os pesos do Modelo anterior devem estar disponiveis.