Skip to content

Commit a780b53

Browse files
committed
✨ Add orientation info on all pages
1 parent da44fd3 commit a780b53

24 files changed

+405
-375
lines changed

mindee/documents/base.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from typing import Any, Dict, List, Optional, TypeVar
44

55
from mindee.endpoints import Endpoint
6+
from mindee.fields.orientation import OrientationField
67
from mindee.input.sources import InputSource
78

89
TypeApiPrediction = Dict[str, Any]
@@ -36,6 +37,9 @@ class Document:
3637
"""Name of the input document"""
3738
file_extension: Optional[str] = None
3839
"""File extension of the input document"""
40+
# orientation is only present on page-level, not document-level
41+
orientation: Optional[OrientationField] = None
42+
"""Page orientation"""
3943

4044
def __init__(
4145
self,
@@ -48,13 +52,13 @@ def __init__(
4852
self.filepath = input_source.filepath
4953
self.filename = input_source.filename
5054
self.file_extension = input_source.file_mimetype
51-
55+
self.checklist = {}
5256
self.type = document_type
5357

54-
self._build_from_api_prediction(api_prediction, page_n=page_n)
55-
self.checklist = {}
56-
self._checklist()
57-
self._reconstruct()
58+
if page_n is not None:
59+
self.orientation = OrientationField(
60+
api_prediction["orientation"], page_n=page_n
61+
)
5862

5963
@staticmethod
6064
def request(

mindee/documents/custom/custom_v1.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ def __init__(
3131
api_prediction=api_prediction,
3232
page_n=page_n,
3333
)
34+
self._build_from_api_prediction(api_prediction["prediction"], page_n=page_n)
3435

3536
def _build_from_api_prediction(
3637
self, api_prediction: TypeApiPrediction, page_n: Optional[int] = None

mindee/documents/financial/financial_v1.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from mindee.fields.company_registration import CompanyRegistrationField
99
from mindee.fields.date import DateField
1010
from mindee.fields.locale import LocaleField
11-
from mindee.fields.orientation import OrientationField
1211
from mindee.fields.payment_details import PaymentDetails
1312
from mindee.fields.tax import TaxField
1413
from mindee.fields.text import TextField
@@ -48,10 +47,6 @@ class FinancialV1(Document):
4847
total_tax: AmountField
4948
"""Sum total of all taxes"""
5049

51-
# orientation is only present on page-level, not document-level
52-
orientation: Optional[OrientationField] = None
53-
"""Page orientation"""
54-
5550
def __init__(
5651
self,
5752
api_prediction=None,
@@ -75,6 +70,8 @@ def __init__(
7570
api_prediction=api_prediction,
7671
page_n=page_n,
7772
)
73+
self._build_from_api_prediction(api_prediction, page_n=page_n)
74+
self._checklist()
7875

7976
def _build_from_api_prediction(
8077
self, api_prediction: TypeApiPrediction, page_n: Optional[int] = None
@@ -85,7 +82,7 @@ def _build_from_api_prediction(
8582
:param api_prediction: Raw prediction from HTTP response
8683
:param page_n: Page number for multi pages pdf input
8784
"""
88-
if "invoice_number" in api_prediction.keys():
85+
if "invoice_number" in api_prediction["prediction"].keys():
8986
invoice = InvoiceV3(api_prediction, self.input_file, page_n=page_n)
9087
self.locale = invoice.locale
9188
self.total_incl = invoice.total_incl

mindee/documents/invoice/invoice_v3.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from mindee.fields.company_registration import CompanyRegistrationField
77
from mindee.fields.date import DateField
88
from mindee.fields.locale import LocaleField
9-
from mindee.fields.orientation import OrientationField
109
from mindee.fields.payment_details import PaymentDetails
1110
from mindee.fields.tax import TaxField
1211
from mindee.fields.text import TextField
@@ -43,9 +42,6 @@ class InvoiceV3(Document):
4342
"""Payment details"""
4443
company_number: List[CompanyRegistrationField]
4544
"""Company numbers"""
46-
# orientation is only present on page-level, not document-level
47-
orientation: Optional[OrientationField] = None
48-
"""Page orientation"""
4945

5046
def __init__(
5147
self,
@@ -67,6 +63,9 @@ def __init__(
6763
api_prediction=api_prediction,
6864
page_n=page_n,
6965
)
66+
self._build_from_api_prediction(api_prediction["prediction"], page_n=page_n)
67+
self._checklist()
68+
self._reconstruct()
7069

7170
def _build_from_api_prediction(
7271
self, api_prediction: TypeApiPrediction, page_n: Optional[int] = None
@@ -77,11 +76,6 @@ def _build_from_api_prediction(
7776
:param api_prediction: Raw prediction from HTTP response
7877
:param page_n: Page number for multi pages pdf input
7978
"""
80-
if page_n is not None:
81-
self.orientation = OrientationField(
82-
api_prediction["orientation"], page_n=page_n
83-
)
84-
8579
self.company_number = [
8680
CompanyRegistrationField(field_dict, page_n=page_n)
8781
for field_dict in api_prediction["company_registration"]

mindee/documents/passport/passport_v1.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ def __init__(
5858
api_prediction=api_prediction,
5959
page_n=page_n,
6060
)
61+
self._build_from_api_prediction(api_prediction["prediction"], page_n=page_n)
62+
self._checklist()
63+
self._reconstruct()
6164

6265
def _build_from_api_prediction(
6366
self, api_prediction: TypeApiPrediction, page_n: Optional[int] = None

mindee/documents/receipt/receipt_v3.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from mindee.fields.base import field_array_confidence, field_array_sum
66
from mindee.fields.date import DateField
77
from mindee.fields.locale import LocaleField
8-
from mindee.fields.orientation import OrientationField
98
from mindee.fields.tax import TaxField
109
from mindee.fields.text import TextField
1110

@@ -29,9 +28,6 @@ class ReceiptV3(Document):
2928
"""Sum total of all taxes"""
3029
total_excl: AmountField
3130
"""Total excluding taxes"""
32-
# orientation is only present on page-level, not document-level
33-
orientation: Optional[OrientationField] = None
34-
"""Page orientation"""
3531

3632
def __init__(
3733
self,
@@ -53,6 +49,9 @@ def __init__(
5349
api_prediction=api_prediction,
5450
page_n=page_n,
5551
)
52+
self._build_from_api_prediction(api_prediction["prediction"], page_n=page_n)
53+
self._checklist()
54+
self._reconstruct()
5655

5756
def __str__(self) -> str:
5857
taxes = "\n ".join(f"{t}" for t in self.taxes)
@@ -80,11 +79,6 @@ def _build_from_api_prediction(
8079
:param api_prediction: Raw prediction from HTTP response
8180
:param page_n: Page number for multi pages pdf input
8281
"""
83-
if page_n is not None:
84-
self.orientation = OrientationField(
85-
api_prediction["orientation"], page_n=page_n
86-
)
87-
8882
self.locale = LocaleField(api_prediction["locale"], page_n=page_n)
8983
self.total_incl = AmountField(api_prediction["total_incl"], page_n=page_n)
9084
self.date = DateField(api_prediction["date"], page_n=page_n)

mindee/documents/receipt/receipt_v4.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from mindee.fields.amount import AmountField
55
from mindee.fields.date import DateField
66
from mindee.fields.locale import LocaleField
7-
from mindee.fields.orientation import OrientationField
87
from mindee.fields.tax import TaxField
98
from mindee.fields.text import TextField
109

@@ -30,9 +29,6 @@ class ReceiptV4(Document):
3029
"Total amount of the purchase excluding taxes."
3130
tip: AmountField
3231
"""Total amount of tip and gratuity."""
33-
# orientation is only present on page-level, not document-level
34-
orientation: Optional[OrientationField] = None
35-
"""Page orientation"""
3632

3733
def __init__(
3834
self,
@@ -54,6 +50,7 @@ def __init__(
5450
api_prediction=api_prediction,
5551
page_n=page_n,
5652
)
53+
self._build_from_api_prediction(api_prediction["prediction"], page_n=page_n)
5754

5855
def _build_from_api_prediction(
5956
self, api_prediction: TypeApiPrediction, page_n: Optional[int] = None
@@ -64,11 +61,6 @@ def _build_from_api_prediction(
6461
:param api_prediction: Raw prediction from HTTP response
6562
:param page_n: Page number for multi pages pdf input
6663
"""
67-
if page_n is not None:
68-
self.orientation = OrientationField(
69-
api_prediction["orientation"], page_n=page_n
70-
)
71-
7264
self.locale = LocaleField(api_prediction["locale"], page_n=page_n)
7365
self.total_amount = AmountField(api_prediction["total_amount"], page_n=page_n)
7466
self.total_net = AmountField(api_prediction["total_net"], page_n=page_n)

mindee/documents/us/bank_check/bank_check_v1.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
from mindee.documents.base import Document, TypeApiPrediction, clean_out_string
44
from mindee.fields.amount import AmountField
55
from mindee.fields.date import DateField
6-
from mindee.fields.orientation import OrientationField
7-
from mindee.fields.position import Position
6+
from mindee.fields.position import PositionField
87
from mindee.fields.text import TextField
98

109

@@ -21,13 +20,10 @@ class BankCheckV1(Document):
2120
"""Payer's bank account routing number"""
2221
account_number: TextField
2322
"""Payer's bank account number"""
24-
check_position: Position
23+
check_position: PositionField
2524
"""Check's position in the image"""
26-
signatures_positions: List[Position]
25+
signatures_positions: List[PositionField]
2726
"""Signatures' positions in the image"""
28-
# orientation is only present on page-level, not document-level
29-
orientation: Optional[OrientationField] = None
30-
"""Page orientation"""
3127

3228
def __init__(
3329
self,
@@ -49,6 +45,7 @@ def __init__(
4945
api_prediction=api_prediction,
5046
page_n=page_n,
5147
)
48+
self._build_from_api_prediction(api_prediction["prediction"], page_n=page_n)
5249

5350
def _build_from_api_prediction(
5451
self, api_prediction: TypeApiPrediction, page_n: Optional[int] = None
@@ -59,11 +56,6 @@ def _build_from_api_prediction(
5956
:param api_prediction: Raw prediction from HTTP response
6057
:param page_n: Page number for multi pages pdf input
6158
"""
62-
if page_n is not None:
63-
self.orientation = OrientationField(
64-
api_prediction["orientation"], page_n=page_n
65-
)
66-
6759
self.routing_number = TextField(api_prediction["routing_number"], page_n=page_n)
6860
self.account_number = TextField(api_prediction["account_number"], page_n=page_n)
6961
self.check_number = TextField(api_prediction["check_number"], page_n=page_n)
@@ -72,9 +64,11 @@ def _build_from_api_prediction(
7264
self.payees = [
7365
TextField(payee, page_n=page_n) for payee in api_prediction["payees"]
7466
]
75-
self.check_position = Position(api_prediction["check_position"], page_n=page_n)
67+
self.check_position = PositionField(
68+
api_prediction["check_position"], page_n=page_n
69+
)
7670
self.signatures_positions = [
77-
Position(signature_position, page_n=page_n)
71+
PositionField(signature_position, page_n=page_n)
7872
for signature_position in api_prediction["signatures_positions"]
7973
]
8074

@@ -83,8 +77,8 @@ def __str__(self) -> str:
8377
[payee.value if payee.value is not None else "" for payee in self.payees]
8478
)
8579
return clean_out_string(
86-
"----- US Bank Check -----\n"
87-
f"Filename: {self.filename or ''}".rstrip() + "\n"
80+
"----- US Bank Check V1 -----\n"
81+
f"Filename: {self.filename or ''}\n"
8882
f"Routing number: {self.routing_number}\n"
8983
f"Account number: {self.account_number}\n"
9084
f"Check number: {self.check_number}\n"

mindee/fields/orientation.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class OrientationField(BaseField):
1010
def __init__(
1111
self,
1212
prediction: TypePrediction,
13-
value_key: str = "degrees",
13+
value_key: str = "value",
1414
reconstructed: bool = False,
1515
page_n: Optional[int] = None,
1616
):
@@ -35,4 +35,3 @@ def __init__(
3535
self.value = 0
3636
except (TypeError, ValueError, KeyError):
3737
self.value = 0
38-
self.confidence = 0.0

mindee/fields/position.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
)
1111

1212

13-
class Position(BaseField):
13+
class PositionField(BaseField):
1414
value: Optional[Polygon] = None
1515
polygon: Optional[Polygon] = None
1616
quadrangle: Optional[Quadrilateral] = None

0 commit comments

Comments
 (0)