feat(agent): add learn action flow and grounding guards
This commit is contained in:
@@ -171,13 +171,17 @@ def handle_detected_pattern(pattern: Dict[str, Any]) -> bool:
|
||||
screenshot = sct.grab(monitor)
|
||||
screen = Image.frombytes('RGB', screenshot.size, screenshot.bgra, 'raw', 'BGRX')
|
||||
|
||||
# EasyOCR (rapide, bonne qualité GUI) avec fallback docTR.
|
||||
# gpu=True : harmonisé avec dialog_handler.py et title_verifier.py.
|
||||
# Coût VRAM ~0.5 GB, sous le budget RTX 5070 (cf. deploy/VRAM_BUDGET.md).
|
||||
# EasyOCR (bonne qualité GUI) avec fallback docTR. Par défaut CPU :
|
||||
# le replay server réserve la VRAM à Ollama.
|
||||
words = []
|
||||
try:
|
||||
import easyocr
|
||||
_reader = easyocr.Reader(['fr', 'en'], gpu=True, verbose=False)
|
||||
from core.llm.ocr_extractor import easyocr_gpu_enabled
|
||||
_reader = easyocr.Reader(
|
||||
['fr', 'en'],
|
||||
gpu=easyocr_gpu_enabled(default=False),
|
||||
verbose=False,
|
||||
)
|
||||
results = _reader.readtext(np.array(screen))
|
||||
for (bbox_pts, text, conf) in results:
|
||||
if not text or len(text.strip()) < 1:
|
||||
|
||||
@@ -248,8 +248,10 @@ class DialogHandler:
|
||||
|
||||
try:
|
||||
import easyocr
|
||||
from core.llm.ocr_extractor import easyocr_gpu_enabled
|
||||
gpu = easyocr_gpu_enabled(default=False)
|
||||
self._easyocr_reader = easyocr.Reader(
|
||||
['fr', 'en'], gpu=True, verbose=False
|
||||
['fr', 'en'], gpu=gpu, verbose=False
|
||||
)
|
||||
return self._easyocr_reader
|
||||
except ImportError:
|
||||
|
||||
@@ -144,19 +144,21 @@ class FastDetector:
|
||||
_easyocr_reader = None # Singleton EasyOCR (chargé une fois)
|
||||
|
||||
def _ocr_extract(self, image) -> List[Dict[str, Any]]:
|
||||
"""Extrait les mots visibles via EasyOCR (GPU, ~500ms).
|
||||
"""Extrait les mots visibles via EasyOCR.
|
||||
|
||||
Fallback sur docTR si EasyOCR non disponible.
|
||||
"""
|
||||
try:
|
||||
import numpy as np
|
||||
import easyocr
|
||||
from core.llm.ocr_extractor import easyocr_gpu_enabled
|
||||
|
||||
# Singleton : charger le reader une seule fois
|
||||
if FastDetector._easyocr_reader is None:
|
||||
print(f"🔍 [FAST/ocr] Chargement EasyOCR (GPU)...")
|
||||
gpu = easyocr_gpu_enabled(default=False)
|
||||
print(f"🔍 [FAST/ocr] Chargement EasyOCR ({'GPU' if gpu else 'CPU'})...")
|
||||
FastDetector._easyocr_reader = easyocr.Reader(
|
||||
['fr', 'en'], gpu=True, verbose=False
|
||||
['fr', 'en'], gpu=gpu, verbose=False
|
||||
)
|
||||
|
||||
results = FastDetector._easyocr_reader.readtext(np.array(image))
|
||||
|
||||
@@ -148,10 +148,16 @@ class TitleVerifier:
|
||||
try:
|
||||
import easyocr
|
||||
import numpy as np
|
||||
from core.llm.ocr_extractor import easyocr_gpu_enabled
|
||||
|
||||
if TitleVerifier._easyocr_reader is None:
|
||||
gpu = easyocr_gpu_enabled(default=False)
|
||||
TitleVerifier._easyocr_reader = easyocr.Reader(
|
||||
['fr', 'en'], gpu=True, verbose=False
|
||||
['fr', 'en'], gpu=gpu, verbose=False
|
||||
)
|
||||
logger.info(
|
||||
"TitleVerifier EasyOCR initialisé (fr+en, %s)",
|
||||
"GPU" if gpu else "CPU",
|
||||
)
|
||||
|
||||
def _easyocr_extract_text(img):
|
||||
|
||||
Reference in New Issue
Block a user