mindee 3.0.0 → 3.1.1
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/CHANGELOG.md +17 -3
- data/docs/code_samples/carte_vitale_v1.txt +1 -1
- data/docs/code_samples/us_driver_license_v1.txt +19 -0
- data/lib/mindee/http/endpoint.rb +4 -12
- data/lib/mindee/input/sources.rb +5 -2
- data/lib/mindee/parsing/common/document.rb +1 -1
- data/lib/mindee/parsing/standard/position_field.rb +6 -3
- data/lib/mindee/product/financial_document/financial_document_v1_document.rb +15 -1
- data/lib/mindee/product/financial_document/financial_document_v1_line_item.rb +8 -8
- data/lib/mindee/product/fr/bank_account_details/bank_account_details_v2_document.rb +1 -8
- data/lib/mindee/product/passport/passport_v1.rb +1 -1
- data/lib/mindee/product/passport/passport_v1_document.rb +1 -1
- data/lib/mindee/product/passport/passport_v1_page.rb +2 -2
- data/lib/mindee/product/receipt/receipt_v5.rb +1 -1
- data/lib/mindee/product/receipt/receipt_v5_document.rb +13 -2
- data/lib/mindee/product/receipt/receipt_v5_line_item.rb +5 -5
- data/lib/mindee/product/receipt/receipt_v5_page.rb +2 -2
- data/lib/mindee/product/us/bank_check/bank_check_v1.rb +1 -1
- data/lib/mindee/product/us/bank_check/bank_check_v1_document.rb +16 -27
- data/lib/mindee/product/us/bank_check/bank_check_v1_page.rb +23 -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 +2 -1
- data/lib/mindee/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b59351d1529520bbdad3ef1757dc9f543662b6bc227338c2ffef15c515768e2e
|
4
|
+
data.tar.gz: 2cb0ee0f94b7ee2ce640b5ce7598e9e23a5e4eafaef293c748d2eaf9208da040
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7e20639bbd253793cc20b2ab2ccf0f3194badc727b62ee8f2a34022994fbaf317f7c16e69e31a512cb3457d9e11a116894d2bd828a820924df4de1ae7ec72a2
|
7
|
+
data.tar.gz: fb699dd16576182f16e2452b796a46badac444a210d4f4f4ad096e696301940d8c85cc21aad6962b111d27b16d31a483ccacf899b6f3352f1f975e7720ec0075
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,24 @@
|
|
1
1
|
# Mindee Ruby API Library Changelog
|
2
2
|
|
3
|
+
## v3.1.1 - 2023-08-10
|
4
|
+
### Fixes
|
5
|
+
* :bug: fixed non-pdf files being improperly handled by Ruby requests
|
6
|
+
|
7
|
+
|
8
|
+
## v3.1.0 - 2023-08-08
|
9
|
+
### Changes
|
10
|
+
* :sparkles: add support for US Driver License
|
11
|
+
* :recycle: update unit tests & dependencies
|
12
|
+
* :arrow_up: update Bank Checks (#46)
|
13
|
+
|
14
|
+
### Fixes
|
15
|
+
* :bug: fix `all_words` display (#47)
|
16
|
+
* :bug: fix empty `position_field` (#47)
|
17
|
+
* :bug: fix byte repacking issues for PDF files (#45)
|
18
|
+
|
19
|
+
|
3
20
|
## v3.0.0 - 2023-06-29
|
4
21
|
### ¡Breaking Changes!
|
5
|
-
|
6
22
|
* :boom: update `Client` creation & document upload
|
7
23
|
* :boom: update custom `Endpoint` creation syntax
|
8
24
|
* :art: improve product class syntax & structure
|
@@ -11,7 +27,6 @@
|
|
11
27
|
* :art: separated common, standard & custom parsing features into their own modules
|
12
28
|
|
13
29
|
### Changes
|
14
|
-
|
15
30
|
* :sparkles: add support for asynchronous endpoints
|
16
31
|
* :sparkles: add support for Invoice Splitter V1
|
17
32
|
* :sparkles: add support for OCR Full-text parsing on compatible APIs
|
@@ -26,7 +41,6 @@
|
|
26
41
|
* :recycle: rewrite tutorials to match new syntax
|
27
42
|
|
28
43
|
### Fixes
|
29
|
-
|
30
44
|
* :bug: fix: pages now use the proper `orientation` property
|
31
45
|
* :zap: optimize: only a single endpoint is now created on document upload
|
32
46
|
|
@@ -0,0 +1,19 @@
|
|
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
|
7
|
+
input_source = mindee_client.source_from_path('/path/to/the/file.ext')
|
8
|
+
|
9
|
+
# Parse the file
|
10
|
+
result = mindee_client.parse(
|
11
|
+
input_source,
|
12
|
+
Mindee::Product::US::DriverLicense::DriverLicenseV1
|
13
|
+
)
|
14
|
+
|
15
|
+
# Print a full summary of the parsed data in RST format
|
16
|
+
puts result.document
|
17
|
+
|
18
|
+
# Print the document-level parsed data
|
19
|
+
# puts result.document.inference.prediction
|
data/lib/mindee/http/endpoint.rb
CHANGED
@@ -97,13 +97,9 @@ module Mindee
|
|
97
97
|
}
|
98
98
|
req = Net::HTTP::Post.new(uri, headers)
|
99
99
|
form_data = if input_source.is_a?(Mindee::Input::Source::UrlInputSource)
|
100
|
-
|
101
|
-
'document' => input_source.url,
|
102
|
-
}
|
100
|
+
[['document', input_source.url]]
|
103
101
|
else
|
104
|
-
|
105
|
-
'document' => input_source.read_document(close: close_file),
|
106
|
-
}
|
102
|
+
[input_source.read_document(close: close_file)]
|
107
103
|
end
|
108
104
|
form_data.push ['include_mvision', 'true'] if all_words
|
109
105
|
|
@@ -132,13 +128,9 @@ module Mindee
|
|
132
128
|
}
|
133
129
|
req = Net::HTTP::Post.new(uri, headers)
|
134
130
|
form_data = if input_source.is_a?(Mindee::Input::Source::UrlInputSource)
|
135
|
-
|
136
|
-
'document' => input_source.url,
|
137
|
-
}
|
131
|
+
[['document', input_source.url]]
|
138
132
|
else
|
139
|
-
|
140
|
-
'document' => input_source.read_document(close: close_file),
|
141
|
-
}
|
133
|
+
[input_source.read_document(close: close_file)]
|
142
134
|
end
|
143
135
|
form_data.push ['include_mvision', 'true'] if all_words
|
144
136
|
|
data/lib/mindee/input/sources.rb
CHANGED
@@ -38,7 +38,7 @@ module Mindee
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def pdf?
|
41
|
-
@file_mimetype == 'application/pdf'
|
41
|
+
@file_mimetype.to_s == 'application/pdf'
|
42
42
|
end
|
43
43
|
|
44
44
|
def process_pdf(options)
|
@@ -49,9 +49,12 @@ module Mindee
|
|
49
49
|
# @param close [Boolean]
|
50
50
|
def read_document(close: true)
|
51
51
|
@io_stream.seek(0)
|
52
|
+
# Avoids needlessly re-packing some files
|
52
53
|
data = @io_stream.read
|
53
54
|
@io_stream.close if close
|
54
|
-
[data]
|
55
|
+
return ['document', data, { filename: @filename }] if pdf?
|
56
|
+
|
57
|
+
['document', [data].pack('m')]
|
55
58
|
end
|
56
59
|
end
|
57
60
|
|
@@ -22,7 +22,7 @@ module Mindee
|
|
22
22
|
ocr_prediction = http_response.fetch('ocr', nil)
|
23
23
|
return nil if ocr_prediction.nil? || ocr_prediction.fetch('mvision-v1', nil).nil?
|
24
24
|
|
25
|
-
Ocr(ocr_prediction)
|
25
|
+
Ocr::Ocr.new(ocr_prediction)
|
26
26
|
end
|
27
27
|
|
28
28
|
# @param product_class [Class<Mindee::Product>]
|
@@ -19,7 +19,9 @@ module Mindee
|
|
19
19
|
# @param prediction [Hash]
|
20
20
|
# @param page_id [Integer, nil]
|
21
21
|
def initialize(prediction, page_id)
|
22
|
-
|
22
|
+
unless prediction['polygon'].nil? || prediction['polygon'].empty?
|
23
|
+
@polygon = Geometry.polygon_from_prediction(prediction['polygon'])
|
24
|
+
end
|
23
25
|
@quadrangle = to_quadrilateral(prediction, 'quadrangle')
|
24
26
|
@rectangle = to_quadrilateral(prediction, 'rectangle')
|
25
27
|
@bounding_box = to_quadrilateral(prediction, 'bounding_box')
|
@@ -30,13 +32,14 @@ module Mindee
|
|
30
32
|
# @return [String]
|
31
33
|
def to_s
|
32
34
|
out_str = String.new
|
33
|
-
out_str << "Polygon with #{@polygon.size} points."
|
35
|
+
out_str << "Polygon with #{@polygon.size} points." if @polygon
|
36
|
+
out_str
|
34
37
|
end
|
35
38
|
|
36
39
|
private
|
37
40
|
|
38
41
|
def to_quadrilateral(prediction, key)
|
39
|
-
Geometry.quadrilateral_from_prediction(prediction[key]) unless prediction[key].empty?
|
42
|
+
Geometry.quadrilateral_from_prediction(prediction[key]) unless prediction[key].nil? || prediction[key].empty?
|
40
43
|
end
|
41
44
|
end
|
42
45
|
end
|
@@ -160,10 +160,23 @@ module Mindee
|
|
160
160
|
|
161
161
|
private
|
162
162
|
|
163
|
+
# @param char [String]
|
164
|
+
# @return [String]
|
163
165
|
def line_items_separator(char)
|
164
|
-
|
166
|
+
out_str = String.new
|
167
|
+
out_str << ' '
|
168
|
+
out_str << "+#{char * 38}"
|
169
|
+
out_str << "+#{char * 14}"
|
170
|
+
out_str << "+#{char * 10}"
|
171
|
+
out_str << "+#{char * 12}"
|
172
|
+
out_str << "+#{char * 14}"
|
173
|
+
out_str << "+#{char * 14}"
|
174
|
+
out_str << "+#{char * 12}"
|
175
|
+
out_str << '+'
|
176
|
+
out_str
|
165
177
|
end
|
166
178
|
|
179
|
+
# @return [String]
|
167
180
|
def line_items_to_s
|
168
181
|
return '' if @line_items.empty?
|
169
182
|
|
@@ -181,6 +194,7 @@ module Mindee
|
|
181
194
|
out_str << "\n#{line_items_separator('=')}"
|
182
195
|
out_str << "\n #{line_items}"
|
183
196
|
out_str << "\n#{line_items_separator('-')}"
|
197
|
+
out_str
|
184
198
|
end
|
185
199
|
end
|
186
200
|
end
|
@@ -75,14 +75,14 @@ module Mindee
|
|
75
75
|
def to_s
|
76
76
|
printable = printable_values
|
77
77
|
out_str = String.new
|
78
|
-
out_str << printable[:description]
|
79
|
-
out_str << printable[:product_code]
|
80
|
-
out_str << printable[:quantity]
|
81
|
-
out_str << printable[:tax_amount]
|
82
|
-
out_str << printable[:tax_rate]
|
83
|
-
out_str << printable[:total_amount]
|
84
|
-
out_str << printable[:unit_price]
|
85
|
-
out_str
|
78
|
+
out_str << "\n :Description: #{printable[:description]}"
|
79
|
+
out_str << "\n :Product code: #{printable[:product_code]}"
|
80
|
+
out_str << "\n :Quantity: #{printable[:quantity]}"
|
81
|
+
out_str << "\n :Tax Amount: #{printable[:tax_amount]}"
|
82
|
+
out_str << "\n :Tax Rate (%): #{printable[:tax_rate]}"
|
83
|
+
out_str << "\n :Total Amount: #{printable[:total_amount]}"
|
84
|
+
out_str << "\n :Unit Price: #{printable[:unit_price]}"
|
85
|
+
out_str
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
@@ -35,7 +35,7 @@ module Mindee
|
|
35
35
|
|
36
36
|
# @return [String]
|
37
37
|
def to_s
|
38
|
-
bban =
|
38
|
+
bban = @bban.to_s
|
39
39
|
out_str = String.new
|
40
40
|
out_str << "\n:Account Holder's Names: #{@account_holders_names}".rstrip
|
41
41
|
out_str << "\n:Basic Bank Account Number:"
|
@@ -44,13 +44,6 @@ module Mindee
|
|
44
44
|
out_str << "\n:SWIFT Code: #{@swift_code}".rstrip
|
45
45
|
out_str[1..].to_s
|
46
46
|
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
# @return [String]
|
51
|
-
def bban_to_s
|
52
|
-
@bban.to_s
|
53
|
-
end
|
54
47
|
end
|
55
48
|
end
|
56
49
|
end
|
@@ -7,7 +7,7 @@ require_relative 'passport_v1_page'
|
|
7
7
|
module Mindee
|
8
8
|
module Product
|
9
9
|
module Passport
|
10
|
-
#
|
10
|
+
# Passport V1 prediction inference.
|
11
11
|
class PassportV1 < Mindee::Parsing::Common::Inference
|
12
12
|
@endpoint_name = 'passport'
|
13
13
|
@endpoint_version = '1'
|
@@ -5,7 +5,7 @@ require_relative '../../parsing'
|
|
5
5
|
module Mindee
|
6
6
|
module Product
|
7
7
|
module Passport
|
8
|
-
#
|
8
|
+
# Passport V1 document prediction.
|
9
9
|
class PassportV1Document < Mindee::Parsing::Common::Prediction
|
10
10
|
include Mindee::Parsing::Standard
|
11
11
|
# The date of birth of the passport holder.
|
@@ -6,7 +6,7 @@ require_relative 'passport_v1_document'
|
|
6
6
|
module Mindee
|
7
7
|
module Product
|
8
8
|
module Passport
|
9
|
-
#
|
9
|
+
# Passport V1 page.
|
10
10
|
class PassportV1Page < Mindee::Parsing::Common::Page
|
11
11
|
# @param prediction [Hash]
|
12
12
|
def initialize(prediction)
|
@@ -18,7 +18,7 @@ module Mindee
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
#
|
21
|
+
# Passport V1 page prediction.
|
22
22
|
class PassportV1PagePrediction < PassportV1Document
|
23
23
|
# @return [String]
|
24
24
|
def to_s
|
@@ -7,7 +7,7 @@ require_relative 'receipt_v5_page'
|
|
7
7
|
module Mindee
|
8
8
|
module Product
|
9
9
|
module Receipt
|
10
|
-
#
|
10
|
+
# Receipt V5 prediction inference.
|
11
11
|
class ReceiptV5 < Mindee::Parsing::Common::Inference
|
12
12
|
@endpoint_name = 'expense_receipts'
|
13
13
|
@endpoint_version = '5'
|
@@ -6,7 +6,7 @@ require_relative 'receipt_v5_line_item'
|
|
6
6
|
module Mindee
|
7
7
|
module Product
|
8
8
|
module Receipt
|
9
|
-
#
|
9
|
+
# Receipt V5 document prediction.
|
10
10
|
class ReceiptV5Document < Mindee::Parsing::Common::Prediction
|
11
11
|
include Mindee::Parsing::Standard
|
12
12
|
# The purchase category among predefined classes.
|
@@ -113,10 +113,20 @@ module Mindee
|
|
113
113
|
|
114
114
|
private
|
115
115
|
|
116
|
+
# @param char [String]
|
117
|
+
# @return [String]
|
116
118
|
def line_items_separator(char)
|
117
|
-
|
119
|
+
out_str = String.new
|
120
|
+
out_str << ' '
|
121
|
+
out_str << "+#{char * 38}"
|
122
|
+
out_str << "+#{char * 10}"
|
123
|
+
out_str << "+#{char * 14}"
|
124
|
+
out_str << "+#{char * 12}"
|
125
|
+
out_str << '+'
|
126
|
+
out_str
|
118
127
|
end
|
119
128
|
|
129
|
+
# @return [String]
|
120
130
|
def line_items_to_s
|
121
131
|
return '' if @line_items.empty?
|
122
132
|
|
@@ -131,6 +141,7 @@ module Mindee
|
|
131
141
|
out_str << "\n#{line_items_separator('=')}"
|
132
142
|
out_str << "\n #{line_items}"
|
133
143
|
out_str << "\n#{line_items_separator('-')}"
|
144
|
+
out_str
|
134
145
|
end
|
135
146
|
end
|
136
147
|
end
|
@@ -57,11 +57,11 @@ module Mindee
|
|
57
57
|
def to_s
|
58
58
|
printable = printable_values
|
59
59
|
out_str = String.new
|
60
|
-
out_str << printable[:description]
|
61
|
-
out_str << printable[:quantity]
|
62
|
-
out_str << printable[:total_amount]
|
63
|
-
out_str << printable[:unit_price]
|
64
|
-
out_str
|
60
|
+
out_str << "\n :Description: #{printable[:description]}"
|
61
|
+
out_str << "\n :Quantity: #{printable[:quantity]}"
|
62
|
+
out_str << "\n :Total Amount: #{printable[:total_amount]}"
|
63
|
+
out_str << "\n :Unit Price: #{printable[:unit_price]}"
|
64
|
+
out_str
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
@@ -6,7 +6,7 @@ require_relative 'receipt_v5_document'
|
|
6
6
|
module Mindee
|
7
7
|
module Product
|
8
8
|
module Receipt
|
9
|
-
#
|
9
|
+
# Receipt V5 page.
|
10
10
|
class ReceiptV5Page < Mindee::Parsing::Common::Page
|
11
11
|
# @param prediction [Hash]
|
12
12
|
def initialize(prediction)
|
@@ -18,7 +18,7 @@ module Mindee
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
#
|
21
|
+
# Receipt V5 page prediction.
|
22
22
|
class ReceiptV5PagePrediction < ReceiptV5Document
|
23
23
|
# @return [String]
|
24
24
|
def to_s
|
@@ -9,30 +9,24 @@ module Mindee
|
|
9
9
|
# Bank Check V1 document prediction.
|
10
10
|
class BankCheckV1Document < Mindee::Parsing::Common::Prediction
|
11
11
|
include Mindee::Parsing::Standard
|
12
|
-
#
|
13
|
-
# @return [
|
12
|
+
# The check payer's account number.
|
13
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
14
14
|
attr_reader :account_number
|
15
|
-
#
|
16
|
-
# @return [
|
15
|
+
# The amount of the check.
|
16
|
+
# @return [Mindee::Parsing::Standard::AmountField]
|
17
17
|
attr_reader :amount
|
18
|
-
# The check number.
|
18
|
+
# The issuer's check number.
|
19
19
|
# @return [Mindee::Parsing::Standard::TextField]
|
20
20
|
attr_reader :check_number
|
21
|
-
#
|
22
|
-
# @return [Mindee::Parsing::Standard::TextField]
|
23
|
-
attr_reader :routing_number
|
24
|
-
# Date the check was issued.
|
21
|
+
# The date the check was issued.
|
25
22
|
# @return [Mindee::Parsing::Standard::DateField]
|
26
23
|
attr_reader :date
|
27
|
-
#
|
28
|
-
# @return [Array<Parsing::Standard::PositionField>]
|
29
|
-
attr_reader :signatures_positions
|
30
|
-
# Check's position in the image.
|
31
|
-
# @return [Parsing::Standard::PositionField]
|
32
|
-
attr_reader :check_position
|
33
|
-
# List of payees (full name or company name).
|
24
|
+
# List of the check's payees (recipients).
|
34
25
|
# @return [Array<Mindee::Parsing::Standard::TextField>]
|
35
26
|
attr_reader :payees
|
27
|
+
# The check issuer's routing number.
|
28
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
29
|
+
attr_reader :routing_number
|
36
30
|
|
37
31
|
# @param prediction [Hash]
|
38
32
|
# @param page_id [Integer, nil]
|
@@ -42,28 +36,23 @@ module Mindee
|
|
42
36
|
@amount = AmountField.new(prediction['amount'], page_id)
|
43
37
|
@check_number = TextField.new(prediction['check_number'], page_id)
|
44
38
|
@date = DateField.new(prediction['date'], page_id)
|
45
|
-
@check_position = PositionField.new(prediction['check_position'], page_id)
|
46
|
-
@routing_number = TextField.new(prediction['routing_number'], page_id)
|
47
|
-
@signatures_positions = []
|
48
|
-
prediction['signatures_positions'].each do |item|
|
49
|
-
@signatures_positions.push(PositionField.new(item, page_id))
|
50
|
-
end
|
51
39
|
@payees = []
|
52
40
|
prediction['payees'].each do |item|
|
53
41
|
@payees.push(TextField.new(item, page_id))
|
54
42
|
end
|
43
|
+
@routing_number = TextField.new(prediction['routing_number'], page_id)
|
55
44
|
end
|
56
45
|
|
57
46
|
# @return [String]
|
58
47
|
def to_s
|
59
|
-
payees = @payees.
|
48
|
+
payees = @payees.join("\n #{' ' * 8}")
|
60
49
|
out_str = String.new
|
61
|
-
out_str << "\n:
|
62
|
-
out_str << "\n:Account number: #{@account_number}".rstrip
|
63
|
-
out_str << "\n:Check number: #{@check_number}".rstrip
|
64
|
-
out_str << "\n:Date: #{@date}".rstrip
|
50
|
+
out_str << "\n:Check Issue Date: #{@date}".rstrip
|
65
51
|
out_str << "\n:Amount: #{@amount}".rstrip
|
66
52
|
out_str << "\n:Payees: #{payees}".rstrip
|
53
|
+
out_str << "\n:Routing Number: #{@routing_number}".rstrip
|
54
|
+
out_str << "\n:Account Number: #{@account_number}".rstrip
|
55
|
+
out_str << "\n:Check Number: #{@check_number}".rstrip
|
67
56
|
out_str[1..].to_s
|
68
57
|
end
|
69
58
|
end
|
@@ -21,9 +21,32 @@ module Mindee
|
|
21
21
|
|
22
22
|
# Bank Check V1 page prediction.
|
23
23
|
class BankCheckV1PagePrediction < BankCheckV1Document
|
24
|
+
include Mindee::Parsing::Standard
|
25
|
+
|
26
|
+
# The position of the check on the document.
|
27
|
+
# @return [Mindee::Parsing::Standard::PositionField]
|
28
|
+
attr_reader :check_position
|
29
|
+
# List of signature positions
|
30
|
+
# @return [Array<Mindee::Parsing::Standard::PositionField>]
|
31
|
+
attr_reader :signatures_positions
|
32
|
+
|
33
|
+
# @param prediction [Hash]
|
34
|
+
# @param page_id [Integer, nil]
|
35
|
+
def initialize(prediction, page_id)
|
36
|
+
@check_position = PositionField.new(prediction['check_position'], page_id)
|
37
|
+
@signatures_positions = []
|
38
|
+
prediction['signatures_positions'].each do |item|
|
39
|
+
@signatures_positions.push(PositionField.new(item, page_id))
|
40
|
+
end
|
41
|
+
super(prediction, page_id)
|
42
|
+
end
|
43
|
+
|
24
44
|
# @return [String]
|
25
45
|
def to_s
|
46
|
+
signatures_positions = @signatures_positions.join("\n #{' ' * 21}")
|
26
47
|
out_str = String.new
|
48
|
+
out_str << "\n:Check Position: #{@check_position}".rstrip
|
49
|
+
out_str << "\n:Signature Positions: #{signatures_positions}".rstrip
|
27
50
|
out_str << "\n#{super}"
|
28
51
|
out_str
|
29
52
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../parsing'
|
4
|
+
require_relative 'driver_license_v1_document'
|
5
|
+
require_relative 'driver_license_v1_page'
|
6
|
+
|
7
|
+
module Mindee
|
8
|
+
module Product
|
9
|
+
module US
|
10
|
+
module DriverLicense
|
11
|
+
# Driver License V1 prediction inference.
|
12
|
+
class DriverLicenseV1 < Mindee::Parsing::Common::Inference
|
13
|
+
@endpoint_name = 'us_driver_license'
|
14
|
+
@endpoint_version = '1'
|
15
|
+
|
16
|
+
# @param prediction [Hash]
|
17
|
+
def initialize(prediction)
|
18
|
+
super
|
19
|
+
@prediction = DriverLicenseV1Document.new(prediction['prediction'], nil)
|
20
|
+
@pages = []
|
21
|
+
prediction['pages'].each do |page|
|
22
|
+
@pages.push(DriverLicenseV1Page.new(page))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class << self
|
27
|
+
# Name of the endpoint for this product.
|
28
|
+
# @return [String]
|
29
|
+
attr_reader :endpoint_name
|
30
|
+
# Version for this product.
|
31
|
+
# @return [String]
|
32
|
+
attr_reader :endpoint_version
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../parsing'
|
4
|
+
|
5
|
+
module Mindee
|
6
|
+
module Product
|
7
|
+
module US
|
8
|
+
module DriverLicense
|
9
|
+
# Driver License V1 document prediction.
|
10
|
+
class DriverLicenseV1Document < Mindee::Parsing::Common::Prediction
|
11
|
+
include Mindee::Parsing::Standard
|
12
|
+
# US driver license holders address
|
13
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
14
|
+
attr_reader :address
|
15
|
+
# US driver license holders date of birth
|
16
|
+
# @return [Mindee::Parsing::Standard::DateField]
|
17
|
+
attr_reader :date_of_birth
|
18
|
+
# Document Discriminator Number of the US Driver License
|
19
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
20
|
+
attr_reader :dd_number
|
21
|
+
# US driver license holders class
|
22
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
23
|
+
attr_reader :dl_class
|
24
|
+
# ID number of the US Driver License.
|
25
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
26
|
+
attr_reader :driver_license_id
|
27
|
+
# US driver license holders endorsements
|
28
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
29
|
+
attr_reader :endorsements
|
30
|
+
# Date on which the documents expires.
|
31
|
+
# @return [Mindee::Parsing::Standard::DateField]
|
32
|
+
attr_reader :expiry_date
|
33
|
+
# US driver license holders eye colour
|
34
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
35
|
+
attr_reader :eye_color
|
36
|
+
# US driver license holders first name(s)
|
37
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
38
|
+
attr_reader :first_name
|
39
|
+
# US driver license holders hair colour
|
40
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
41
|
+
attr_reader :hair_color
|
42
|
+
# US driver license holders hight
|
43
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
44
|
+
attr_reader :height
|
45
|
+
# Date on which the documents was issued.
|
46
|
+
# @return [Mindee::Parsing::Standard::DateField]
|
47
|
+
attr_reader :issued_date
|
48
|
+
# US driver license holders last name
|
49
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
50
|
+
attr_reader :last_name
|
51
|
+
# US driver license holders restrictions
|
52
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
53
|
+
attr_reader :restrictions
|
54
|
+
# US driver license holders gender
|
55
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
56
|
+
attr_reader :sex
|
57
|
+
# US State
|
58
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
59
|
+
attr_reader :state
|
60
|
+
# US driver license holders weight
|
61
|
+
# @return [Mindee::Parsing::Standard::TextField]
|
62
|
+
attr_reader :weight
|
63
|
+
|
64
|
+
# @param prediction [Hash]
|
65
|
+
# @param page_id [Integer, nil]
|
66
|
+
def initialize(prediction, page_id)
|
67
|
+
super()
|
68
|
+
@address = TextField.new(prediction['address'], page_id)
|
69
|
+
@date_of_birth = DateField.new(prediction['date_of_birth'], page_id)
|
70
|
+
@dd_number = TextField.new(prediction['dd_number'], page_id)
|
71
|
+
@dl_class = TextField.new(prediction['dl_class'], page_id)
|
72
|
+
@driver_license_id = TextField.new(prediction['driver_license_id'], page_id)
|
73
|
+
@endorsements = TextField.new(prediction['endorsements'], page_id)
|
74
|
+
@expiry_date = DateField.new(prediction['expiry_date'], page_id)
|
75
|
+
@eye_color = TextField.new(prediction['eye_color'], page_id)
|
76
|
+
@first_name = TextField.new(prediction['first_name'], page_id)
|
77
|
+
@hair_color = TextField.new(prediction['hair_color'], page_id)
|
78
|
+
@height = TextField.new(prediction['height'], page_id)
|
79
|
+
@issued_date = DateField.new(prediction['issued_date'], page_id)
|
80
|
+
@last_name = TextField.new(prediction['last_name'], page_id)
|
81
|
+
@restrictions = TextField.new(prediction['restrictions'], page_id)
|
82
|
+
@sex = TextField.new(prediction['sex'], page_id)
|
83
|
+
@state = TextField.new(prediction['state'], page_id)
|
84
|
+
@weight = TextField.new(prediction['weight'], page_id)
|
85
|
+
end
|
86
|
+
|
87
|
+
# @return [String]
|
88
|
+
def to_s
|
89
|
+
out_str = String.new
|
90
|
+
out_str << "\n:State: #{@state}".rstrip
|
91
|
+
out_str << "\n:Driver License ID: #{@driver_license_id}".rstrip
|
92
|
+
out_str << "\n:Expiry Date: #{@expiry_date}".rstrip
|
93
|
+
out_str << "\n:Date Of Issue: #{@issued_date}".rstrip
|
94
|
+
out_str << "\n:Last Name: #{@last_name}".rstrip
|
95
|
+
out_str << "\n:First Name: #{@first_name}".rstrip
|
96
|
+
out_str << "\n:Address: #{@address}".rstrip
|
97
|
+
out_str << "\n:Date Of Birth: #{@date_of_birth}".rstrip
|
98
|
+
out_str << "\n:Restrictions: #{@restrictions}".rstrip
|
99
|
+
out_str << "\n:Endorsements: #{@endorsements}".rstrip
|
100
|
+
out_str << "\n:Driver License Class: #{@dl_class}".rstrip
|
101
|
+
out_str << "\n:Sex: #{@sex}".rstrip
|
102
|
+
out_str << "\n:Height: #{@height}".rstrip
|
103
|
+
out_str << "\n:Weight: #{@weight}".rstrip
|
104
|
+
out_str << "\n:Hair Color: #{@hair_color}".rstrip
|
105
|
+
out_str << "\n:Eye Color: #{@eye_color}".rstrip
|
106
|
+
out_str << "\n:Document Discriminator: #{@dd_number}".rstrip
|
107
|
+
out_str[1..].to_s
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../parsing'
|
4
|
+
require_relative 'driver_license_v1_document'
|
5
|
+
|
6
|
+
module Mindee
|
7
|
+
module Product
|
8
|
+
module US
|
9
|
+
module DriverLicense
|
10
|
+
# Driver License V1 page.
|
11
|
+
class DriverLicenseV1Page < Mindee::Parsing::Common::Page
|
12
|
+
# @param prediction [Hash]
|
13
|
+
def initialize(prediction)
|
14
|
+
super(prediction)
|
15
|
+
@prediction = DriverLicenseV1PagePrediction.new(
|
16
|
+
prediction['prediction'],
|
17
|
+
prediction['id']
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Driver License V1 page prediction.
|
23
|
+
class DriverLicenseV1PagePrediction < DriverLicenseV1Document
|
24
|
+
include Mindee::Parsing::Standard
|
25
|
+
|
26
|
+
# Has a photo of the US driver license holder
|
27
|
+
# @return [Mindee::Parsing::Standard::PositionField]
|
28
|
+
attr_reader :photo
|
29
|
+
# Has a signature of the US driver license holder
|
30
|
+
# @return [Mindee::Parsing::Standard::PositionField]
|
31
|
+
attr_reader :signature
|
32
|
+
|
33
|
+
# @param prediction [Hash]
|
34
|
+
# @param page_id [Integer, nil]
|
35
|
+
def initialize(prediction, page_id)
|
36
|
+
@photo = PositionField.new(prediction['photo'], page_id)
|
37
|
+
@signature = PositionField.new(prediction['signature'], page_id)
|
38
|
+
super(prediction, page_id)
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [String]
|
42
|
+
def to_s
|
43
|
+
out_str = String.new
|
44
|
+
out_str << "\n:Photo: #{@photo}".rstrip
|
45
|
+
out_str << "\n:Signature: #{@signature}".rstrip
|
46
|
+
out_str << "\n#{super}"
|
47
|
+
out_str
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/mindee/product.rb
CHANGED
@@ -8,9 +8,10 @@ require_relative 'product/passport/passport_v1'
|
|
8
8
|
require_relative 'product/receipt/receipt_v4'
|
9
9
|
require_relative 'product/receipt/receipt_v5'
|
10
10
|
require_relative 'product/eu/license_plate/license_plate_v1'
|
11
|
-
require_relative 'product/us/bank_check/bank_check_v1'
|
12
11
|
require_relative 'product/fr/bank_account_details/bank_account_details_v1'
|
13
12
|
require_relative 'product/fr/bank_account_details/bank_account_details_v2'
|
14
13
|
require_relative 'product/fr/carte_vitale/carte_vitale_v1'
|
15
14
|
require_relative 'product/fr/id_card/id_card_v1'
|
16
15
|
require_relative 'product/invoice_splitter/invoice_splitter_v1'
|
16
|
+
require_relative 'product/us/bank_check/bank_check_v1'
|
17
|
+
require_relative 'product/us/driver_license/driver_license_v1'
|
data/lib/mindee/version.rb
CHANGED
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: 3.
|
4
|
+
version: 3.1.1
|
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-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: marcel
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- docs/code_samples/license_plates_v1.txt
|
133
133
|
- docs/code_samples/passport_v1.txt
|
134
134
|
- docs/code_samples/proof_of_address_v1.txt
|
135
|
+
- docs/code_samples/us_driver_license_v1.txt
|
135
136
|
- docs/ruby-api-builder.md
|
136
137
|
- docs/ruby-getting-started.md
|
137
138
|
- docs/ruby-invoice-ocr.md
|
@@ -227,6 +228,9 @@ files:
|
|
227
228
|
- lib/mindee/product/us/bank_check/bank_check_v1.rb
|
228
229
|
- lib/mindee/product/us/bank_check/bank_check_v1_document.rb
|
229
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
|
230
234
|
- lib/mindee/version.rb
|
231
235
|
- mindee.gemspec
|
232
236
|
homepage: https://github.com/mindee/mindee-api-ruby
|