Skip to content

Análise multimodal de vídeos: detecção de deepfake (ViT + FaceNet) + transcrição (Whisper) + verificação de fatos (Gemini)

License

Notifications You must be signed in to change notification settings

botanarede/verita

Repository files navigation

Detector de Deepfake e Desinformação em Vídeos

Sistema de análise multimodal para verificação de autenticidade em vídeos, combinando detecção de manipulação visual (deepfake), transcrição de áudio e verificação de fatos com busca em tempo real.

Propósito

Identificar vídeos manipulados digitalmente (deepfakes) e verificar a veracidade do conteúdo falado, gerando um relatório estruturado com classificação de risco.

Arquitetura

O sistema processa vídeos em três etapas sequenciais:

1. Análise Visual (Detecção de Deepfake)

Detecta manipulações digitais em rostos:

  • Extração de frames: Coleta 20 frames uniformemente distribuídos (pool de densidade)
  • Detecção facial: Localiza rostos usando YuNet (OpenCV DNN)
  • Agrupamento por identidade: Agrupa rostos similares usando embeddings FaceNet com clustering hierárquico (threshold ~0.6)
  • Seleção inteligente: Escolhe os 5 melhores frames da pessoa principal por qualidade (área × confiança)
  • Classificação: Analisa cada rosto com Vision Transformer (ViT) para detectar artefatos de manipulação
  • Agregação: Se score máximo > 90%, usa o máximo; senão, média dos 3 maiores scores

Saída: fake_score (0-1), visual_status (REAL/AUTÊNTICO, SUSPEITO ou DEEPFAKE)

2. Transcrição de Áudio

Extrai e transcreve o conteúdo falado:

  • Extração: Separa áudio do vídeo usando FFmpeg (WAV 16kHz, mono)
  • Transcrição: Usa Whisper (modelo small) para converter fala em texto português

Saída: Texto completo do áudio

3. Verificação de Fatos (Fact-Checking)

Analisa o conteúdo textual e visual com busca em tempo real:

  • Identificação: Identifica a pessoa no vídeo usando análise de imagem
  • Busca na web: Consulta a internet em tempo real via Google Search Grounding
  • Análise de interseção: Verifica se a pessoa tem histórico de falar sobre o assunto
  • Verificação de afirmações: Classifica cada claim como VERDADEIRO, FALSO ou NAO_VERIFICAVEL
  • Classificação de risco: Avalia perigo para saúde pública ou democracia (ALTO, MEDIO, BAIXO)

Saída: Veredito, confiança, afirmações verificadas, fontes citáveis

4. Fusão Multimodal

Combina análises visual e semântica:

  • Score ponderado: Score Final = (Visual × 0.6) + (Semântico × 0.4)
  • Lógica de segurança: Se conteúdo é FALSO e ALTO RISCO, o veredito prioriza o perigo (desinformação perigosa não é escudada por sátira)

Saída: Classificação final, score multimodal, análise completa

Tecnologias

Componente Tecnologia Função
Detecção de Deepfake ViT (prithivMLmods/Deep-Fake-Detector-v2-Model) Classificação de rostos como real ou manipulado
Detecção Facial YuNet (OpenCV DNN) Localização de rostos em frames
Agrupamento de Rostos FaceNet (facenet-pytorch) Extração de embeddings para clustering
Clustering SciPy (linkage, fcluster) Clustering hierárquico de embeddings
Transcrição de Áudio Whisper (OpenAI) Conversão de fala para texto
Verificação de Fatos Gemini 2.0 Flash Análise semântica com busca na web
Orquestração Python Coordenação do pipeline

Pré-requisitos

  • Python 3.10+
  • FFmpeg instalado no sistema
  • Chave de API do Gemini (GEMINI_API_KEY)

Instalação

# Clone o repositório
git clone <url-do-repositorio>
cd <nome-do-diretorio>

# Crie o ambiente virtual
python3 -m venv venv
source venv/bin/activate  # Linux/Mac
# ou .\venv\Scripts\Activate.ps1 no Windows

# Instale as dependências
pip install -r requirements.txt

Configuração

Crie um arquivo .env na raiz do projeto:

GEMINI_API_KEY=sua_chave_aqui

# Opcionais (valores padrão)
WHISPER_MODEL=small
DEEPFAKE_FRAMES=5
SAVE_FACES=true
DEEPFAKE_THRESHOLD=0.5
SKIP_TRANSCRIPTION=false
SKIP_FACTCHECK=false
SKIP_DEEPFAKE=false

Uso

python main.py caminho/para/video.mp4

Exemplo de Saída

🚀 Iniciando análise do vídeo: video.mp4

👁️  PASSO 1: Análise Visual (YuNet + Deepfake)...
   📥 Extraindo pool de frames: 20 frames...
   🔍 Escaneando pool para detecção facial... 20 rostos encontrados.
   🧠 Extraindo embeddings de rosto para clustering... 2 identidade(s) detectada(s)
   👤 Pessoa principal: 15 frames detectados
   ⚠️ Outras pessoas detectadas: 5 frames (ignorados)
   ✅ Selecionados 5 melhores frames da pessoa principal.
   Frame 1 (1500ms): Fake 6.5%
   Frame 2 (3000ms): Fake 6.7%
   ...

🎙️  PASSO 2: Transcrição (Whisper)...
   ✅ Texto extraído: 392 caracteres

🧠 PASSO 3: Checagem de Fatos (Gemini)...
   ✅ Veredito: VERDADEIRO
   👤 Pessoa: Nome da Pessoa
   📊 Confiança: 95.0%

============================================================
⚖️  RELATÓRIO DE ANÁLISE MULTIMODAL
============================================================
👁️  [VISUAL] Score: 7.1% (Peso 60%) -> Status: REAL/AUTÊNTICO
🧠 [SEMÂNT] Score: 0.0% (Peso 40%) -> Impersonation: 0/100
☢️  [RISCO ] Nível: BAIXO
------------------------------------------------------------
📊 SCORE FINAL: 4.3%
📢 VEREDITO: VERDADEIRO

💾 Resultado salvo em: results/analise_YYYYMMDD_HHMMSS.json

Campos do Resultado JSON

  • identities_detected: Número de identidades diferentes detectadas
  • main_identity_frames: Quantidade de frames da pessoa principal
  • afirmacoes: Array com cada afirmação verificada (status + evidência)
  • analise_intersecao: Análise de consistência entre pessoa, assunto e histórico
  • impersonation_score: 0-100 (0=pessoa real, 100=sósia/imitação)
  • risk_level: ALTO/MEDIO/BAIXO
  • final_classification: Veredito final unificado
  • fontes_web: Fontes citáveis usadas na verificação

Decisões Técnicas

Clustering de Identidade

O sistema usa FaceNet (InceptionResnetV1 pré-treinado em VGGFace2) para extrair embeddings de 512 dimensões de cada rosto detectado. O clustering hierárquico com threshold de distância euclidiana ~0.6 agrupa rostos da mesma pessoa, permitindo focar a análise na pessoa principal do vídeo.

Estratégia de Scoring

  • Se o score máximo de deepfake > 90%, usa o valor máximo (alta confiança de manipulação)
  • Caso contrário, usa a média dos 3 maiores scores (reduz falsos positivos)

Fusão Multimodal

Peso 60% para análise visual (ground truth técnico) e 40% para análise semântica (contexto). A lógica de segurança prioriza conteúdo perigoso sobre classificação de sátira.

Robustez de Resposta

O módulo de fact-checking usa maxOutputTokens de 4096 e implementa fallback via regex para extrair campos essenciais de respostas JSON truncadas ou malformadas.

Estrutura do Projeto

.
├── main.py                          # Orquestrador principal
├── deepfake_detector_hf.py          # Detecção de deepfake (ViT + YuNet + FaceNet)
├── gemini_checker.py                # Verificação de fatos (Gemini + Google Search)
├── transcriber.py                   # Transcrição de áudio (Whisper)
├── face_detection_yunet_2023mar.onnx # Modelo YuNet (baixado automaticamente)
├── requirements.txt                 # Dependências
├── .env.example                     # Exemplo de configuração
└── results/                         # Resultados das análises (JSON + imagens)

Licença

MIT

About

Análise multimodal de vídeos: detecção de deepfake (ViT + FaceNet) + transcrição (Whisper) + verificação de fatos (Gemini)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages