| from __future__ import annotations |
|
|
| from app.providers.vision.base import VisionProvider |
| from app.storage.models import VisualAssetRecord |
|
|
| from .base import Lens |
|
|
|
|
| class ObjectGroundingLens(Lens): |
| name = "object_grounding" |
| view_type = "objects" |
|
|
| def __init__(self, provider: VisionProvider): |
| self.provider = provider |
|
|
| async def execute(self, asset: VisualAssetRecord, image_bytes: bytes, parameters: dict) -> tuple[dict, float, list[dict]]: |
| phrase = parameters.get("phrase", "object") |
| payload = await self.provider.ground_object(image_bytes, phrase) |
| objects = payload.get("objects", []) |
| confidence = max([o.get("confidence", 0.0) for o in objects] or [0.0]) |
| provenance = [ |
| { |
| "asset_id": asset.id, |
| "bbox": obj.get("bbox"), |
| "extraction_method": self.name, |
| "confidence": obj.get("confidence", confidence), |
| "lens_version": self.version, |
| } |
| for obj in objects |
| ] |
| return payload, confidence, provenance |
|
|