diff --git a/mindee/v2/product/classification/classification_classifier.py b/mindee/v2/product/classification/classification_classifier.py index 8aa694f9..fb3c3e8e 100644 --- a/mindee/v2/product/classification/classification_classifier.py +++ b/mindee/v2/product/classification/classification_classifier.py @@ -1,3 +1,5 @@ +from typing import Optional + from mindee.parsing.common.string_dict import StringDict from mindee.parsing.v2.inference_response import InferenceResponse @@ -8,7 +10,7 @@ class ClassificationClassifier: document_type: str """The document type, as identified on given classification values.""" - extraction_response: InferenceResponse + extraction_response: Optional[InferenceResponse] = None """The extraction response associated with the classification.""" def __init__(self, server_response: StringDict): diff --git a/mindee/v2/product/crop/__init__.py b/mindee/v2/product/crop/__init__.py index f8d50d5e..9a8d525c 100644 --- a/mindee/v2/product/crop/__init__.py +++ b/mindee/v2/product/crop/__init__.py @@ -1,11 +1,13 @@ from mindee.v2.product.crop.crop_box import CropBox from mindee.v2.product.crop.crop_inference import CropInference +from mindee.v2.product.crop.crop_item import CropItem from mindee.v2.product.crop.crop_parameters import CropParameters from mindee.v2.product.crop.crop_response import CropResponse from mindee.v2.product.crop.crop_result import CropResult __all__ = [ "CropBox", + "CropItem", "CropInference", "CropParameters", "CropResponse", diff --git a/mindee/v2/product/crop/crop_box.py b/mindee/v2/product/crop/crop_box.py index f93bebbb..68c461dd 100644 --- a/mindee/v2/product/crop/crop_box.py +++ b/mindee/v2/product/crop/crop_box.py @@ -1,18 +1,22 @@ -from mindee.parsing.v2.inference_response import InferenceResponse +from typing import Optional + from mindee.extraction import ExtractedImage, extract_multiple_images_from_source -from mindee.input.sources.local_input_source import LocalInputSource +from mindee.input import LocalInputSource from mindee.parsing.common.string_dict import StringDict -from mindee.parsing.v2.field.field_location import FieldLocation +from mindee.parsing.v2.field import FieldLocation +from mindee.parsing.v2.inference_response import InferenceResponse class CropBox: - """Crop inference result.""" + """Deprecated class. Use CropItem instead.""" location: FieldLocation """Location which includes cropping coordinates for the detected object, within the source document.""" + object_type: str """Type or classification of the detected object.""" - extraction_response: InferenceResponse + + extraction_response: Optional[InferenceResponse] = None """The extraction response associated with the crop.""" def __init__(self, server_response: StringDict): diff --git a/mindee/v2/product/crop/crop_inference.py b/mindee/v2/product/crop/crop_inference.py index 5e95aa62..25298d9f 100644 --- a/mindee/v2/product/crop/crop_inference.py +++ b/mindee/v2/product/crop/crop_inference.py @@ -8,6 +8,7 @@ class CropInference(BaseInference): result: CropResult """Result of a crop inference.""" + _slug: str = "crop" """Slug of the endpoint.""" diff --git a/mindee/v2/product/crop/crop_item.py b/mindee/v2/product/crop/crop_item.py new file mode 100644 index 00000000..44eac9e9 --- /dev/null +++ b/mindee/v2/product/crop/crop_item.py @@ -0,0 +1,5 @@ +from mindee.v2.product.crop.crop_box import CropBox + + +class CropItem(CropBox): + """Result of a cropped document region.""" diff --git a/mindee/v2/product/crop/crop_result.py b/mindee/v2/product/crop/crop_result.py index 12a40305..f74521dc 100644 --- a/mindee/v2/product/crop/crop_result.py +++ b/mindee/v2/product/crop/crop_result.py @@ -1,16 +1,16 @@ from typing import List from mindee.parsing.common.string_dict import StringDict -from mindee.v2.product.crop.crop_box import CropBox +from mindee.v2.product.crop.crop_item import CropItem class CropResult: """Crop result info.""" - crops: List[CropBox] + crops: List[CropItem] def __init__(self, raw_response: StringDict) -> None: - self.crops = [CropBox(crop) for crop in raw_response["crops"]] + self.crops = [CropItem(crop) for crop in raw_response["crops"]] def __str__(self) -> str: crops = "\n" diff --git a/mindee/v2/product/split/split_inference.py b/mindee/v2/product/split/split_inference.py index f944187c..28a0d434 100644 --- a/mindee/v2/product/split/split_inference.py +++ b/mindee/v2/product/split/split_inference.py @@ -8,6 +8,7 @@ class SplitInference(BaseInference): result: SplitResult """Result of a split inference.""" + _slug: str = "split" """Slug of the endpoint.""" diff --git a/mindee/v2/product/split/split_range.py b/mindee/v2/product/split/split_range.py index 4919f866..59e61462 100644 --- a/mindee/v2/product/split/split_range.py +++ b/mindee/v2/product/split/split_range.py @@ -1,4 +1,4 @@ -from typing import List +from typing import List, Optional from mindee.parsing.v2.inference_response import InferenceResponse from mindee.extraction.pdf_extractor.extracted_pdf import ExtractedPdf @@ -15,9 +15,11 @@ class SplitRange: 0-based page indexes, where the first integer indicates the start page and the second integer indicates the end page. """ + document_type: str """The document type, as identified on given classification values.""" - extraction_response: InferenceResponse + + extraction_response: Optional[InferenceResponse] = None """The extraction response associated with the split.""" def __init__(self, server_response: StringDict): diff --git a/tests/v2/product/ocr/test_ocr_response.py b/tests/v2/product/ocr/test_ocr_response.py index 74b45c62..d91c5d6a 100644 --- a/tests/v2/product/ocr/test_ocr_response.py +++ b/tests/v2/product/ocr/test_ocr_response.py @@ -13,35 +13,20 @@ def test_ocr_single(): json_sample, _ = get_product_samples(product="ocr", file_name="ocr_single") response = OCRResponse(json_sample) assert isinstance(response.inference, OCRInference) - assert response.inference.result.pages - assert len(response.inference.result.pages) == 1 - assert response.inference.result.pages[0].words[0].content == "Shipper:" - assert ( - response.inference.result.pages[0].words[0].polygon[0][0] == 0.09742441209406495 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[0][1] == 0.07007125890736342 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[1][0] == 0.15621500559910415 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[1][1] == 0.07046714172604909 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[2][0] == 0.15621500559910415 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[2][1] == 0.08155186064924783 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[3][0] == 0.09742441209406495 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[3][1] == 0.08155186064924783 - ) - assert len(response.inference.result.pages[0].words) == 305 - assert response.inference.result.pages[0].content == ( + pages = response.inference.result.pages + assert pages + assert len(pages) == 1 + assert pages[0].words[0].content == "Shipper:" + assert pages[0].words[0].polygon[0][0] == 0.09742441209406495 + assert pages[0].words[0].polygon[0][1] == 0.07007125890736342 + assert pages[0].words[0].polygon[1][0] == 0.15621500559910415 + assert pages[0].words[0].polygon[1][1] == 0.07046714172604909 + assert pages[0].words[0].polygon[2][0] == 0.15621500559910415 + assert pages[0].words[0].polygon[2][1] == 0.08155186064924783 + assert pages[0].words[0].polygon[3][0] == 0.09742441209406495 + assert pages[0].words[0].polygon[3][1] == 0.08155186064924783 + assert len(pages[0].words) == 305 + assert pages[0].content == ( "Shipper: GLOBAL FREIGHT SOLUTIONS INC. 123 OCEAN DRIVE SHANGHAI, CHINA TEL: " "86-21-12345678 FAX: 86-21-87654321\nConsignee: PACIFIC TRADING CO. 789 TRADE " "STREET SINGAPORE 567890 SINGAPORE TEL: 65-65432100 FAX: 65-65432101\nNotify " @@ -81,37 +66,22 @@ def test_ocr_multiple(): assert isinstance(response.inference, OCRInference) assert isinstance(response.inference.result, OCRResult) assert isinstance(response.inference.result.pages[0], OCRPage) - assert len(response.inference.result.pages) == 3 + pages = response.inference.result.pages + assert len(pages) == 3 - assert len(response.inference.result.pages[0].words) == 295 - assert response.inference.result.pages[0].words[0].content == "FICTIOCORP" - assert ( - response.inference.result.pages[0].words[0].polygon[0][0] == 0.06649402824332337 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[0][1] == 0.03957449719523875 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[1][0] == 0.23219061218068954 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[1][1] == 0.03960015049938432 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[2][0] == 0.23219061218068954 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[2][1] == 0.06770762074155151 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[3][0] == 0.06649402824332337 - ) - assert ( - response.inference.result.pages[0].words[0].polygon[3][1] == 0.06770762074155151 - ) + assert len(pages[0].words) == 295 + assert pages[0].words[0].content == "FICTIOCORP" + assert pages[0].words[0].polygon[0][0] == 0.06649402824332337 + assert pages[0].words[0].polygon[0][1] == 0.03957449719523875 + assert pages[0].words[0].polygon[1][0] == 0.23219061218068954 + assert pages[0].words[0].polygon[1][1] == 0.03960015049938432 + assert pages[0].words[0].polygon[2][0] == 0.23219061218068954 + assert pages[0].words[0].polygon[2][1] == 0.06770762074155151 + assert pages[0].words[0].polygon[3][0] == 0.06649402824332337 + assert pages[0].words[0].polygon[3][1] == 0.06770762074155151 - assert len(response.inference.result.pages[1].words) == 450 - assert response.inference.result.pages[1].words[0].content == "KEOLIO" + assert len(pages[1].words) == 450 + assert pages[1].words[0].content == "KEOLIO" - assert len(response.inference.result.pages[2].words) == 355 - assert response.inference.result.pages[2].words[0].content == "KEOLIO" + assert len(pages[2].words) == 355 + assert pages[2].words[0].content == "KEOLIO"