coordinate transformer, added Fitz transformer
This commit is contained in:
parent
3d2c97bc10
commit
f44e6f4fd7
@ -0,0 +1,8 @@
|
|||||||
|
from image_prediction.transformer.transformer import Transformer
|
||||||
|
|
||||||
|
|
||||||
|
class FitzCoordinateTransformer(Transformer):
|
||||||
|
|
||||||
|
def transform(self, metadata: dict):
|
||||||
|
"""Fitz uses top left corner as origin; we take this as the reference coordinate system."""
|
||||||
|
return metadata
|
||||||
@ -1,10 +1,13 @@
|
|||||||
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
|
||||||
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.fpdf import FPDFCoordinateTransformer
|
from image_prediction.transformer.transformers.coordinate.fpdf import FPDFCoordinateTransformer
|
||||||
from test.conftest import array_to_image, add_image
|
from test.conftest import array_to_image, add_image
|
||||||
|
|
||||||
@ -23,10 +26,22 @@ def coordinate_test_fpdf():
|
|||||||
def get_fpdf_coordinates(corner):
|
def get_fpdf_coordinates(corner):
|
||||||
metadata = base_position_metadata()
|
metadata = base_position_metadata()
|
||||||
|
|
||||||
if corner == "top left":
|
if corner == "top_left":
|
||||||
metadata.update({Info.X1: 0, Info.Y1: 0})
|
metadata.update({Info.X1: 0, Info.Y1: 0})
|
||||||
|
|
||||||
elif corner == "bottom left":
|
elif corner == "bottom_left":
|
||||||
|
metadata.update({Info.X1: 0, Info.Y1: 100})
|
||||||
|
|
||||||
|
return metadata
|
||||||
|
|
||||||
|
|
||||||
|
def get_fitz_coordinates(corner):
|
||||||
|
metadata = base_position_metadata()
|
||||||
|
|
||||||
|
if corner == "top_left":
|
||||||
|
metadata.update({Info.X1: 0, Info.Y1: 0})
|
||||||
|
|
||||||
|
elif corner == "bottom_left":
|
||||||
metadata.update({Info.X1: 0, Info.Y1: 100})
|
metadata.update({Info.X1: 0, Info.Y1: 100})
|
||||||
|
|
||||||
return metadata
|
return metadata
|
||||||
@ -41,6 +56,12 @@ def position_metadata(corner, coordinate_system):
|
|||||||
if coordinate_system == "fpdf":
|
if coordinate_system == "fpdf":
|
||||||
return get_fpdf_coordinates(corner)
|
return get_fpdf_coordinates(corner)
|
||||||
|
|
||||||
|
elif coordinate_system == "fitz":
|
||||||
|
return get_fitz_coordinates(corner)
|
||||||
|
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Unknown coordinate system: {coordinate_system}")
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def coordinate_test_pdf(position_metadata, coordinate_test_image, coordinate_test_fpdf):
|
def coordinate_test_pdf(position_metadata, coordinate_test_image, coordinate_test_fpdf):
|
||||||
@ -53,9 +74,20 @@ def coordinate_test_page_image(coordinate_test_pdf):
|
|||||||
return pdf2image.convert_from_bytes(coordinate_test_pdf)[0]
|
return pdf2image.convert_from_bytes(coordinate_test_pdf)[0]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("corner", ["top left", "bottom left"])
|
@pytest.mark.parametrize("corner", ["top_left", "bottom_left"])
|
||||||
@pytest.mark.parametrize("coordinate_system", ["fpdf"])
|
@pytest.mark.parametrize("coordinate_system", ["fpdf"])
|
||||||
def test_coordinate_transformer(position_metadata, coordinate_test_page_image):
|
def test_fpdf_coordinate_transformer(position_metadata):
|
||||||
|
assert FPDFCoordinateTransformer()(position_metadata) == position_metadata
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("corner", ["top_left", "bottom_left"])
|
||||||
|
@pytest.mark.parametrize("coordinate_system", ["fitz"])
|
||||||
|
def test_coordinate_transformer(position_metadata, coordinate_test_pdf):
|
||||||
# coordinate_test_pdf.output("/tmp/x.pdf")
|
# coordinate_test_pdf.output("/tmp/x.pdf")
|
||||||
# coordinate_test_page_image.show()
|
# coordinate_test_page_image.show()
|
||||||
assert FPDFCoordinateTransformer()(position_metadata) == position_metadata
|
|
||||||
|
metadata_extracted = next(map(second, ParsablePDFImageExtractor()(coordinate_test_pdf)))
|
||||||
|
position_extracted = project(metadata_extracted, list(position_metadata.keys()))
|
||||||
|
|
||||||
|
assert position_extracted == position_metadata
|
||||||
|
assert FitzCoordinateTransformer()(position_metadata) == position_metadata
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user