Detector de Secretária Eletrônica por Processamento de Sinais

← voltar ao portfólio

08/2026 · 1 semana

Detecta secretária eletrônica por cadência de fala, sem IA, sem modelo e sem treino — com o resultado medido em 80 chamadas reais.

PythonNumPyffmpegGoertzelpytestAsterisk

O problema

Discador que não distingue pessoa de caixa postal desperdiça o tempo mais caro da operação: o do agente. A resposta usual hoje é transcrever a chamada e perguntar a um modelo de linguagem, o que custa segundos de GPU por ligação e não roda offline. O algoritmo clássico do Asterisk resolve isso em C, dentro do dialplan, mas fica preso lá: não dá para usar sobre gravação, em lote, ou dentro de um pipeline de análise.

A arquitetura

Porte fiel do app_amd.c para Python/NumPy, decidindo apenas por cadência: quanto tempo houve silêncio antes da fala, quanto durou o bloco contínuo de fala e quantos blocos existiram. A intuição é velha e sólida — quem atende diz alô e espera resposta, enquanto a secretária eletrônica emenda uma saudação longa sem pausa. Os nomes de status e causa são os mesmos do Asterisk (MACHINE/LONGGREETING, MAXWORDS, INITIALSILENCE, MAXWORDLENGTH; HUMAN; NOTSURE/TOOLONG), assim como os parâmetros do amd.conf, para que a configuração já ajustada em produção seja reaproveitada sem tradução. A detecção de bipe usa o algoritmo de Goertzel, mais barato que uma FFT completa quando se procura uma frequência conhecida. As dependências são NumPy e ffmpeg, e nada mais: sem rede, sem GPU, sem modelo em disco.

O resultado

Em 80 gravações reais de discador no pior cenário para o método — áudio pós-atendimento com as duas pernas misturadas — obteve 100% de recall em máquina (37 de 37) e 78% de acurácia global. O erro é conservador na direção certa: nenhuma máquina escapa, mas 37% dos humanos são marcados como máquina, e a análise mostra que isso vem de o áudio conter a URA de oferta, não de falha do algoritmo. Serve como pré-filtro: tudo classificado como HUMAN pode ser aceito sem segunda opinião, o que corta 34% do trabalho antes de qualquer etapa cara. São 428 linhas de teste para 584 de código, e a documentação registra a armadilha de VAD que quase produziu a conclusão falsa de que AMD sem IA não funciona.

A decisão por cadência: o que separa um alô de uma saudação de caixa postal
A decisão por cadência: o que separa um alô de uma saudação de caixa postal
Resultado medido em 80 chamadas reais, com a leitura de cada número
Resultado medido em 80 chamadas reais, com a leitura de cada número

🔒 Código-fonte

git clone https://git.programandosolucoes.com.br/git/repos/amd-dsp.git

Código-fonte privado. As credenciais de leitura são liberadas sob solicitação — me chame para conversar sobre o projeto.

Carlos Alberto — carlosalberto4ti@gmail.com · +55 11 2615-2880