48 lines
2.4 KiB
Python
48 lines
2.4 KiB
Python
"""Visione: guarda dalla webcam, lo schermo o la finestra in primo piano (immagine + testo riconosciuto)."""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
|
from avatar import vision # noqa: E402
|
|
|
|
NOTE = ("Descrivi ciò che vedi in modo naturale. Se il motore non può vedere le immagini, basati sul testo riconosciuto.")
|
|
|
|
|
|
def _result(path: Path, label: str, ctx: dict) -> str:
|
|
text = vision.ocr_text(path)
|
|
try:
|
|
ui = ctx.get("player")
|
|
if ui is not None and hasattr(ui, "show_camera_frame"):
|
|
ui.show_camera_frame(path.read_bytes())
|
|
except Exception:
|
|
pass
|
|
return (f"{label}\nIMMAGINE: {path}\n"
|
|
f"Testo riconosciuto nell'immagine:\n{text or '(nessun testo)'}\n{NOTE}")
|
|
|
|
|
|
def webcam(params: dict, ctx: dict) -> str:
|
|
path = vision.capture_webcam()
|
|
return _result(path, "Fotogramma dalla webcam (l'utente e il suo ambiente).", ctx)
|
|
|
|
|
|
def schermo(params: dict, ctx: dict) -> str:
|
|
path = vision.capture_screen(bool(params.get("tutti_gli_schermi")))
|
|
return _result(path, "Cattura dello schermo del Mac (il computer dell'utente, non una foto dell'utente).", ctx)
|
|
|
|
|
|
def finestra(params: dict, ctx: dict) -> str:
|
|
path, name = vision.capture_front_window()
|
|
return _result(path, f"Cattura della finestra in primo piano: {name or 'sconosciuta'}.", ctx)
|
|
|
|
|
|
TOOLS = [
|
|
{"name": "guarda_webcam", "description": "Scatta un fotogramma dalla webcam per vedere l'utente e l'ambiente attorno a lui. È lo strumento da usare per le domande generiche: 'cosa vedi?', 'guardami', 'guarda questo', 'come sto?', 'cosa c'è qui?', 'che oggetto è questo?'. NON usare lo schermo per queste domande.",
|
|
"parameters": {"type": "object", "properties": {}}, "run": webcam},
|
|
{"name": "guarda_schermo", "description": "Cattura lo schermo del Mac. Usalo SOLO quando l'utente parla esplicitamente dello schermo, di una finestra, di un errore a video o di una pagina aperta: 'cosa c'è sullo schermo?', 'leggi questo errore', 'riassumi questa pagina'. Per 'cosa vedi?' usa guarda_webcam.",
|
|
"parameters": {"type": "object", "properties": {"tutti_gli_schermi": {"type": "boolean"}}}, "run": schermo},
|
|
{"name": "guarda_finestra", "description": "Cattura solo la finestra dell'app in primo piano (più leggibile dello schermo intero).",
|
|
"parameters": {"type": "object", "properties": {}}, "run": finestra},
|
|
]
|