Skip to content

Commit 6413bc0

Browse files
author
Riccardo Maggioni
committed
feat: improvement of rectangles defintion
Signed-off-by: rickymaggio02 <riccardo.maggioni@googlemail.com>
1 parent 8769971 commit 6413bc0

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

docling_core/transforms/serializer/doctags.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ def serialize(
319319
if len(doc.pages.keys()):
320320
page_w, page_h = doc.pages[page_no].size.as_tuple()
321321
cell_txt += DocumentToken.get_location(
322-
bbox=cell.prov.bbox.to_top_left_origin(page_h).as_tuple(),
322+
bbox=cell.prov.bbox,
323323
page_w=page_w,
324324
page_h=page_h,
325325
xsize=params.xsize,

docling_core/types/doc/base.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import List, Tuple, NamedTuple
55
import numpy as np
66
import math
7+
from shapely.geometry import Polygon
78

89
from pydantic import BaseModel
910

@@ -545,6 +546,23 @@ def to_polygon(self) -> List[Coord2D]:
545546
Coord2D(self.r_x2, self.r_y2),
546547
Coord2D(self.r_x3, self.r_y3),
547548
]
549+
550+
def to_list(self) -> List[Tuple]:
551+
"""Convert to a list of tuple point coordinates."""
552+
return [
553+
(self.r_x0, self.r_y0),
554+
(self.r_x1, self.r_y1),
555+
(self.r_x2, self.r_y2),
556+
(self.r_x3, self.r_y3),
557+
]
558+
559+
def to_shapely_polygon(self) -> Polygon:
560+
return Polygon([
561+
(self.r_x0, self.r_y0),
562+
(self.r_x1, self.r_y1),
563+
(self.r_x2, self.r_y2),
564+
(self.r_x3, self.r_y3),
565+
])
548566

549567
def to_bottom_left_origin(self, page_height: float) -> "BoundingRectangle":
550568
"""Convert coordinates to use bottom-left origin.
@@ -594,4 +612,17 @@ def to_top_left_origin(self, page_height: float) -> "BoundingRectangle":
594612
coord_origin=CoordOrigin.TOPLEFT,
595613
)
596614

615+
def intersection_over_union(
616+
self, other: "BoundingRectangle", eps: float = 1.0e-6
617+
) -> float:
618+
"""intersection_over_union."""
619+
620+
polygon_other = other.to_shapely_polygon()
621+
current_polygon = self.to_shapely_polygon()
622+
623+
intersection_area = current_polygon.intersection(polygon_other).area
624+
union_area = current_polygon.union(polygon_other).area
625+
626+
return intersection_area / (union_area + eps)
627+
597628

0 commit comments

Comments
 (0)