Proyecto independiente No afiliado, patrocinado ni avalado por la Watch Tower Bible and Tract Society o Jehovah's Witnesses.
jw-agent-toolkit
EN

Guía

Cámara para libros físicos (Fase 71)

Apunta la cámara a un libro físico, una página de Atalaya o una Biblia, y el toolkit clasifica lo que ve y sugiere acciones contextuales: leer en voz alta, abrir en JW Library, abrir en WOL, o mostrar respuesta. Pensado para hermanos mayores, recién interesados sin app, o niños aprendiendo a leer.

Quick start

# Analizar con texto OCR ya extraído
jw book-camera analyze --ocr-text "Juan 3:16" --language es

# Analizar con imagen (requiere Tesseract)
jw book-camera analyze --image /tmp/page.jpg

# Listar tipos detectables
jw book-camera kinds

CLI

ComandoDescripción
jw book-camera analyzeAnaliza una captura (imagen u OCR-text)
jw book-camera kindsLista los 5 tipos detectables

Flags de analyze

FlagDefaultEfecto
--image / -iPath a imagen capturada (se OCRea)
--ocr-text / -tBypass OCR: texto ya extraído
--language / -lesIdioma de OCR + TTS hint

Al menos uno de --image o --ocr-text es obligatorio.

MCP

ToolDescripción
book_camera_analyzeDevuelve CameraFrameResult dict

Tipos detectables

KindDescripción
bible_verseCita bíblica detectada por F1 parser
study_questionPregunta de estudio (¿…? + hints)
watchtower_paragraphCódigo de publicación + párrafo opcional
plain_textTexto sin clasificar pero legible
unknownVacío / solo ruido

Acciones sugeridas

El router emite una lista ordenada de acciones por kind:

bible_verse        -> read_aloud, open_in_jw_library, open_in_wol
study_question     -> show_answer, read_aloud
watchtower_paragraph -> read_aloud, open_in_jw_library
plain_text         -> read_aloud
unknown            -> []

Los deep links son jwlibrary://bible/{book:02d}/{ch:03d}/{verse:03d} para versículos y jwlibrary://publication/{pub_code} para revistas.

Arquitectura

   captura


 ┌──────────────────────┐
 │ F70 preprocess + OCR │ (opt; bypass con --ocr-text)
 │  - PIL load          │
 │  - Tesseract + cleanup│
 └──────────┬───────────┘
            │ ocr_text

 ┌──────────────────────┐
 │ classifier           │
 │  - parse_all_references (F1)
 │  - pub_code regex    │
 │  - question hints    │
 │  - plain/unknown     │
 └──────────┬───────────┘
            │ DetectedContent

 ┌──────────────────────┐
 │ router               │
 │  - read_aloud        │
 │  - open_in_jw_library│
 │  - open_in_wol       │
 │  - show_answer       │
 └──────────┬───────────┘
            │ list[SuggestedAction]

       CameraFrameResult

Integración en F65 meta-orchestrator

Registrada como tool book_camera.analyze. El planner F65 puede componer:

{"steps": [
  {"id": "s1", "tool": "book_camera.analyze",
   "args": {"ocr_text": "Juan 3:16", "language": "es"}}
]}

Dependencias opcionales

FeatureDepFallback
OCRpytesseract--ocr-text manual
ImagePillowrequerido si --image

Estado actual

  • 5 tasks TDD. 30 tests passing (4 models + 10 classifier + 9 router/engine + 3 CLI + 1 MCP + 2 meta + 1 protocol delta).
  • Pipeline async-friendly (síncrono internamente).
  • 5 kinds + 4 actions discretas con Pydantic discriminated unions.
  • CLI jw book-camera {analyze,kinds} + MCP tool.
  • Meta tool book_camera.analyze en F65.

Pendiente (futuro)

  • App PWA / Capacitor en apps/book-camera/ reutilizando F47 jw-core-js (parseReference + wolUrl en TS).
  • REST endpoints POST /api/v1/book_camera/analyze + /tts + /rag_answer para que la PWA hable con el backend MCP.
  • VLM real-time on-device (Florence-2 base ONNX) para classify_content sobre frames live (no solo OCR).
  • Lighthouse a11y ≥95 + botones ≥56dp.
  • Wake word “Hermano IA” para uso manos libres.
  • Streaming TTS con highlight word-by-word.

Editar esta página en docs/guias/book-camera.md