mindee 2.2.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +2 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +40 -0
- data/README.md +29 -16
- data/bin/mindee.rb +23 -26
- data/docs/code_samples/bank_account_details_v1.txt +10 -5
- data/docs/code_samples/bank_account_details_v2.txt +19 -0
- data/docs/code_samples/bank_check_v1.txt +10 -5
- data/docs/code_samples/carte_vitale_v1.txt +10 -5
- data/docs/code_samples/custom_v1.txt +19 -10
- data/docs/code_samples/default.txt +10 -2
- data/docs/code_samples/expense_receipts_v4.txt +10 -5
- data/docs/code_samples/expense_receipts_v5.txt +11 -6
- data/docs/code_samples/financial_document_v1.txt +10 -5
- data/docs/code_samples/idcard_fr_v1.txt +10 -5
- data/docs/code_samples/invoice_splitter_v1_async.txt +66 -0
- data/docs/code_samples/invoices_v4.txt +10 -5
- data/docs/code_samples/license_plates_v1.txt +10 -5
- data/docs/code_samples/passport_v1.txt +10 -5
- data/docs/code_samples/proof_of_address_v1.txt +10 -5
- data/docs/code_samples/us_driver_license_v1.txt +19 -0
- data/docs/ruby-api-builder.md +30 -31
- data/docs/ruby-getting-started.md +64 -23
- data/docs/ruby-invoice-ocr.md +70 -59
- data/docs/ruby-passport-ocr.md +49 -40
- data/docs/ruby-receipt-ocr.md +45 -32
- data/lib/mindee/client.rb +150 -148
- data/lib/mindee/geometry/min_max.rb +23 -0
- data/lib/mindee/geometry/point.rb +35 -0
- data/lib/mindee/geometry/polygon.rb +23 -0
- data/lib/mindee/geometry/quadrilateral.rb +45 -0
- data/lib/mindee/geometry/utils.rb +81 -0
- data/lib/mindee/geometry.rb +5 -116
- data/lib/mindee/http/endpoint.rb +115 -16
- data/lib/mindee/http.rb +3 -0
- data/lib/mindee/input/sources.rb +90 -73
- data/lib/mindee/parsing/common/api_response.rb +109 -0
- data/lib/mindee/parsing/common/document.rb +48 -0
- data/lib/mindee/parsing/common/error.rb +24 -0
- data/lib/mindee/parsing/common/inference.rb +43 -0
- data/lib/mindee/parsing/common/ocr/mvision_v1.rb +34 -0
- data/lib/mindee/parsing/common/ocr/ocr.rb +169 -0
- data/lib/mindee/parsing/common/ocr.rb +3 -0
- data/lib/mindee/parsing/common/orientation.rb +26 -0
- data/lib/mindee/parsing/common/page.rb +40 -0
- data/lib/mindee/parsing/common/prediction.rb +15 -0
- data/lib/mindee/parsing/common/product.rb +19 -0
- data/lib/mindee/parsing/common.rb +10 -0
- data/lib/mindee/parsing/custom/classification_field.rb +28 -0
- data/lib/mindee/parsing/custom/list_field.rb +76 -0
- data/lib/mindee/parsing/custom.rb +4 -0
- data/lib/mindee/parsing/standard/amount_field.rb +26 -0
- data/lib/mindee/parsing/standard/base_field.rb +104 -0
- data/lib/mindee/parsing/standard/classification_field.rb +16 -0
- data/lib/mindee/parsing/standard/company_registration_field.rb +21 -0
- data/lib/mindee/parsing/standard/date_field.rb +34 -0
- data/lib/mindee/parsing/standard/locale_field.rb +50 -0
- data/lib/mindee/parsing/standard/payment_details_field.rb +42 -0
- data/lib/mindee/parsing/standard/position_field.rb +47 -0
- data/lib/mindee/parsing/standard/tax_field.rb +108 -0
- data/lib/mindee/parsing/standard/text_field.rb +16 -0
- data/lib/mindee/parsing/standard.rb +12 -0
- data/lib/mindee/parsing.rb +3 -2
- data/lib/mindee/{input → pdf}/pdf_processing.rb +4 -32
- data/lib/mindee/pdf/pdf_tools.rb +34 -0
- data/lib/mindee/pdf.rb +3 -0
- data/lib/mindee/product/.rubocop.yml +5 -0
- data/lib/mindee/product/custom/custom_v1.rb +35 -0
- data/lib/mindee/product/custom/custom_v1_document.rb +60 -0
- data/lib/mindee/product/custom/custom_v1_page.rb +32 -0
- data/lib/mindee/product/eu/license_plate/license_plate_v1.rb +38 -0
- data/lib/mindee/product/eu/license_plate/license_plate_v1_document.rb +37 -0
- data/lib/mindee/product/eu/license_plate/license_plate_v1_page.rb +34 -0
- data/lib/mindee/product/financial_document/financial_document_v1.rb +36 -0
- data/lib/mindee/product/financial_document/financial_document_v1_document.rb +202 -0
- data/lib/mindee/product/financial_document/financial_document_v1_line_item.rb +90 -0
- data/lib/mindee/product/financial_document/financial_document_v1_page.rb +32 -0
- data/lib/mindee/product/fr/bank_account_details/bank_account_details_v1.rb +38 -0
- data/lib/mindee/product/fr/bank_account_details/bank_account_details_v1_document.rb +43 -0
- data/lib/mindee/product/fr/bank_account_details/bank_account_details_v1_page.rb +34 -0
- data/lib/mindee/product/fr/bank_account_details/bank_account_details_v2.rb +38 -0
- data/lib/mindee/product/fr/bank_account_details/bank_account_details_v2_bban.rb +71 -0
- data/lib/mindee/product/fr/bank_account_details/bank_account_details_v2_document.rb +51 -0
- data/lib/mindee/product/fr/bank_account_details/bank_account_details_v2_page.rb +34 -0
- data/lib/mindee/product/fr/carte_vitale/carte_vitale_v1.rb +38 -0
- data/lib/mindee/product/fr/carte_vitale/carte_vitale_v1_document.rb +52 -0
- data/lib/mindee/product/fr/carte_vitale/carte_vitale_v1_page.rb +34 -0
- data/lib/mindee/product/fr/id_card/id_card_v1.rb +38 -0
- data/lib/mindee/product/fr/id_card/id_card_v1_document.rb +82 -0
- data/lib/mindee/product/fr/id_card/id_card_v1_page.rb +48 -0
- data/lib/mindee/product/invoice/invoice_v4.rb +37 -0
- data/lib/mindee/product/invoice/invoice_v4_document.rb +212 -0
- data/lib/mindee/product/invoice/invoice_v4_line_item.rb +66 -0
- data/lib/mindee/product/invoice/invoice_v4_page.rb +32 -0
- data/lib/mindee/product/invoice_splitter/invoice_splitter_v1.rb +36 -0
- data/lib/mindee/product/invoice_splitter/invoice_splitter_v1_document.rb +65 -0
- data/lib/mindee/product/invoice_splitter/invoice_splitter_v1_page.rb +32 -0
- data/lib/mindee/product/passport/passport_v1.rb +36 -0
- data/lib/mindee/{parsing/prediction/fr/id_card/id_card_v1.rb → product/passport/passport_v1_document.rb} +45 -45
- data/lib/mindee/product/passport/passport_v1_page.rb +32 -0
- data/lib/mindee/product/proof_of_address/proof_of_address_v1.rb +36 -0
- data/lib/mindee/product/proof_of_address/proof_of_address_v1_document.rb +83 -0
- data/lib/mindee/product/proof_of_address/proof_of_address_v1_page.rb +32 -0
- data/lib/mindee/product/receipt/receipt_v4.rb +36 -0
- data/lib/mindee/product/receipt/receipt_v4_document.rb +86 -0
- data/lib/mindee/product/receipt/receipt_v4_page.rb +32 -0
- data/lib/mindee/product/receipt/receipt_v5.rb +36 -0
- data/lib/mindee/product/receipt/receipt_v5_document.rb +149 -0
- data/lib/mindee/product/receipt/receipt_v5_line_item.rb +69 -0
- data/lib/mindee/product/receipt/receipt_v5_page.rb +32 -0
- data/lib/mindee/product/us/bank_check/bank_check_v1.rb +38 -0
- data/lib/mindee/product/us/bank_check/bank_check_v1_document.rb +62 -0
- data/lib/mindee/product/us/bank_check/bank_check_v1_page.rb +57 -0
- data/lib/mindee/product/us/driver_license/driver_license_v1.rb +38 -0
- data/lib/mindee/product/us/driver_license/driver_license_v1_document.rb +113 -0
- data/lib/mindee/product/us/driver_license/driver_license_v1_page.rb +53 -0
- data/lib/mindee/product.rb +17 -0
- data/lib/mindee/version.rb +2 -1
- data/lib/mindee.rb +3 -1
- metadata +91 -38
- data/docs/code_samples/shipping_containers_v1.txt +0 -14
- data/lib/mindee/document_config.rb +0 -60
- data/lib/mindee/parsing/document.rb +0 -31
- data/lib/mindee/parsing/error.rb +0 -22
- data/lib/mindee/parsing/inference.rb +0 -53
- data/lib/mindee/parsing/page.rb +0 -46
- data/lib/mindee/parsing/prediction/base.rb +0 -30
- data/lib/mindee/parsing/prediction/common_fields/amount.rb +0 -21
- data/lib/mindee/parsing/prediction/common_fields/base.rb +0 -72
- data/lib/mindee/parsing/prediction/common_fields/company_registration.rb +0 -17
- data/lib/mindee/parsing/prediction/common_fields/date.rb +0 -30
- data/lib/mindee/parsing/prediction/common_fields/locale.rb +0 -45
- data/lib/mindee/parsing/prediction/common_fields/payment_details.rb +0 -33
- data/lib/mindee/parsing/prediction/common_fields/position.rb +0 -39
- data/lib/mindee/parsing/prediction/common_fields/tax.rb +0 -44
- data/lib/mindee/parsing/prediction/common_fields/text.rb +0 -12
- data/lib/mindee/parsing/prediction/common_fields.rb +0 -11
- data/lib/mindee/parsing/prediction/custom/custom_v1.rb +0 -58
- data/lib/mindee/parsing/prediction/custom/fields.rb +0 -91
- data/lib/mindee/parsing/prediction/eu/license_plate/license_plate_v1.rb +0 -34
- data/lib/mindee/parsing/prediction/financial_document/financial_document_v1.rb +0 -237
- data/lib/mindee/parsing/prediction/financial_document/financial_document_v1_line_item.rb +0 -58
- data/lib/mindee/parsing/prediction/fr/bank_account_details/bank_account_details_v1.rb +0 -40
- data/lib/mindee/parsing/prediction/fr/carte_vitale/carte_vitale_v1.rb +0 -49
- data/lib/mindee/parsing/prediction/invoice/invoice_v4.rb +0 -212
- data/lib/mindee/parsing/prediction/invoice/invoice_v4_line_item.rb +0 -58
- data/lib/mindee/parsing/prediction/passport/passport_v1.rb +0 -121
- data/lib/mindee/parsing/prediction/proof_of_address/proof_of_address_v1.rb +0 -80
- data/lib/mindee/parsing/prediction/receipt/receipt_v4.rb +0 -87
- data/lib/mindee/parsing/prediction/receipt/receipt_v5.rb +0 -136
- data/lib/mindee/parsing/prediction/receipt/receipt_v5_line_item.rb +0 -37
- data/lib/mindee/parsing/prediction/shipping_container/shipping_container_v1.rb +0 -38
- data/lib/mindee/parsing/prediction/us/bank_check/bank_check_v1.rb +0 -70
- data/lib/mindee/parsing/prediction.rb +0 -15
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mindee
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mindee, SA
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-08-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: marcel
|
|
@@ -118,6 +118,7 @@ files:
|
|
|
118
118
|
- bin/console
|
|
119
119
|
- bin/mindee.rb
|
|
120
120
|
- docs/code_samples/bank_account_details_v1.txt
|
|
121
|
+
- docs/code_samples/bank_account_details_v2.txt
|
|
121
122
|
- docs/code_samples/bank_check_v1.txt
|
|
122
123
|
- docs/code_samples/carte_vitale_v1.txt
|
|
123
124
|
- docs/code_samples/custom_v1.txt
|
|
@@ -126,11 +127,12 @@ files:
|
|
|
126
127
|
- docs/code_samples/expense_receipts_v5.txt
|
|
127
128
|
- docs/code_samples/financial_document_v1.txt
|
|
128
129
|
- docs/code_samples/idcard_fr_v1.txt
|
|
130
|
+
- docs/code_samples/invoice_splitter_v1_async.txt
|
|
129
131
|
- docs/code_samples/invoices_v4.txt
|
|
130
132
|
- docs/code_samples/license_plates_v1.txt
|
|
131
133
|
- docs/code_samples/passport_v1.txt
|
|
132
134
|
- docs/code_samples/proof_of_address_v1.txt
|
|
133
|
-
- docs/code_samples/
|
|
135
|
+
- docs/code_samples/us_driver_license_v1.txt
|
|
134
136
|
- docs/ruby-api-builder.md
|
|
135
137
|
- docs/ruby-getting-started.md
|
|
136
138
|
- docs/ruby-invoice-ocr.md
|
|
@@ -138,46 +140,97 @@ files:
|
|
|
138
140
|
- docs/ruby-receipt-ocr.md
|
|
139
141
|
- lib/mindee.rb
|
|
140
142
|
- lib/mindee/client.rb
|
|
141
|
-
- lib/mindee/document_config.rb
|
|
142
143
|
- lib/mindee/geometry.rb
|
|
144
|
+
- lib/mindee/geometry/min_max.rb
|
|
145
|
+
- lib/mindee/geometry/point.rb
|
|
146
|
+
- lib/mindee/geometry/polygon.rb
|
|
147
|
+
- lib/mindee/geometry/quadrilateral.rb
|
|
148
|
+
- lib/mindee/geometry/utils.rb
|
|
149
|
+
- lib/mindee/http.rb
|
|
143
150
|
- lib/mindee/http/endpoint.rb
|
|
144
151
|
- lib/mindee/input.rb
|
|
145
|
-
- lib/mindee/input/pdf_processing.rb
|
|
146
152
|
- lib/mindee/input/sources.rb
|
|
147
153
|
- lib/mindee/parsing.rb
|
|
148
|
-
- lib/mindee/parsing/
|
|
149
|
-
- lib/mindee/parsing/
|
|
150
|
-
- lib/mindee/parsing/
|
|
151
|
-
- lib/mindee/parsing/
|
|
152
|
-
- lib/mindee/parsing/
|
|
153
|
-
- lib/mindee/parsing/
|
|
154
|
-
- lib/mindee/parsing/
|
|
155
|
-
- lib/mindee/parsing/
|
|
156
|
-
- lib/mindee/parsing/
|
|
157
|
-
- lib/mindee/parsing/
|
|
158
|
-
- lib/mindee/parsing/prediction
|
|
159
|
-
- lib/mindee/parsing/
|
|
160
|
-
- lib/mindee/parsing/
|
|
161
|
-
- lib/mindee/parsing/
|
|
162
|
-
- lib/mindee/parsing/
|
|
163
|
-
- lib/mindee/parsing/
|
|
164
|
-
- lib/mindee/parsing/
|
|
165
|
-
- lib/mindee/parsing/
|
|
166
|
-
- lib/mindee/parsing/
|
|
167
|
-
- lib/mindee/parsing/
|
|
168
|
-
- lib/mindee/parsing/
|
|
169
|
-
- lib/mindee/parsing/
|
|
170
|
-
- lib/mindee/parsing/
|
|
171
|
-
- lib/mindee/parsing/
|
|
172
|
-
- lib/mindee/parsing/
|
|
173
|
-
- lib/mindee/parsing/
|
|
174
|
-
- lib/mindee/
|
|
175
|
-
- lib/mindee/
|
|
176
|
-
- lib/mindee/
|
|
177
|
-
- lib/mindee/
|
|
178
|
-
- lib/mindee/
|
|
179
|
-
- lib/mindee/
|
|
180
|
-
- lib/mindee/
|
|
154
|
+
- lib/mindee/parsing/common.rb
|
|
155
|
+
- lib/mindee/parsing/common/api_response.rb
|
|
156
|
+
- lib/mindee/parsing/common/document.rb
|
|
157
|
+
- lib/mindee/parsing/common/error.rb
|
|
158
|
+
- lib/mindee/parsing/common/inference.rb
|
|
159
|
+
- lib/mindee/parsing/common/ocr.rb
|
|
160
|
+
- lib/mindee/parsing/common/ocr/mvision_v1.rb
|
|
161
|
+
- lib/mindee/parsing/common/ocr/ocr.rb
|
|
162
|
+
- lib/mindee/parsing/common/orientation.rb
|
|
163
|
+
- lib/mindee/parsing/common/page.rb
|
|
164
|
+
- lib/mindee/parsing/common/prediction.rb
|
|
165
|
+
- lib/mindee/parsing/common/product.rb
|
|
166
|
+
- lib/mindee/parsing/custom.rb
|
|
167
|
+
- lib/mindee/parsing/custom/classification_field.rb
|
|
168
|
+
- lib/mindee/parsing/custom/list_field.rb
|
|
169
|
+
- lib/mindee/parsing/standard.rb
|
|
170
|
+
- lib/mindee/parsing/standard/amount_field.rb
|
|
171
|
+
- lib/mindee/parsing/standard/base_field.rb
|
|
172
|
+
- lib/mindee/parsing/standard/classification_field.rb
|
|
173
|
+
- lib/mindee/parsing/standard/company_registration_field.rb
|
|
174
|
+
- lib/mindee/parsing/standard/date_field.rb
|
|
175
|
+
- lib/mindee/parsing/standard/locale_field.rb
|
|
176
|
+
- lib/mindee/parsing/standard/payment_details_field.rb
|
|
177
|
+
- lib/mindee/parsing/standard/position_field.rb
|
|
178
|
+
- lib/mindee/parsing/standard/tax_field.rb
|
|
179
|
+
- lib/mindee/parsing/standard/text_field.rb
|
|
180
|
+
- lib/mindee/pdf.rb
|
|
181
|
+
- lib/mindee/pdf/pdf_processing.rb
|
|
182
|
+
- lib/mindee/pdf/pdf_tools.rb
|
|
183
|
+
- lib/mindee/product.rb
|
|
184
|
+
- lib/mindee/product/.rubocop.yml
|
|
185
|
+
- lib/mindee/product/custom/custom_v1.rb
|
|
186
|
+
- lib/mindee/product/custom/custom_v1_document.rb
|
|
187
|
+
- lib/mindee/product/custom/custom_v1_page.rb
|
|
188
|
+
- lib/mindee/product/eu/license_plate/license_plate_v1.rb
|
|
189
|
+
- lib/mindee/product/eu/license_plate/license_plate_v1_document.rb
|
|
190
|
+
- lib/mindee/product/eu/license_plate/license_plate_v1_page.rb
|
|
191
|
+
- lib/mindee/product/financial_document/financial_document_v1.rb
|
|
192
|
+
- lib/mindee/product/financial_document/financial_document_v1_document.rb
|
|
193
|
+
- lib/mindee/product/financial_document/financial_document_v1_line_item.rb
|
|
194
|
+
- lib/mindee/product/financial_document/financial_document_v1_page.rb
|
|
195
|
+
- lib/mindee/product/fr/bank_account_details/bank_account_details_v1.rb
|
|
196
|
+
- lib/mindee/product/fr/bank_account_details/bank_account_details_v1_document.rb
|
|
197
|
+
- lib/mindee/product/fr/bank_account_details/bank_account_details_v1_page.rb
|
|
198
|
+
- lib/mindee/product/fr/bank_account_details/bank_account_details_v2.rb
|
|
199
|
+
- lib/mindee/product/fr/bank_account_details/bank_account_details_v2_bban.rb
|
|
200
|
+
- lib/mindee/product/fr/bank_account_details/bank_account_details_v2_document.rb
|
|
201
|
+
- lib/mindee/product/fr/bank_account_details/bank_account_details_v2_page.rb
|
|
202
|
+
- lib/mindee/product/fr/carte_vitale/carte_vitale_v1.rb
|
|
203
|
+
- lib/mindee/product/fr/carte_vitale/carte_vitale_v1_document.rb
|
|
204
|
+
- lib/mindee/product/fr/carte_vitale/carte_vitale_v1_page.rb
|
|
205
|
+
- lib/mindee/product/fr/id_card/id_card_v1.rb
|
|
206
|
+
- lib/mindee/product/fr/id_card/id_card_v1_document.rb
|
|
207
|
+
- lib/mindee/product/fr/id_card/id_card_v1_page.rb
|
|
208
|
+
- lib/mindee/product/invoice/invoice_v4.rb
|
|
209
|
+
- lib/mindee/product/invoice/invoice_v4_document.rb
|
|
210
|
+
- lib/mindee/product/invoice/invoice_v4_line_item.rb
|
|
211
|
+
- lib/mindee/product/invoice/invoice_v4_page.rb
|
|
212
|
+
- lib/mindee/product/invoice_splitter/invoice_splitter_v1.rb
|
|
213
|
+
- lib/mindee/product/invoice_splitter/invoice_splitter_v1_document.rb
|
|
214
|
+
- lib/mindee/product/invoice_splitter/invoice_splitter_v1_page.rb
|
|
215
|
+
- lib/mindee/product/passport/passport_v1.rb
|
|
216
|
+
- lib/mindee/product/passport/passport_v1_document.rb
|
|
217
|
+
- lib/mindee/product/passport/passport_v1_page.rb
|
|
218
|
+
- lib/mindee/product/proof_of_address/proof_of_address_v1.rb
|
|
219
|
+
- lib/mindee/product/proof_of_address/proof_of_address_v1_document.rb
|
|
220
|
+
- lib/mindee/product/proof_of_address/proof_of_address_v1_page.rb
|
|
221
|
+
- lib/mindee/product/receipt/receipt_v4.rb
|
|
222
|
+
- lib/mindee/product/receipt/receipt_v4_document.rb
|
|
223
|
+
- lib/mindee/product/receipt/receipt_v4_page.rb
|
|
224
|
+
- lib/mindee/product/receipt/receipt_v5.rb
|
|
225
|
+
- lib/mindee/product/receipt/receipt_v5_document.rb
|
|
226
|
+
- lib/mindee/product/receipt/receipt_v5_line_item.rb
|
|
227
|
+
- lib/mindee/product/receipt/receipt_v5_page.rb
|
|
228
|
+
- lib/mindee/product/us/bank_check/bank_check_v1.rb
|
|
229
|
+
- lib/mindee/product/us/bank_check/bank_check_v1_document.rb
|
|
230
|
+
- lib/mindee/product/us/bank_check/bank_check_v1_page.rb
|
|
231
|
+
- lib/mindee/product/us/driver_license/driver_license_v1.rb
|
|
232
|
+
- lib/mindee/product/us/driver_license/driver_license_v1_document.rb
|
|
233
|
+
- lib/mindee/product/us/driver_license/driver_license_v1_page.rb
|
|
181
234
|
- lib/mindee/version.rb
|
|
182
235
|
- mindee.gemspec
|
|
183
236
|
homepage: https://github.com/mindee/mindee-api-ruby
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
require 'mindee'
|
|
2
|
-
|
|
3
|
-
# Init a new client
|
|
4
|
-
mindee_client = Mindee::Client.new(api_key: 'my-api-key')
|
|
5
|
-
|
|
6
|
-
# Load a file from disk and parse it
|
|
7
|
-
result = mindee_client.doc_from_path('/path/to/the/file.ext')
|
|
8
|
-
.parse(Mindee::Prediction::ShippingContainerV1)
|
|
9
|
-
|
|
10
|
-
# Print a full summary of the parsed data in RST format
|
|
11
|
-
puts result
|
|
12
|
-
|
|
13
|
-
# Print the document-level parsed data
|
|
14
|
-
# puts result.inference.prediction
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'json'
|
|
4
|
-
|
|
5
|
-
require_relative 'http/endpoint'
|
|
6
|
-
require_relative 'parsing/document'
|
|
7
|
-
require_relative 'parsing/error'
|
|
8
|
-
require_relative 'parsing/prediction'
|
|
9
|
-
|
|
10
|
-
module Mindee
|
|
11
|
-
# Specific client for sending a document to the API.
|
|
12
|
-
class DocumentConfig
|
|
13
|
-
# Array of possible Mindee::Endpoint to be used.
|
|
14
|
-
# @return [Mindee::HTTP::Endpoint]
|
|
15
|
-
attr_reader :endpoint
|
|
16
|
-
|
|
17
|
-
# @param prediction_class [Class<Mindee::Prediction::Prediction>]
|
|
18
|
-
# @param endpoint [Mindee::HTTP::Endpoint]
|
|
19
|
-
def initialize(prediction_class, endpoint)
|
|
20
|
-
@prediction_class = prediction_class
|
|
21
|
-
@endpoint = endpoint
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Call the prediction API.
|
|
25
|
-
# @param input_doc [Mindee::InputDocument]
|
|
26
|
-
# @param include_words [Boolean]
|
|
27
|
-
# @param close_file [Boolean]
|
|
28
|
-
# @param cropper [Boolean]
|
|
29
|
-
# @return [Mindee::DocumentResponse]
|
|
30
|
-
def predict(input_doc, include_words, close_file, cropper)
|
|
31
|
-
check_api_key
|
|
32
|
-
response = predict_request(input_doc, include_words, close_file, cropper)
|
|
33
|
-
hashed_response = JSON.parse(response.body, object_class: Hash)
|
|
34
|
-
return Document.new(@prediction_class, hashed_response['document']) if (200..299).include?(response.code.to_i)
|
|
35
|
-
|
|
36
|
-
error = Parsing::Error.new(hashed_response['api_request']['error'])
|
|
37
|
-
raise error
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
private
|
|
41
|
-
|
|
42
|
-
# @param input_doc [Mindee::InputDocument]
|
|
43
|
-
# @param include_words [Boolean]
|
|
44
|
-
# @param close_file [Boolean]
|
|
45
|
-
# # @param cropper [Boolean]
|
|
46
|
-
# @return [Net::HTTPResponse]
|
|
47
|
-
def predict_request(input_doc, include_words, close_file, cropper)
|
|
48
|
-
@endpoint.predict_req_post(input_doc, include_words: include_words, close_file: close_file, cropper: cropper)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def check_api_key
|
|
52
|
-
return unless @endpoint.api_key.nil? || @endpoint.api_key.empty?
|
|
53
|
-
|
|
54
|
-
raise "Missing API key for '#{@document_type}', " \
|
|
55
|
-
"check your Client Configuration.\n" \
|
|
56
|
-
'You can set this using the ' \
|
|
57
|
-
"'#{HTTP::API_KEY_ENV_NAME}' environment variable."
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative 'inference'
|
|
4
|
-
|
|
5
|
-
module Mindee
|
|
6
|
-
# Stores all response attributes.
|
|
7
|
-
class Document
|
|
8
|
-
# @return [Mindee::Inference]
|
|
9
|
-
attr_reader :inference
|
|
10
|
-
# @return [String] Filename sent to the API
|
|
11
|
-
attr_reader :name
|
|
12
|
-
# @return [String] Mindee ID of the document
|
|
13
|
-
attr_reader :id
|
|
14
|
-
|
|
15
|
-
# @param prediction_class [Class<Mindee::Prediction::Prediction>]
|
|
16
|
-
# @param http_response [Hash]
|
|
17
|
-
def initialize(prediction_class, http_response)
|
|
18
|
-
@id = http_response['id']
|
|
19
|
-
@name = http_response['name']
|
|
20
|
-
@inference = Mindee::Inference.new(prediction_class, http_response['inference'])
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def to_s
|
|
24
|
-
out_str = String.new
|
|
25
|
-
out_str << "########\nDocument\n########"
|
|
26
|
-
out_str << "\n:Mindee ID: #{@id}"
|
|
27
|
-
out_str << "\n:Filename: #{@name}"
|
|
28
|
-
out_str << "\n\n#{@inference}"
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
data/lib/mindee/parsing/error.rb
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Mindee
|
|
4
|
-
module Parsing
|
|
5
|
-
# API Error
|
|
6
|
-
class Error < StandardError
|
|
7
|
-
# @return [String]
|
|
8
|
-
attr_reader :api_code
|
|
9
|
-
# @return [String]
|
|
10
|
-
attr_reader :api_details
|
|
11
|
-
# @return [String]
|
|
12
|
-
attr_reader :api_message
|
|
13
|
-
|
|
14
|
-
def initialize(error)
|
|
15
|
-
@api_code = error['code']
|
|
16
|
-
@api_details = error['details']
|
|
17
|
-
@api_message = error['message']
|
|
18
|
-
super("#{@api_code}: #{@api_details} - #{@api_message}")
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative 'page'
|
|
4
|
-
|
|
5
|
-
module Mindee
|
|
6
|
-
# Product information
|
|
7
|
-
class Product
|
|
8
|
-
attr_reader :name, :type, :version
|
|
9
|
-
|
|
10
|
-
# @param http_response [Hash]
|
|
11
|
-
def initialize(http_response)
|
|
12
|
-
@name = http_response['name']
|
|
13
|
-
@type = http_response['type']
|
|
14
|
-
@version = http_response['version']
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Inference holds all predictions
|
|
19
|
-
class Inference
|
|
20
|
-
# @return [Boolean]
|
|
21
|
-
attr_reader :is_rotation_applied
|
|
22
|
-
# @return [Array<Mindee::Page>]
|
|
23
|
-
attr_reader :pages
|
|
24
|
-
# @return [Mindee::Prediction]
|
|
25
|
-
attr_reader :prediction
|
|
26
|
-
# @return [Mindee::Product]
|
|
27
|
-
attr_reader :product
|
|
28
|
-
|
|
29
|
-
# @param prediction_class [Class<Mindee::Prediction::Prediction>]
|
|
30
|
-
# @param http_response [Hash]
|
|
31
|
-
def initialize(prediction_class, http_response)
|
|
32
|
-
@is_rotation_applied = http_response['is_rotation_applied']
|
|
33
|
-
@prediction = prediction_class.new(http_response['prediction'], nil)
|
|
34
|
-
@product = Product.new(http_response['product'])
|
|
35
|
-
@pages = []
|
|
36
|
-
http_response['pages'].each do |page|
|
|
37
|
-
@pages.push(Page.new(prediction_class, page))
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def to_s
|
|
42
|
-
is_rotation_applied = @is_rotation_applied ? 'Yes' : 'No'
|
|
43
|
-
out_str = String.new
|
|
44
|
-
out_str << "Inference\n#########"
|
|
45
|
-
out_str << "\n:Product: #{@product.name} v#{@product.version}"
|
|
46
|
-
out_str << "\n:Rotation applied: #{is_rotation_applied}"
|
|
47
|
-
out_str << "\n\nPrediction\n=========="
|
|
48
|
-
out_str << "\n#{@prediction}"
|
|
49
|
-
out_str << "\n\nPage Predictions\n================\n\n"
|
|
50
|
-
out_str << @pages.map(&:to_s).join("\n\n")
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
data/lib/mindee/parsing/page.rb
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Mindee
|
|
4
|
-
# Page orientation
|
|
5
|
-
class Orientation
|
|
6
|
-
# @return [Integer]
|
|
7
|
-
attr_reader :page_id
|
|
8
|
-
# A prediction among these 3 possible outputs:
|
|
9
|
-
# * 0 degrees: the page is already upright
|
|
10
|
-
# * 90 degrees: the page must be rotated clockwise to be upright
|
|
11
|
-
# * 270 degrees: the page must be rotated counterclockwise to be upright
|
|
12
|
-
# @return [Integer, nil]
|
|
13
|
-
attr_reader :value
|
|
14
|
-
|
|
15
|
-
# @param prediction [Hash]
|
|
16
|
-
# @param page_id [Integer]
|
|
17
|
-
def initialize(prediction, page_id)
|
|
18
|
-
@value = prediction['value']
|
|
19
|
-
@page_id = page_id
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Page object
|
|
24
|
-
class Page
|
|
25
|
-
# @return [Integer]
|
|
26
|
-
attr_reader :id
|
|
27
|
-
# @return [Mindee::Prediction]
|
|
28
|
-
attr_reader :prediction
|
|
29
|
-
# @return [Mindee::Orientation]
|
|
30
|
-
attr_reader :orientation
|
|
31
|
-
|
|
32
|
-
def initialize(prediction_class, page)
|
|
33
|
-
@id = page['id'].to_i
|
|
34
|
-
@prediction = prediction_class.new(page['prediction'], @id)
|
|
35
|
-
@orientation = Orientation.new(page['orientation'], @id)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def to_s
|
|
39
|
-
out_str = String.new
|
|
40
|
-
title = "Page #{@id}"
|
|
41
|
-
out_str << "#{title}\n"
|
|
42
|
-
out_str << ('-' * title.size)
|
|
43
|
-
out_str << "\n#{@prediction}"
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Mindee
|
|
4
|
-
module Prediction
|
|
5
|
-
# Base document object.
|
|
6
|
-
class Prediction
|
|
7
|
-
# document type
|
|
8
|
-
# @return [String]
|
|
9
|
-
attr_reader :document_type
|
|
10
|
-
# Validation checks for the document
|
|
11
|
-
# @return [Hash<Symbol, Boolean>]
|
|
12
|
-
attr_reader :checklist
|
|
13
|
-
# Original filename of the document
|
|
14
|
-
# @return [String, nil]
|
|
15
|
-
attr_reader :filename
|
|
16
|
-
# Detected MIME type of the document
|
|
17
|
-
# @return [String, nil]
|
|
18
|
-
attr_reader :file_mimetype
|
|
19
|
-
|
|
20
|
-
def initialize(_prediction, _page_id)
|
|
21
|
-
@checklist = {}
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# @return [Boolean]
|
|
25
|
-
def all_checks
|
|
26
|
-
@checklist.all? { |_, value| value == true }
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
|
-
module Mindee
|
|
6
|
-
# Represents tax information.
|
|
7
|
-
class AmountField < Field
|
|
8
|
-
# Amount value as 3 decimal float
|
|
9
|
-
# @return [Float, nil]
|
|
10
|
-
attr_reader :value
|
|
11
|
-
|
|
12
|
-
def initialize(prediction, page_id, reconstructed: false)
|
|
13
|
-
super
|
|
14
|
-
@value = @value.round(3) unless @value.nil?
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def to_s
|
|
18
|
-
Field.float_to_string(@value)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../../geometry'
|
|
4
|
-
|
|
5
|
-
module Mindee
|
|
6
|
-
# Base field object.
|
|
7
|
-
class Field
|
|
8
|
-
# @return [String, Float, Integer, Boolean]
|
|
9
|
-
attr_reader :value
|
|
10
|
-
# @return [Array<Array<Float>>]
|
|
11
|
-
attr_reader :bounding_box
|
|
12
|
-
# @return [Mindee::Geometry::Polygon]
|
|
13
|
-
attr_reader :polygon
|
|
14
|
-
# @return [Integer, nil]
|
|
15
|
-
attr_reader :page_id
|
|
16
|
-
# true if the field was reconstructed or computed using other fields.
|
|
17
|
-
# @return [Boolean]
|
|
18
|
-
attr_reader :reconstructed
|
|
19
|
-
# The confidence score, value will be between 0.0 and 1.0
|
|
20
|
-
# @return [Float]
|
|
21
|
-
attr_accessor :confidence
|
|
22
|
-
|
|
23
|
-
# @param prediction [Hash]
|
|
24
|
-
# @param page_id [Integer, nil]
|
|
25
|
-
# @param reconstructed [Boolean]
|
|
26
|
-
def initialize(prediction, page_id, reconstructed: false)
|
|
27
|
-
@value = prediction['value']
|
|
28
|
-
@confidence = prediction['confidence']
|
|
29
|
-
@polygon = Geometry.polygon_from_prediction(prediction['polygon'])
|
|
30
|
-
@bounding_box = Geometry.get_bounding_box(@polygon) unless @polygon.nil? || @polygon.empty?
|
|
31
|
-
@page_id = page_id || prediction['page_id']
|
|
32
|
-
@reconstructed = reconstructed
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def to_s
|
|
36
|
-
@value ? @value.to_s : ''
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Multiply all the Mindee::Field confidences in the array.
|
|
40
|
-
def self.array_confidence(field_array)
|
|
41
|
-
product = 1
|
|
42
|
-
field_array.each do |field|
|
|
43
|
-
return 0.0 if field.confidence.nil?
|
|
44
|
-
|
|
45
|
-
product *= field.confidence
|
|
46
|
-
end
|
|
47
|
-
product.to_f
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Add all the Mindee::Field values in the array.
|
|
51
|
-
def self.array_sum(field_array)
|
|
52
|
-
arr_sum = 0
|
|
53
|
-
field_array.each do |field|
|
|
54
|
-
return 0.0 if field.value.nil?
|
|
55
|
-
|
|
56
|
-
arr_sum += field.value
|
|
57
|
-
end
|
|
58
|
-
arr_sum.to_f
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# @param value [Float]
|
|
62
|
-
# @param min_precision [Integer]
|
|
63
|
-
def self.float_to_string(value, min_precision = 2)
|
|
64
|
-
return String.new if value.nil?
|
|
65
|
-
|
|
66
|
-
precision = value.to_f.to_s.split('.')[1].size
|
|
67
|
-
precision = [precision, min_precision].max
|
|
68
|
-
format_string = "%.#{precision}f"
|
|
69
|
-
format(format_string, value)
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Mindee
|
|
4
|
-
# Company registration number or code, and its type.
|
|
5
|
-
class CompanyRegistration < Field
|
|
6
|
-
# @return [String]
|
|
7
|
-
attr_reader :type
|
|
8
|
-
|
|
9
|
-
# @param prediction [Hash]
|
|
10
|
-
# @param page_id [Integer, nil]
|
|
11
|
-
# @param reconstructed [Boolean]
|
|
12
|
-
def initialize(prediction, page_id, reconstructed: false)
|
|
13
|
-
super
|
|
14
|
-
@type = prediction['type']
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'date'
|
|
4
|
-
|
|
5
|
-
require_relative 'base'
|
|
6
|
-
|
|
7
|
-
module Mindee
|
|
8
|
-
# Represents a date.
|
|
9
|
-
class DateField < Field
|
|
10
|
-
# The date as a standard Ruby `Date` object.
|
|
11
|
-
# @return [Date, nil]
|
|
12
|
-
attr_reader :date_object
|
|
13
|
-
# The ISO 8601 representation of the date, regardless of the `raw` contents.
|
|
14
|
-
# @return [String, nil]
|
|
15
|
-
attr_reader :value
|
|
16
|
-
# The textual representation of the date as found on the document.
|
|
17
|
-
# @return [String, nil]
|
|
18
|
-
attr_reader :raw
|
|
19
|
-
|
|
20
|
-
# @param prediction [Hash]
|
|
21
|
-
# @param page_id [Integer, nil]
|
|
22
|
-
def initialize(prediction, page_id)
|
|
23
|
-
super
|
|
24
|
-
return unless @value
|
|
25
|
-
|
|
26
|
-
@date_object = Date.parse(@value)
|
|
27
|
-
@raw = prediction['raw']
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Mindee
|
|
4
|
-
# Represents locale information
|
|
5
|
-
class Locale
|
|
6
|
-
# The confidence score, value will be between 0.0 and 1.0
|
|
7
|
-
# @return [Float]
|
|
8
|
-
attr_reader :confidence
|
|
9
|
-
# Language code in ISO 639-1 format.
|
|
10
|
-
# @return [String]
|
|
11
|
-
attr_reader :language
|
|
12
|
-
# Country code in ISO 3166-1 alpha-2 format.
|
|
13
|
-
# @return [String, nil]
|
|
14
|
-
attr_reader :country
|
|
15
|
-
# Currency code in ISO 4217 format.
|
|
16
|
-
# @return [String]
|
|
17
|
-
attr_reader :currency
|
|
18
|
-
# Language code, with country code when available.
|
|
19
|
-
# @return [String]
|
|
20
|
-
attr_reader :value
|
|
21
|
-
|
|
22
|
-
# @param prediction [Hash]
|
|
23
|
-
def initialize(prediction, _page_id = nil)
|
|
24
|
-
value_key = if prediction.include? 'value'
|
|
25
|
-
'value'
|
|
26
|
-
else
|
|
27
|
-
'language'
|
|
28
|
-
end
|
|
29
|
-
@confidence = prediction['confidence']
|
|
30
|
-
@value = prediction[value_key]
|
|
31
|
-
@language = prediction['language']
|
|
32
|
-
@country = prediction['country']
|
|
33
|
-
@currency = prediction['currency']
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def to_s
|
|
37
|
-
out_str = String.new
|
|
38
|
-
out_str << "#{@value}; " if @value
|
|
39
|
-
out_str << "#{@language}; " if @language
|
|
40
|
-
out_str << "#{@country}; " if @country
|
|
41
|
-
out_str << "#{@currency}; " if @currency
|
|
42
|
-
out_str.strip
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
|
-
module Mindee
|
|
6
|
-
# Represents payment details for invoices and receipts
|
|
7
|
-
class PaymentDetails < Field
|
|
8
|
-
attr_reader :account_number,
|
|
9
|
-
:iban,
|
|
10
|
-
:routing_number,
|
|
11
|
-
:swift
|
|
12
|
-
|
|
13
|
-
# @param prediction [Hash]
|
|
14
|
-
# @param page_id [Integer, nil]
|
|
15
|
-
# @param reconstructed [Boolean]
|
|
16
|
-
def initialize(prediction, page_id, reconstructed: false)
|
|
17
|
-
super
|
|
18
|
-
@account_number = prediction['account_number']
|
|
19
|
-
@iban = prediction['iban']
|
|
20
|
-
@routing_number = prediction['routing_number']
|
|
21
|
-
@swift = prediction['swift']
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def to_s
|
|
25
|
-
out_str = String.new
|
|
26
|
-
out_str << "#{@account_number}; " if @account_number
|
|
27
|
-
out_str << "#{@iban}; " if @iban
|
|
28
|
-
out_str << "#{@routing_number}; " if @routing_number
|
|
29
|
-
out_str << "#{@swift}; " if @swift
|
|
30
|
-
out_str.strip
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|