refactoring

This commit is contained in:
Matthias Bisping 2022-04-03 04:25:10 +02:00
parent 39c111fd42
commit 65a4a8e34e
2 changed files with 18 additions and 41 deletions

View File

@ -17,13 +17,13 @@ class CoordinateTransformer(Transformer):
try: try:
return self._forward(metadata) return self._forward(metadata)
except TypeError: except TypeError:
return map(self._forward, metadata) return list(map(self._forward, metadata))
def backward(self, metadata): def backward(self, metadata):
try: try:
return self._backward(metadata) return self._backward(metadata)
except TypeError: except TypeError:
return map(self._backward, metadata) return list(map(self._backward, metadata))
def transform(self, metadata): def transform(self, metadata):
return self.forward(metadata) return self.forward(metadata)

View File

@ -1,11 +1,10 @@
import numpy as np import numpy as np
import pytest import pytest
from fpdf import fpdf from fpdf import fpdf
from funcy import project, second, compose from funcy import compose
from pdf2image import pdf2image from pdf2image import pdf2image
from image_prediction.image_extractor.extractor import ImageMetadataPair from image_prediction.image_extractor.extractor import ImageMetadataPair
from image_prediction.image_extractor.extractors.parsable import ParsablePDFImageExtractor
from image_prediction.info import Info from image_prediction.info import Info
from image_prediction.transformer.transformers.coordinate.fitz import FitzCoordinateTransformer from image_prediction.transformer.transformers.coordinate.fitz import FitzCoordinateTransformer
from image_prediction.transformer.transformers.coordinate.fpdf import FPDFCoordinateTransformer from image_prediction.transformer.transformers.coordinate.fpdf import FPDFCoordinateTransformer
@ -74,24 +73,32 @@ def base_position_metadata(width=100, height=100):
} }
@pytest.fixture(params=["list", "dict"])
def coordinate_type(request):
return request.param
@pytest.fixture @pytest.fixture
def position_metadata_in_given_system(corner, coordinate_system): def position_metadata_in_given_system(corner, coordinate_system, coordinate_type):
if coordinate_system == "fpdf": if coordinate_system == "fpdf":
return get_fpdf_coordinates(corner) coordinates = get_fpdf_coordinates(corner)
elif coordinate_system == "fitz": elif coordinate_system == "fitz":
return get_fitz_coordinates(corner) coordinates = get_fitz_coordinates(corner)
elif coordinate_system == "pdfnet": elif coordinate_system == "pdfnet":
return get_pdfnet_coordinates(corner) coordinates = get_pdfnet_coordinates(corner)
else: else:
raise ValueError(f"Unknown coordinate system: {coordinate_system}") raise ValueError(f"Unknown coordinate system: {coordinate_system}")
return [coordinates, coordinates] if coordinate_type == "list" else coordinates
@pytest.fixture @pytest.fixture
def position_metadata_in_reference_system(corner): def position_metadata_in_reference_system(corner, coordinate_type):
return get_fpdf_coordinates(corner) coordinates = get_fpdf_coordinates(corner)
return [coordinates, coordinates] if coordinate_type == "list" else coordinates
@pytest.fixture @pytest.fixture
@ -120,18 +127,7 @@ def test_fpdf_coordinate_transformer(position_metadata_in_given_system, position
@pytest.mark.parametrize("corner", ["top_left", "bottom_left"]) @pytest.mark.parametrize("corner", ["top_left", "bottom_left"])
@pytest.mark.parametrize("coordinate_system", ["fitz"]) @pytest.mark.parametrize("coordinate_system", ["fitz"])
def test_fitz_coordinate_transformer( def test_fitz_coordinate_transformer(position_metadata_in_given_system, position_metadata_in_reference_system):
position_metadata_in_given_system, position_metadata_in_reference_system, coordinate_test_pdf,
coordinate_test_fpdf
):
# coordinate_test_fpdf.output("/tmp/x.pdf")
# coordinate_test_page_image.show()
metadata_extracted = next(map(second, ParsablePDFImageExtractor()(coordinate_test_pdf)))
position_extracted = project(metadata_extracted, list(position_metadata_in_given_system.keys()))
assert position_extracted == position_metadata_in_given_system
transformer = FitzCoordinateTransformer() transformer = FitzCoordinateTransformer()
assert transformer.forward(position_metadata_in_given_system) == position_metadata_in_reference_system assert transformer.forward(position_metadata_in_given_system) == position_metadata_in_reference_system
assert transformer.backward(position_metadata_in_reference_system) == position_metadata_in_given_system assert transformer.backward(position_metadata_in_reference_system) == position_metadata_in_given_system
@ -142,25 +138,6 @@ def test_fitz_coordinate_transformer(
)(position_metadata_in_reference_system) == position_metadata_in_reference_system )(position_metadata_in_reference_system) == position_metadata_in_reference_system
# @pytest.mark.parametrize("corner", ["top_left", "bottom_left"])
# @pytest.mark.parametrize("coordinate_system", ["fitz"])
# def test_pdfnet_coordinate_transformer(
# position_metadata_in_given_system, position_metadata_in_reference_system, coordinate_test_fpdf, coordinate_test_page_image
# ):
# # coordinate_test_page_image.show()
# # coordinate_test_fpdf.output("/tmp/xyz.pdf")
#
# position_metadata_transformed = PDFNetCoordinateTransformer().forward(position_metadata_in_reference_system)
# print(json.dumps(EnumFormatter()(position_metadata_transformed), indent=2))
#
# with tempfile.NamedTemporaryFile(suffix=".pdf") as f:
# coordinate_test_fpdf.output(f.name)
# draw_metadata_box(f.name, EnumFormatter()(position_metadata_transformed),
# # os.path.join("/tmp", os.path.basename(f.name.replace(".pdf", "_annotated.pdf")))
# "/tmp/bla.pdf"
# )
# input()
@pytest.mark.parametrize("corner", ["top_left", "bottom_left"]) @pytest.mark.parametrize("corner", ["top_left", "bottom_left"])
@pytest.mark.parametrize("coordinate_system", ["pdfnet"]) @pytest.mark.parametrize("coordinate_system", ["pdfnet"])
def test_pdfnet_coordinate_transformer(position_metadata_in_given_system, position_metadata_in_reference_system): def test_pdfnet_coordinate_transformer(position_metadata_in_given_system, position_metadata_in_reference_system):