| from __future__ import annotations |
| from typing import Literal |
| from pydantic import BaseModel |
| from dataclasses import dataclass |
| from PIL import Image |
|
|
|
|
| class BoundingBox(BaseModel): |
| x0: float |
| y0: float |
| x1: float |
| y1: float |
|
|
| @classmethod |
| def from_yolo(cls, cx: float, cy: float, w: float, h: float) -> BoundingBox: |
| return cls(x0=cx - w / 2, y0=cy - h / 2, x1=cx + w / 2, y1=cy + h / 2) |
|
|
|
|
| class Widget(BaseModel): |
| widget_type: Literal[ |
| "TextBox", |
| "ChoiceButton", |
| "Signature", |
| ] |
| bounding_box: BoundingBox |
| page: int |
|
|
|
|
| @dataclass |
| class Page: |
| image: Image.Image |
| width: float |
| height: float |
|
|