def test_json(): i = Interval(1, 2, "y", canvas_height=5) r = Rectangle(1, 2, 3, 4) q = Quadrilateral(np.arange(8).reshape(4, 2), 200, 400) l = Layout([i, r, q], page_data={"width": 200, "height": 200}) i2 = TextBlock(i, "") r2 = TextBlock(r, id=24) q2 = TextBlock(q, text="test", parent=45) l2 = Layout([i2, r2, q2]) i3 = TextBlock(i, None) r3 = TextBlock(r, id=None) q3 = TextBlock(q, text=None, parent=None) l3 = Layout([i3, r3, q3], page_data={"width": 200, "height": 200}) # fmt: off assert i == load_dict(i.to_dict()) == load_json("tests/fixtures/io/interval.json") assert r == load_dict(r.to_dict()) == load_json("tests/fixtures/io/rectangle.json") assert q == load_dict(q.to_dict()) == load_json("tests/fixtures/io/quadrilateral.json") assert l == load_dict(l.to_dict()) == load_json("tests/fixtures/io/layout.json") assert i2 == load_dict(i2.to_dict()) == load_json("tests/fixtures/io/interval_textblock.json") assert r2 == load_dict(r2.to_dict()) == load_json("tests/fixtures/io/rectangle_textblock.json") assert q2 == load_dict(q2.to_dict()) == load_json("tests/fixtures/io/quadrilateral_textblock.json") assert l2 == load_dict(l2.to_dict()) == load_json("tests/fixtures/io/layout_textblock.json") # Test if LP can ignore the unused None features assert l == load_dict(l3.to_dict())
import json import numpy as np from layoutparser.elements import Interval, Rectangle, Quadrilateral, TextBlock, Layout if __name__ == "__main__": i = Interval(1, 2, "y", canvas_height=5) r = Rectangle(1, 2, 3, 4) q = Quadrilateral(np.arange(8).reshape(4, 2), 200, 400) l = Layout([i, r, q], page_data={"width": 200, "height": 200}) with open("interval.json", "w") as fp: json.dump(i.to_dict(), fp) with open("rectangle.json", "w") as fp: json.dump(r.to_dict(), fp) with open("quadrilateral.json", "w") as fp: json.dump(q.to_dict(), fp) with open("layout.json", "w") as fp: json.dump(l.to_dict(), fp) l.to_dataframe().to_csv("layout.csv", index=None) i2 = TextBlock(i, "") r2 = TextBlock(r, id=24) q2 = TextBlock(q, text="test", parent=45) l2 = Layout([i2, r2, q2]) with open("interval_textblock.json", "w") as fp: json.dump(i2.to_dict(), fp) with open("rectangle_textblock.json", "w") as fp: json.dump(r2.to_dict(), fp) with open("quadrilateral_textblock.json", "w") as fp:
def test_dict(): i = Interval(1, 2, "y", canvas_height=5) i_dict = { "block_type": "interval", "start": 1, "end": 2, "axis": "y", "canvas_height": 5, "canvas_width": 0, } assert i.to_dict() == i_dict assert i == Interval.from_dict(i_dict) r = Rectangle(1, 2, 3, 4) r_dict = { "block_type": "rectangle", "x_1": 1, "y_1": 2, "x_2": 3, "y_2": 4 } assert r.to_dict() == r_dict assert r == Rectangle.from_dict(r_dict) q = Quadrilateral(np.arange(8).reshape(4, 2), 200, 400) q_dict = { "block_type": "quadrilateral", "points": [0, 1, 2, 3, 4, 5, 6, 7], "height": 200, "width": 400, } assert q.to_dict() == q_dict assert q == Quadrilateral.from_dict(q_dict) l = Layout([i, r, q], page_data={"width": 200, "height": 200}) l_dict = { "page_data": { "width": 200, "height": 200 }, "blocks": [i_dict, r_dict, q_dict], } assert l.to_dict() == l_dict i2 = TextBlock(i, "") i_dict["text"] = "" assert i2.to_dict() == i_dict assert i2 == TextBlock.from_dict(i_dict) r2 = TextBlock(r, id=24) r_dict["id"] = 24 assert r2.to_dict() == r_dict assert r2 == TextBlock.from_dict(r_dict) q2 = TextBlock(q, text="test", parent=45) q_dict["text"] = "test" q_dict["parent"] = 45 assert q2.to_dict() == q_dict assert q2 == TextBlock.from_dict(q_dict) l2 = Layout([i2, r2, q2]) l2_dict = {"page_data": {}, "blocks": [i_dict, r_dict, q_dict]} assert l2.to_dict() == l2_dict