feat: removido o tamanho do modelo do seletor da tela Editar vídeo
- removido o tamanho do modelo do seletor da tela Editar vídeo - acelerada a transcrição do Scanner com inferência Whisper em lote e cache de hashes - garantido um resultado separado para cada clipe de áudio selecionado no Scanner - adicionado cancelamento do processamento do Scanner pela barra de progresso - exibido estado visual próprio para Scanner cancelado na barra de progresso - criado modo explícito de análise do Scanner para separar som, imagem ou ambos - adicionadas métricas opcionais de fala ao Scanner com análise acústica na engine - corrigido o progresso da transcrição do Scanner durante o processamento do Whisper - refatorado o runner Swift do Apple Vision para executar requests em lote com retry CPU-only, corrigindo falhas de CVPixelBuffer/ANE/OCR - documentado o fluxo de edição de vídeo por voz integrado ao Scanner, banco e engine - formalizado o protocolo de edição por chat com perfil editorial e consultas progressivas - gerado plano JSON de corte para depoimento vertical da Erika no Instagram - esquematizado o fluxo de colar e executar planos da IA pela engine após o Scanner - ajustado o plano para manter somente as três etapas existentes da tela de edição - adicionado processamento incremental de locutores e métricas no Scanner com confirmação de reprocessamento - implementado o plano JSON colado na tela e a persistência idempotente das análises do Scanner Resumo: - 8 arquivos alterados - 1 novos - 7 modificados - 0 removidos 7 files changed, 437 insertions(+), 55 deletions(-) Arquivos: - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css - code/engine/executar_scanner.py - code/engine/persistencia/repositorio_de_analises_sqlite.py - code/engine/testes/test_persistencia_sqlite.py - docs/PLANO-EDICAO-DE-VIDEO-POR-VOZ.md - code/relatorios/plano-edicao-depoimento-erika-instagram.json
This commit is contained in:
@@ -156,6 +156,43 @@ class TesteRepositorioDeAnalisesSQLite(unittest.TestCase):
|
||||
self.assertEqual(recarregado.caracteristicas_acusticas, {"pitch_medio": 120.5})
|
||||
self.assertEqual(recarregado.voz_aparente, "masculina")
|
||||
|
||||
def test_substituir_transcricoes_nao_duplica_ao_reprocessar(self):
|
||||
with tempfile.TemporaryDirectory() as pasta:
|
||||
repositorio = RepositorioDeAnalisesSQLite(Path(pasta) / "analises.db")
|
||||
primeiro = TranscricaoDoClipe(
|
||||
"clip-1", "/v.mp4", 0.0, 2.0,
|
||||
[SegmentoDeTranscricao(0.0, 1.0, "primeira versão", 0.9)],
|
||||
)
|
||||
segundo = TranscricaoDoClipe(
|
||||
"clip-1", "/v.mp4", 0.0, 2.0,
|
||||
[SegmentoDeTranscricao(0.0, 1.0, "segunda versão", 0.95)],
|
||||
)
|
||||
|
||||
repositorio.substituir_transcricoes("v1", [primeiro])
|
||||
repositorio.substituir_transcricoes("v1", [segundo])
|
||||
carregados = repositorio.carregar_transcricoes("v1", "clip-1")
|
||||
|
||||
self.assertEqual(len(carregados), 1)
|
||||
self.assertEqual(carregados[0].texto, "segunda versão")
|
||||
|
||||
def test_atualizar_enriquecimento_persiste_falante_e_metricas(self):
|
||||
with tempfile.TemporaryDirectory() as pasta:
|
||||
repositorio = RepositorioDeAnalisesSQLite(Path(pasta) / "analises.db")
|
||||
segmento = SegmentoDeTranscricao(0.0, 2.0, "fala", 0.9)
|
||||
repositorio.registrar_transcricoes(
|
||||
"v1", [TranscricaoDoClipe("clip-1", "/v.mp4", 0.0, 2.0, [segmento])],
|
||||
)
|
||||
|
||||
repositorio.atualizar_enriquecimento_de_transcricao(
|
||||
"v1", "clip-1", 0.0, 2.0,
|
||||
falante="SPEAKER_00",
|
||||
caracteristicas_acusticas={"energia_rms": 0.12},
|
||||
)
|
||||
carregado = repositorio.carregar_transcricoes("v1", "clip-1")[0]
|
||||
|
||||
self.assertEqual(carregado.falante, "SPEAKER_00")
|
||||
self.assertEqual(carregado.caracteristicas_acusticas, {"energia_rms": 0.12})
|
||||
|
||||
def test_registrar_evidencias_visuais_e_cenas(self):
|
||||
with tempfile.TemporaryDirectory() as pasta:
|
||||
repositorio = RepositorioDeAnalisesSQLite(Path(pasta) / "analises.db")
|
||||
|
||||
Reference in New Issue
Block a user