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:
return self._forward(metadata)
except TypeError:
return map(self._forward, metadata)
return list(map(self._forward, metadata))
def backward(self, metadata):
try:
return self._backward(metadata)
except TypeError:
return map(self._backward, metadata)
return list(map(self._backward, metadata))
def transform(self, metadata):
return self.forward(metadata)

View File

@ -1,11 +1,10 @@
import numpy as np
import pytest
from fpdf import fpdf
from funcy import project, second, compose
from funcy import compose
from pdf2image import pdf2image
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.transformer.transformers.coordinate.fitz import FitzCoordinateTransformer
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
def position_metadata_in_given_system(corner, coordinate_system):
def position_metadata_in_given_system(corner, coordinate_system, coordinate_type):
if coordinate_system == "fpdf":
return get_fpdf_coordinates(corner)
coordinates = get_fpdf_coordinates(corner)
elif coordinate_system == "fitz":
return get_fitz_coordinates(corner)
coordinates = get_fitz_coordinates(corner)
elif coordinate_system == "pdfnet":
return get_pdfnet_coordinates(corner)
coordinates = get_pdfnet_coordinates(corner)
else:
raise ValueError(f"Unknown coordinate system: {coordinate_system}")
return [coordinates, coordinates] if coordinate_type == "list" else coordinates
@pytest.fixture
def position_metadata_in_reference_system(corner):
return get_fpdf_coordinates(corner)
def position_metadata_in_reference_system(corner, coordinate_type):
coordinates = get_fpdf_coordinates(corner)
return [coordinates, coordinates] if coordinate_type == "list" else coordinates
@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("coordinate_system", ["fitz"])
def test_fitz_coordinate_transformer(
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
def test_fitz_coordinate_transformer(position_metadata_in_given_system, position_metadata_in_reference_system):
transformer = FitzCoordinateTransformer()
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
@ -142,25 +138,6 @@ def test_fitz_coordinate_transformer(
)(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("coordinate_system", ["pdfnet"])
def test_pdfnet_coordinate_transformer(position_metadata_in_given_system, position_metadata_in_reference_system):