Если локальное железо не может выполнить задачу:
И есть подписка с доступом к VLM по API (OpenCode Go, OpenAI, Anthropic).
Тогда локальный OCR делает быструю «грязную» работу, а сомнительные регионы отправляются в cloud VLM.
Локальный OCR (быстрый, среднее качество)
│
├─ confidence > 0.8 → OK, сохраняем как есть
│
└─ confidence < 0.8 → вырезаем bbox из изображения
│
▼
Cloud VLM API (высокое качество)
│
▼
Заменяем текст блока
/v1/messages) или OpenAI Chat Completionsclass VlmCorrector:
def __init__(self, image_path: str, model: str = "qwen3.8-max"):
self._image = cv2.imread(image_path)
self._model = model
def __call__(self, block: ParsedBlock) -> None:
# crop bbox → base64 → API call → block.content = result
Через Corrector протокол подключается к общему циклу apply_corrector().
API-ключ через .env: OPENCODE_API_KEY=sk-...
URL из документации провайдера (для OpenCode Go: https://opencode.ai/zen/go/v1/messages)