criado repositório jhonny-editor no Gitea adicionado script admin/deploy.command com commit automático atualizado admin/DEV-NOTES.md com template limpo Resumo: - 32 arquivos alterados - 16 novos - 15 modificados - 0 removidos 16 files changed, 638 insertions(+), 61 deletions(-) Arquivos: - code/engine/skills/boas-praticas-oo.md -> .agents/skills/boas-praticas-oo/SKILL.md - AGENTS.md - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css - code/engine/integracoes/visual/apple_vision.py - code/engine/integracoes/visual/apple_vision_runner.swift - code/engine/integracoes/visual/extrator_ffmpeg.py - code/engine/scanner/__init__.py - code/engine/scanner/configuracao_visual.py - code/engine/scanner/coordenacao/__init__.py - code/engine/scanner/retakes/adaptador_de_falas.py - code/engine/scanner/retakes/agrupador_de_takes.py - code/engine/scanner/retakes/detector_de_reinicios.py - code/engine/scanner/retakes/modelos_de_retakes.py - code/engine/scanner/visual.py - .jhonny/ - .retakes/ - CODING_STANDARDS.md - code/engine/executar_retakes.py - code/engine/persistencia/ - code/engine/scanner/retakes/__init__.py - code/engine/scanner/retakes/carregador_de_artefatos.py - code/engine/scanner/retakes/classificador_de_retakes.py - code/engine/scanner/retakes/coordenador_de_retakes.py - code/engine/scanner/retakes/deteccao_de_retakes.py - code/engine/scanner/retakes/gerador_de_evidencias.py - code/engine/scanner/retakes/repositorio_de_retakes.py - code/engine/testes/test_consultas_de_persistencia.py - code/engine/testes/test_deteccao_de_retakes.py - code/engine/testes/test_persistencia_sqlite.py - code/relatorios/audio/arquivos/92f97877259a86a8095b1eecafdefe357212a12247d04b78df60e0c0ae38b2ea/
87 lines
3.3 KiB
Python
87 lines
3.3 KiB
Python
"""Geração de evidências legíveis para cada grupo de retakes.
|
|
|
|
Produz uma lista estruturada ``{tipo, descricao, valor}`` que explica por
|
|
que duas falas foram consideradas retake — pronto para a interface do
|
|
painel descrever os motivos ao usuário.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .modelos_de_retakes import AgrupamentoDeFalas, ClassificacaoDeRetake, EvidenciaDeRetake
|
|
|
|
|
|
class GeradorDeEvidencias:
|
|
"""Monta as evidências de um grupo a partir do agrupamento e da categoria."""
|
|
|
|
def gerar(
|
|
self,
|
|
agrupamento: AgrupamentoDeFalas,
|
|
classificacao: ClassificacaoDeRetake,
|
|
) -> list[EvidenciaDeRetake]:
|
|
evidencias: list[EvidenciaDeRetake] = []
|
|
if not agrupamento.pares:
|
|
return evidencias
|
|
|
|
par = max(agrupamento.pares,
|
|
key=lambda item: item.comparacao.similaridade_final)
|
|
comp = par.comparacao
|
|
estado = "É um retake provável." if classificacao.tipo == "retake_confirmado" else (
|
|
"Pode ser um retake." if classificacao.tipo == "possivel_retake" else "Repetição detectada.")
|
|
|
|
evidencias.append(EvidenciaDeRetake(
|
|
tipo="similaridade_textual",
|
|
descricao=(
|
|
f"As duas falas possuem {comp.similaridade_jaccard * 100:.0f}% "
|
|
f"de palavras em comum e {comp.similaridade_final * 100:.0f}% de "
|
|
f"similaridade textual geral."
|
|
),
|
|
valor=comp.similaridade_final,
|
|
))
|
|
|
|
if par.similaridade_semantica > 0:
|
|
evidencias.append(EvidenciaDeRetake(
|
|
tipo="similaridade_semantica",
|
|
descricao=f"Semanticamente, as falas têm {par.similaridade_semantica * 100:.0f}% de afinidade.",
|
|
valor=par.similaridade_semantica,
|
|
))
|
|
|
|
if comp.similaridade_do_inicio >= 0.8:
|
|
evidencias.append(EvidenciaDeRetake(
|
|
tipo="repeticao_do_inicio",
|
|
descricao="As duas falas começam com as mesmas palavras.",
|
|
valor=comp.similaridade_do_inicio,
|
|
))
|
|
|
|
evidencias.append(EvidenciaDeRetake(
|
|
tipo="proximidade_temporal",
|
|
descricao=(
|
|
f"A segunda tentativa começa {par.intervalo.intervalo_em_segundos:.1f} "
|
|
f"segundos após a primeira."
|
|
),
|
|
valor=par.intervalo.proximidade_temporal,
|
|
))
|
|
|
|
for sinal in agrupamento.sinais_de_reinicio:
|
|
for detalhe in sinal.evidencias:
|
|
evidencias.append(EvidenciaDeRetake(
|
|
tipo="reinicio",
|
|
descricao=detalhe,
|
|
valor=sinal.intensidade,
|
|
))
|
|
|
|
if par.mudanca_visual_proxima:
|
|
evidencias.append(EvidenciaDeRetake(
|
|
tipo="mudanca_visual_proxima",
|
|
descricao=(
|
|
"Há um corte visual próximo: as tentativas podem estar em "
|
|
"tomadas diferentes, reforçando a hipótese de retake."
|
|
),
|
|
valor=1.0,
|
|
))
|
|
|
|
evidencias.append(EvidenciaDeRetake(
|
|
tipo="classificacao",
|
|
descricao=f"{estado} Confiança de {classificacao.confianca * 100:.0f}%.",
|
|
valor=classificacao.confianca,
|
|
))
|
|
return evidencias |