feat(docling): detect response regions with OpenCV
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
|
||||
from api.services.docling.regions import detect_response_regions_from_image
|
||||
|
||||
|
||||
def test_detects_grouped_answer_lines() -> None:
|
||||
image = Image.new("RGB", (900, 1200), "white")
|
||||
draw = ImageDraw.Draw(image)
|
||||
for y in (420, 470, 520):
|
||||
draw.line((160, y, 760, y), fill="black", width=3)
|
||||
|
||||
candidates = detect_response_regions_from_image(image, page_index=2)
|
||||
|
||||
line_regions = [c.to_mapper_dict() for c in candidates if c.region_type == "answer_lines"]
|
||||
assert line_regions
|
||||
best = line_regions[0]
|
||||
assert best["kind"] == "response"
|
||||
assert best["source"] == "ai"
|
||||
assert best["confirmed"] is False
|
||||
assert best["page_index"] == 2
|
||||
assert best["line_count"] == 3
|
||||
assert best["bbox"]["coord_origin"] == "TOPLEFT"
|
||||
assert best["bbox"]["w"] > 550
|
||||
assert best["bbox"]["h"] > 80
|
||||
|
||||
|
||||
def test_detects_answer_box() -> None:
|
||||
image = Image.new("RGB", (900, 1200), "white")
|
||||
draw = ImageDraw.Draw(image)
|
||||
draw.rectangle((140, 300, 780, 520), outline="black", width=3)
|
||||
|
||||
candidates = detect_response_regions_from_image(image, page_index=0)
|
||||
|
||||
boxes = [c.to_mapper_dict() for c in candidates if c.region_type == "answer_box"]
|
||||
assert boxes
|
||||
assert boxes[0]["bbox"]["w"] > 600
|
||||
assert boxes[0]["bbox"]["h"] > 200
|
||||
Reference in New Issue
Block a user