Rotated block geometries become straight boxes after `Page.from_dict` + `export()`
I maintainer di solito rispondono entro 1 giorno
Una pull request collegata è già stata integrata.
- #2181 di @RaphaelFakhri — integrata
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 25/100
Direzione di ricerca
The issue points to Block.__init__ and Page.export(); first inspect their geometry handling and how Page.from_dict rebuilds lines. Reproduce the round trip with the provided snippet and compare the exported block geometry. Done means the second export preserves the four point rotated polygon; linked pull request #2181 is already open.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Bug description
A page with rotated boxes (e.g. the output of ocr_predictor(assume_straight_pages=False)) that is saved with export() and loaded back with Document.from_dict / Page.from_dict loses its rotated block geometries on the next export(): each block polygon is replaced by a straight ((xmin, ymin), (xmax, ymax)) box.
Block.__init__ chooses between resolve_enclosing_rbbox and resolve_enclosing_bbox with isinstance(lines[0].geometry, np.ndarray). Line geometries read back from a dict are nested lists, so the straight resolution is used. Page.export() rebuilds the blocks in reading order without a geometry, which triggers this path.
Code snippet to reproduce the bug
import json
import numpy as np
from doctr.io import Block, Line, Page, Word
# Rotated word geometry, as built by the DocumentBuilder when assume_straight_pages=False
polygon = ((0.1, 0.1), (0.4, 0.2), (0.35, 0.4), (0.05, 0.3))
word = Word("hello", 0.9, polygon, 0.9, {"value": 0, "confidence": None})
page = Page(np.zeros((10, 10, 3), dtype=np.uint8), [Block([Line([word])])], 0, (10, 10))
exported = json.loads(json.dumps(page.export()))
print(np.round(exported["blocks"][0]["geometry"], 3).tolist())
print(np.round(Page.from_dict(exported).export()["blocks"][0]["geometry"], 3).tolist())
Output:
[[0.1, 0.1], [0.415, 0.205], [0.35, 0.4], [0.035, 0.295]]
[[0.05, 0.1], [0.4, 0.4]]
Error traceback
No exception: the block geometry silently changes from a 4-point polygon to a 2-point straight box.
Environment
docTR main (aa17f53), Python 3.11, Linux.
- Lingua principale
- Python
- Stelle
- 6.4k
- Fork
- 684
- Merge medio
- 1g 5h
- PR unite (30g)
- 28
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di mindee/doctr
-
Per-task YAML configuration for the reference training scriptsForse di nuovo libera @felixdittrich92 l’ha presa 28 giorni fa e non c’è nessuna pull request aperta. Apertaext: references topic: documentation type: new feature
mindee/doctr#2149 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Release tracker - v1.2.0Forse di nuovo libera @felixdittrich92 l’ha presa 70 giorni fa e non c’è nessuna pull request aperta. Apertacritical
mindee/doctr#2126 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[table structure] Extend table structure datasetForse di nuovo libera @simont2k l’ha presa 91 giorni fa e non c’è nessuna pull request aperta. Apertatopic: table comprehension
mindee/doctr#2119 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
type: enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 12/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 15/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di mindee/doctr
Issue simili
-
component:benchmark
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
agentic-os-org/ANOLISA#9177 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
distrochooser/distrochooser#520 ·
I maintainer di solito rispondono entro 2 giorni
-
Status: Needs confirmation Status: Needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
I maintainer di solito rispondono entro 1 giorno
-
[BUG] Published Docker images lack the redis extra: HEADROOM_COMPRESS_SESSION_STORE stops startupForse già presa @AlessandroSpallina l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
headroomlabs-ai/headroom#4513 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
codespell-project/codespell#4060 ·
I maintainer di solito rispondono entro 1 giorno