| from __future__ import annotations | |
| from app.providers.ocr.base import OcrProvider | |
| from app.storage.models import VisualAssetRecord | |
| from .base import Lens | |
| class OcrLens(Lens): | |
| name = "glm_ocr" | |
| view_type = "ocr" | |
| def __init__(self, provider: OcrProvider): | |
| self.provider = provider | |
| async def execute(self, asset: VisualAssetRecord, image_bytes: bytes, parameters: dict) -> tuple[dict, float, list[dict]]: | |
| payload = await self.provider.extract(image_bytes, parameters.get("region")) | |
| confidence = min([line.get("confidence", 0.0) for line in payload.get("lines", [])] or [0.0]) | |
| provenance = [ | |
| { | |
| "asset_id": asset.id, | |
| "bbox": line.get("bbox"), | |
| "extraction_method": self.name, | |
| "confidence": line.get("confidence", confidence), | |
| "lens_version": self.version, | |
| } | |
| for line in payload.get("lines", []) | |
| ] | |
| return payload, confidence, provenance | |