feat: criado repositório jhonny-editor no Gitea
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: - 48 arquivos alterados - 26 novos - 19 modificados - 3 removidos 22 files changed, 658 insertions(+), 568 deletions(-) Arquivos: - AGENTS.md - admin/DEV-NOTES.md - admin/OpenCut.command - admin/commit.command - admin/deploy.command - admin/update.command - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css - code/engine/ARQUITETURA.md - code/engine/arquitetura/README.md - code/engine/gerar_relatorio_timeline.py - code/engine/integracoes/apple_speech/apple_speech_transcriber.swift - code/engine/integracoes/apple_speech/provider_de_transcricao_apple.py - code/engine/integracoes/midia/__init__.py - code/engine/integracoes/whisper/provider_de_transcricao_local.py - code/engine/scanner/__init__.py - code/engine/scanner/coordenacao/__init__.py - code/engine/scanner/descoberta/__init__.py - code/engine/scanner/modelos.py - code/engine/scanner/transcricao_da_timeline.py - code/src/tools/discovery.ts - :memory:.ses - admin/Jhonny.command - admin/inativos/OpenCut.command - admin/inativos/update.command - code/docs/glossario-analise-emocional.md - code/docs/levantamento-apple-vision-e-apple-intelligence.md - code/docs/levantamento-ferramentas-analise-visual-local.md - code/engine/arquitetura/biblioteca-inteligente-de-videos.md - code/engine/executar_scanner.py - code/engine/integracoes/huggingface/ - code/engine/integracoes/midia/extracao_de_metadados.py - code/engine/integracoes/visual/ - code/engine/requirements-visual.txt - code/engine/scanner/configuracao_visual.py - code/engine/scanner/descoberta/descoberta_de_arquivos.py - code/engine/scanner/metadados.py - code/engine/scanner/relatorio_visual.py - code/engine/scanner/retakes/ - code/engine/scanner/visual.py - code/engine/testes/test_analise_visual_local.py - code/engine/testes/test_arquivos_e_metadados.py - code/engine/testes/test_provider_de_transcricao_apple.py - code/relatorios/analise-brools/ - code/relatorios/analise-visual/ - code/relatorios/audio/arquivos/ - code/relatorios/transcricao-timeline.md
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
# Teste de transcrição local — `0E6A8870.MP4`
|
||||
|
||||
## Configuração
|
||||
|
||||
- Modelo: `faster-whisper-base`
|
||||
- Idioma: `pt`
|
||||
- Dispositivo: CPU
|
||||
- Quantização: `int8`
|
||||
- Provider: `ProviderDeTranscricaoLocal`
|
||||
- Origem: `/Volumes/Merongo/PROJETOS/brools/0E6A8870.MP4`
|
||||
- Duração do vídeo: aproximadamente `6,05 s`
|
||||
|
||||
## Desempenho
|
||||
|
||||
| Medição | Resultado |
|
||||
|---|---:|
|
||||
| Carregamento do modelo | 1,849 s |
|
||||
| Transcrição | 0,802 s |
|
||||
| Memória máxima do processo | aproximadamente 665 MB |
|
||||
|
||||
## Resultado temporal
|
||||
|
||||
| Início | Fim | Texto reconhecido |
|
||||
|---:|---:|---|
|
||||
| 0,000 s | 6,000 s | “a mais é fazer bem pesado, porque não vai fazer as boguinhas que a gente ame de 11, então aqui...” |
|
||||
|
||||
## Observações
|
||||
|
||||
O processamento local funcionou sem autorização do Apple Speech e sem acesso de rede. O modelo `base` foi rápido para este arquivo curto, mas a transcrição apresenta baixa clareza em parte do trecho; a qualidade deve ser comparada com o modelo `small` antes de escolher o perfil definitivo.
|
||||
|
||||
Para o catálogo SQLite, este resultado deve ser persistido como um segmento de transcrição associado ao identificador do ativo e à versão do modelo. O modelo carregado deve permanecer reutilizável pelo worker, evitando pagar o custo de 1,849 s a cada arquivo.
|
||||
@@ -0,0 +1,64 @@
|
||||
# Teste de indexação — `0E6A8873.MP4`
|
||||
|
||||
## Identificação do ativo
|
||||
|
||||
- Origem: `/Volumes/Merongo/PROJETOS/brools/0E6A8873.MP4`
|
||||
- Tamanho: `354.817.464` bytes
|
||||
- Fingerprint parcial SHA-256: `d1072c11b67454a6e2eb0422ca037b1648a1ed05725ab2064c2e01d7194f2fdc`
|
||||
- Duração: `23,315 s`
|
||||
- Vídeo: H.264, `3840 × 2160`, aproximadamente `23,976 FPS`
|
||||
- Áudio: AAC, 2 canais, `48 kHz`
|
||||
|
||||
## Resultado por etapa
|
||||
|
||||
| Etapa | Status | Tempo | Resultado |
|
||||
|---|---|---:|---|
|
||||
| FFprobe/metadados | concluída | 0,097 s | Metadados técnicos lidos |
|
||||
| Extração de áudio | concluída | 0,078 s | WAV mono, 16 kHz, 745.570 bytes |
|
||||
| Amostragem visual simples | concluída | 2,147 s | 23 frames, 1 FPS, reduzidos para 640 px |
|
||||
| Apple Speech `pt-BR` on-device | autorização pendente | 0,011 s | Código 4: permissão não concedida |
|
||||
|
||||
## Interpretação
|
||||
|
||||
O pipeline barato de preparação é viável para processamento em segundo plano. Para este arquivo, a leitura técnica e a extração de áudio são praticamente instantâneas; a amostragem visual reduzida é a etapa mais custosa entre as etapas executadas, mas ainda terminou em aproximadamente 2,1 segundos.
|
||||
|
||||
O Apple Speech não apresentou mais o crash `SIGABRT`. O processo Foundation-only iniciou normalmente e retornou um erro controlado de autorização. Depois que o bundle receber permissão de reconhecimento de fala no macOS, esta mesma etapa poderá ser repetida sem alterar o catálogo nem as etapas já concluídas.
|
||||
|
||||
## Como isso será armazenado no SQLite
|
||||
|
||||
Este teste deverá produzir, conceitualmente:
|
||||
|
||||
```text
|
||||
ativos
|
||||
id = UUID interno
|
||||
caminho_relativo = 0E6A8873.MP4
|
||||
fingerprint = d1072...
|
||||
tamanho = 354817464
|
||||
duracao = 23.314958
|
||||
status = parcial
|
||||
|
||||
trabalhos_de_indexacao
|
||||
ativo_id = ...
|
||||
etapa = metadados
|
||||
status = concluida
|
||||
tempo = 0.097
|
||||
|
||||
trabalhos_de_indexacao
|
||||
ativo_id = ...
|
||||
etapa = amostragem_visual
|
||||
status = concluida
|
||||
checkpoint = 23.315
|
||||
|
||||
trabalhos_de_indexacao
|
||||
ativo_id = ...
|
||||
etapa = transcricao
|
||||
status = aguardando_autorizacao
|
||||
provider = Apple Speech
|
||||
locale = pt-BR
|
||||
```
|
||||
|
||||
Os frames e o WAV são cache reconstruível e não devem ser tratados como o cadastro principal. Quando houver transcrição e análise visual, seus segmentos e evidências serão gravados com timestamps no arquivo de origem.
|
||||
|
||||
## Próximo teste
|
||||
|
||||
Conceder a permissão do Apple Speech ao bundle do transcritor e repetir somente a etapa de transcrição deste arquivo. Em seguida, comparar a qualidade do resultado antes de enfileirar os demais 23 arquivos.
|
||||
@@ -0,0 +1,50 @@
|
||||
# Descrição preliminar das cenas — próximos quatro vídeos
|
||||
|
||||
## Escopo
|
||||
|
||||
Este relatório complementa `proximos-4-transcricoes.md`. A transcrição foi executada
|
||||
com `ProviderDeTranscricaoLocal`; a análise visual foi tentada através de
|
||||
`AnalisadorAppleVisionNativo.analisar(QuadroDeVideo)`, usando frames PNG reduzidos
|
||||
para 640 px de largura.
|
||||
|
||||
## Observações preliminares dos frames amostrados
|
||||
|
||||
Estas descrições são uma inspeção visual dos frames de teste e ainda não devem ser
|
||||
gravadas como evidência automática definitiva no catálogo.
|
||||
|
||||
| Arquivo | Descrição preliminar |
|
||||
|---|---|
|
||||
| `0E6A8871.MP4` | Close de uma mão segurando uma caneta sobre um tablet. A tela mostra um diagrama de rosto com marcações/pontos; a ação principal é indicar ou marcar regiões do rosto. |
|
||||
| `0E6A8872.MP4` | Mulher de blusa vermelha e cabelo preso demonstra algo usando uma caneta e um tablet com diagrama facial. Há alternância entre enquadramento da apresentadora e close do tablet/caneta. |
|
||||
| `0E6A8873.MP4` | Demonstração presencial: mulher de blusa vermelha aparece junto de outra pessoa em posição reclinada e, em outro momento, junto de uma pessoa sentada. A atividade visível parece envolver indicação/avaliação da região facial, mas a finalidade não foi inferida. |
|
||||
| `0E6A8874.MP4` | Plano médio frontal da mulher de blusa vermelha falando e gesticulando. Em alguns momentos ela aponta ou toca o próprio rosto; há um objeto/tablet no primeiro plano. |
|
||||
|
||||
## Resultado técnico da tentativa automática
|
||||
|
||||
O adapter existente foi chamado corretamente, sem criar uma implementação paralela:
|
||||
|
||||
```text
|
||||
AnalisadorAppleVisionNativo(
|
||||
recursos=("pessoas", "categorias", "ocr"),
|
||||
interpretar_com_apple_intelligence=False,
|
||||
).analisar(QuadroDeVideo(...))
|
||||
```
|
||||
|
||||
O retorno não trouxe `pessoas`, `categorias` nem `ocr`. Trouxe somente uma
|
||||
evidência `diagnostico_apple_vision`, com estes avisos:
|
||||
|
||||
- `pessoas`: falha ao carregar o modelo ANE do Vision;
|
||||
- `ocr`: erro genérico do framework;
|
||||
- `categorias`: falha ao criar `CVPixelBufferPool` com dimensões zeradas.
|
||||
|
||||
O fallback `AnalisadorDeRostosOpenCV`, `AnalisadorDeComposicaoOpenCV` e
|
||||
`AnalisadorDeQualidadeOpenCV` também não pôde ser executado neste teste porque o
|
||||
interpretador usado pelo engine não possui `cv2` instalado.
|
||||
|
||||
## Decisão para o catálogo
|
||||
|
||||
As descrições acima devem ficar, por enquanto, como resultado de validação manual
|
||||
do teste. O catálogo deve armazenar a etapa visual como `parcial`/`indisponível`,
|
||||
preservando os avisos técnicos e os frames amostrados para reprocessamento. Não
|
||||
devemos registrar como fato automático algo que o Vision não confirmou.
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
# Teste de transcrição — próximos quatro vídeos
|
||||
|
||||
## Configuração comum
|
||||
|
||||
- Provider: `ProviderDeTranscricaoLocal`
|
||||
- Modelo: `faster-whisper-base`
|
||||
- Idioma: `pt-BR`
|
||||
- Dispositivo: CPU
|
||||
- Cálculo: `int8`
|
||||
- Modelo carregado uma única vez: `1,613 s`
|
||||
- Memória máxima observada no processo: aproximadamente `805 MB`
|
||||
|
||||
## Desempenho
|
||||
|
||||
| Arquivo | Duração | Tempo de transcrição |
|
||||
|---|---:|---:|
|
||||
| `0E6A8871.MP4` | 5,797 s | 4,213 s |
|
||||
| `0E6A8872.MP4` | 17,726 s | 1,377 s |
|
||||
| `0E6A8873.MP4` | 23,315 s | 1,737 s |
|
||||
| `0E6A8874.MP4` | 14,556 s | 1,300 s |
|
||||
|
||||
Tempo de transcrição dos quatro arquivos: `8,627 s`, além do carregamento inicial do modelo.
|
||||
|
||||
## Segmentos reconhecidos
|
||||
|
||||
### `0E6A8871.MP4`
|
||||
|
||||
- `[0,000–3,840]` Tende um pouquinho mais aqui, acho que pode dratar um pouquinho mais a pé, se eu
|
||||
- `[3,840–5,580]` doutora do entratante, a noite, ouzo.
|
||||
|
||||
### `0E6A8872.MP4`
|
||||
|
||||
- `[0,000–3,360]` Então, por isso que eu vou fazer tanto, não se paguei nem com um pouquinho mais lá para trás.
|
||||
- `[4,120–10,580]` E, espero, por biculares aqui, que é o musco orbicular da boca, que ele serve com o esfímpere, ele fecha sim, né?
|
||||
- `[10,900–14,700]` Então, quando você faz o biquinho, fica três movinhas de um lado,
|
||||
- `[15,020–17,680]` é uma, dois de cada lado, basicamente só que essas daqui são um pouco...
|
||||
|
||||
### `0E6A8873.MP4`
|
||||
|
||||
- `[0,000–4,700]` é que essa parte aqui em perior tem alguns que soem aqui, tem um pouquinho de
|
||||
- `[4,700–8,960]` classidente de pés, né? Então isso, quando eu passei em dia, tem uma certa
|
||||
- `[8,960–12,840]` classidade, a gente não bloqueia tanto justamente porque esse bloqueia
|
||||
- `[12,840–15,940]` vai parecer que está mais classindo ainda, porque daí é um
|
||||
- `[15,940–20,180]` muito bom explotido, isso vai ficar mais explotidamente. Então quando tem uma
|
||||
- `[20,180–23,260]` sobre eu, quando você tem bolsa, daí a gente não faz aqui...
|
||||
|
||||
### `0E6A8874.MP4`
|
||||
|
||||
- `[0,000–2,740]` O profissão da pele, porque a gente está tratando músculo,
|
||||
- `[2,860–5,880]` a gente está enfraquecendo músculos que estão mudando impressões na pele.
|
||||
- `[6,280–8,900]` Mas quando a pele está muito fininha que é a parte da Pávera,
|
||||
- `[9,020–12,700]` a gente tem que tratar a pele como um todo, da parte de dermatológica, entendeu?
|
||||
- `[13,000–14,520]` Então, por isso que a gente não pode fazer...
|
||||
|
||||
## Avaliação
|
||||
|
||||
O desempenho é suficiente para um worker de baixa prioridade, especialmente porque o modelo fica carregado e é reutilizado. A qualidade do `base` é compreensível, mas há erros fonéticos relevantes em termos técnicos. Para o catálogo, esses segmentos ainda são úteis para busca aproximada; para texto final de edição, o próximo experimento deve comparar o mesmo conjunto com `faster-whisper-small`.
|
||||
|
||||
Cada segmento deverá ser salvo no SQLite com `ativo_id`, `inicio`, `fim`, `texto`, `modelo`, `provider`, `idioma`, `confianca` quando disponível e versão da etapa.
|
||||
Reference in New Issue
Block a user