Files
João Henrique b9bf3b2863 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
2026-09-08 16:13:27 -04:00

48 lines
2.0 KiB
Python

"""Executável interno isolado para evitar que falhas nativas do MediaPipe derrubem o Scanner."""
import json
import sys
from pathlib import Path
def _pontos(landmarks, visibilidade: bool = False):
return [{"x": ponto.x, "y": ponto.y, "z": ponto.z,
**({"visibilidade": getattr(ponto, "visibility", None)} if visibilidade else {})}
for ponto in landmarks]
def executar(carga: dict) -> list[dict]:
import cv2
import mediapipe as mp
imagem_bgr = cv2.imread(carga["frame"])
if imagem_bgr is None:
raise FileNotFoundError(f"Frame não encontrado: {carga['frame']}")
imagem = mp.Image(image_format=mp.ImageFormat.SRGB, data=imagem_bgr[:, :, ::-1])
resultado: list[dict] = []
if carga.get("pose"):
opcoes = mp.tasks.vision.PoseLandmarkerOptions(
base_options=mp.tasks.BaseOptions(model_asset_path=carga["pose"], delegate=mp.tasks.BaseOptions.Delegate.CPU),
running_mode=mp.tasks.vision.RunningMode.IMAGE,
)
with mp.tasks.vision.PoseLandmarker.create_from_options(opcoes) as detector:
for pose in detector.detect(imagem).pose_landmarks:
resultado.append({"tipo": "pose", "valor": {"pontos": _pontos(pose, visibilidade=True)}})
if carga.get("maos"):
opcoes = mp.tasks.vision.HandLandmarkerOptions(
base_options=mp.tasks.BaseOptions(model_asset_path=carga["maos"], delegate=mp.tasks.BaseOptions.Delegate.CPU),
running_mode=mp.tasks.vision.RunningMode.IMAGE, num_hands=4,
)
with mp.tasks.vision.HandLandmarker.create_from_options(opcoes) as detector:
for mao in detector.detect(imagem).hand_landmarks:
resultado.append({"tipo": "mao", "valor": {"pontos": _pontos(mao)}})
return resultado
if __name__ == "__main__":
try:
print(json.dumps(executar(json.loads(sys.stdin.read()))))
except Exception as erro:
print(str(erro), file=sys.stderr)
raise