mindee 3.1.1 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/README.md +57 -7
  4. data/bin/mindee.rb +160 -83
  5. data/docs/bank_account_details_v2.md +137 -0
  6. data/docs/bank_check_v1.md +179 -0
  7. data/docs/barcode_reader_v1.md +104 -0
  8. data/docs/carte_vitale_v1.md +123 -0
  9. data/docs/code_samples/barcode_reader_v1.txt +19 -0
  10. data/docs/code_samples/cropper_v1.txt +16 -0
  11. data/docs/code_samples/idcard_fr_v2.txt +19 -0
  12. data/docs/code_samples/invoice_splitter_v1_async.txt +6 -54
  13. data/docs/code_samples/multi_receipts_detector_v1.txt +19 -0
  14. data/docs/code_samples/us_w9_v1.txt +16 -0
  15. data/docs/cropper_v1.md +97 -0
  16. data/docs/custom_v1.md +101 -0
  17. data/docs/expense_receipts_v5.md +306 -0
  18. data/docs/financial_document_v1.md +384 -0
  19. data/docs/{ruby-getting-started.md → getting_started.md} +22 -6
  20. data/docs/idcard_fr_v2.md +253 -0
  21. data/docs/invoice_splitter_v1.md +85 -0
  22. data/docs/invoices_v4.md +369 -0
  23. data/docs/license_plates_v1.md +91 -0
  24. data/docs/multi_receipts_detector_v1.md +105 -0
  25. data/docs/passport_v1.md +186 -0
  26. data/docs/proof_of_address_v1.md +207 -0
  27. data/docs/us_driver_license_v1.md +268 -0
  28. data/docs/us_w9_v1.md +207 -0
  29. data/lib/mindee/client.rb +95 -16
  30. data/lib/mindee/geometry/quadrilateral.rb +5 -0
  31. data/lib/mindee/http/.rubocop.yml +8 -0
  32. data/lib/mindee/http/endpoint.rb +14 -6
  33. data/lib/mindee/http/error.rb +104 -0
  34. data/lib/mindee/http.rb +1 -0
  35. data/lib/mindee/input/sources.rb +83 -14
  36. data/lib/mindee/parsing/common/api_response.rb +11 -1
  37. data/lib/mindee/parsing/common/inference.rb +2 -2
  38. data/lib/mindee/parsing/common/ocr/ocr.rb +1 -0
  39. data/lib/mindee/parsing/common.rb +0 -1
  40. data/lib/mindee/parsing/standard/company_registration_field.rb +1 -1
  41. data/lib/mindee/parsing/standard/locale_field.rb +1 -1
  42. data/lib/mindee/parsing/standard/payment_details_field.rb +1 -1
  43. data/lib/mindee/parsing/standard/position_field.rb +10 -3
  44. data/lib/mindee/parsing/standard/{text_field.rb → string_field.rb} +1 -1
  45. data/lib/mindee/parsing/standard.rb +1 -1
  46. data/lib/mindee/pdf/pdf_processing.rb +2 -1
  47. data/lib/mindee/product/barcode_reader/barcode_reader_v1.rb +37 -0
  48. data/lib/mindee/product/barcode_reader/barcode_reader_v1_document.rb +44 -0
  49. data/lib/mindee/product/barcode_reader/barcode_reader_v1_page.rb +32 -0
  50. data/lib/mindee/product/cropper/cropper_v1.rb +37 -0
  51. data/lib/mindee/product/cropper/cropper_v1_document.rb +13 -0
  52. data/lib/mindee/product/cropper/cropper_v1_page.rb +49 -0
  53. data/lib/mindee/product/custom/custom_v1.rb +1 -0
  54. data/lib/mindee/product/eu/license_plate/license_plate_v1.rb +1 -0
  55. data/lib/mindee/product/eu/license_plate/license_plate_v1_document.rb +2 -2
  56. data/lib/mindee/product/financial_document/financial_document_v1.rb +1 -0
  57. data/lib/mindee/product/financial_document/financial_document_v1_document.rb +24 -24
  58. data/lib/mindee/product/fr/bank_account_details/bank_account_details_v1.rb +1 -0
  59. data/lib/mindee/product/fr/bank_account_details/bank_account_details_v1_document.rb +6 -6
  60. data/lib/mindee/product/fr/bank_account_details/bank_account_details_v2.rb +1 -0
  61. data/lib/mindee/product/fr/bank_account_details/bank_account_details_v2_document.rb +6 -6
  62. data/lib/mindee/product/fr/carte_vitale/carte_vitale_v1.rb +1 -0
  63. data/lib/mindee/product/fr/carte_vitale/carte_vitale_v1_document.rb +6 -6
  64. data/lib/mindee/product/fr/id_card/id_card_v1.rb +1 -0
  65. data/lib/mindee/product/fr/id_card/id_card_v1_document.rb +16 -16
  66. data/lib/mindee/product/fr/id_card/id_card_v2.rb +39 -0
  67. data/lib/mindee/product/fr/id_card/id_card_v2_document.rb +107 -0
  68. data/lib/mindee/product/fr/id_card/id_card_v2_page.rb +53 -0
  69. data/lib/mindee/product/invoice/invoice_v4.rb +1 -0
  70. data/lib/mindee/product/invoice/invoice_v4_document.rb +24 -24
  71. data/lib/mindee/product/invoice_splitter/invoice_splitter_v1.rb +1 -0
  72. data/lib/mindee/product/invoice_splitter/invoice_splitter_v1_document.rb +5 -3
  73. data/lib/mindee/product/multi_receipts_detector/multi_receipts_detector_v1.rb +37 -0
  74. data/lib/mindee/product/multi_receipts_detector/multi_receipts_detector_v1_document.rb +35 -0
  75. data/lib/mindee/product/multi_receipts_detector/multi_receipts_detector_v1_page.rb +32 -0
  76. data/lib/mindee/product/passport/passport_v1.rb +1 -0
  77. data/lib/mindee/product/passport/passport_v1_document.rb +16 -16
  78. data/lib/mindee/product/proof_of_address/proof_of_address_v1.rb +1 -0
  79. data/lib/mindee/product/proof_of_address/proof_of_address_v1_document.rb +14 -14
  80. data/lib/mindee/product/receipt/receipt_v4_document.rb +6 -6
  81. data/lib/mindee/product/receipt/receipt_v5.rb +1 -0
  82. data/lib/mindee/product/receipt/receipt_v5_document.rb +12 -12
  83. data/lib/mindee/product/us/bank_check/bank_check_v1.rb +1 -0
  84. data/lib/mindee/product/us/bank_check/bank_check_v1_document.rb +8 -8
  85. data/lib/mindee/product/us/driver_license/driver_license_v1.rb +1 -0
  86. data/lib/mindee/product/us/driver_license/driver_license_v1_document.rb +28 -28
  87. data/lib/mindee/product/us/w9/w9_v1.rb +39 -0
  88. data/lib/mindee/product/us/w9/w9_v1_document.rb +15 -0
  89. data/lib/mindee/product/us/w9/w9_v1_page.rb +102 -0
  90. data/lib/mindee/product.rb +5 -0
  91. data/lib/mindee/version.rb +5 -1
  92. data/lib/mindee.rb +47 -0
  93. metadata +43 -9
  94. data/docs/ruby-api-builder.md +0 -123
  95. data/docs/ruby-invoice-ocr.md +0 -271
  96. data/docs/ruby-passport-ocr.md +0 -165
  97. data/docs/ruby-receipt-ocr.md +0 -196
  98. data/lib/mindee/parsing/common/error.rb +0 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b59351d1529520bbdad3ef1757dc9f543662b6bc227338c2ffef15c515768e2e
4
- data.tar.gz: 2cb0ee0f94b7ee2ce640b5ce7598e9e23a5e4eafaef293c748d2eaf9208da040
3
+ metadata.gz: 3ab7abbf2686b67f4330ceb018dc5de8b799d567d586072199f22dfcb12b647d
4
+ data.tar.gz: 15d885b0fa5e42cf84a1ca6f4238f0c1681bb4c3587fbdf8cd9b48f69850a1f4
5
5
  SHA512:
6
- metadata.gz: f7e20639bbd253793cc20b2ab2ccf0f3194badc727b62ee8f2a34022994fbaf317f7c16e69e31a512cb3457d9e11a116894d2bd828a820924df4de1ae7ec72a2
7
- data.tar.gz: fb699dd16576182f16e2452b796a46badac444a210d4f4f4ad096e696301940d8c85cc21aad6962b111d27b16d31a483ccacf899b6f3352f1f975e7720ec0075
6
+ metadata.gz: 0036d0f5b668d81a1fb602689fc33d98e6ff02a03175b219f7c541689d27a4fb76123982610d979b89f97f074d3fc202effa5f3d00ac9da905d99afe20ef0beb
7
+ data.tar.gz: dc4d2bd7147c6c0d4d589642d0d6b6a343fdfc5fc305e5d03fe1628dd013b70679b5185fd531015957a998ae9c930d570f537e352d7899ff783945179c480470
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Mindee Ruby API Library Changelog
2
2
 
3
+ ## v3.2.0 - 2023-09-15
4
+ ### Changes
5
+ * :sparkles: add support for Multi Receipts Detector V1
6
+ * :sparkles: add support for Barcode Reader V1
7
+ * :sparkles: add support for W9 V1
8
+ * :sparkles: add support for FR ID Card V2
9
+ * :sparkles: add support for async in CLI
10
+ * :sparkles: add support for async auto-polling
11
+ * :sparkles: add direct access to `raw_http` response
12
+ * :memo: upgrade reference & guide documentation
13
+ * :test_tube: **EXPERIMENTAL** add PDF repair option
14
+
15
+ ### Fixes
16
+ * :bug: fix display issues with `PositionField`
17
+
18
+
3
19
  ## v3.1.1 - 2023-08-10
4
20
  ### Fixes
5
21
  * :bug: fixed non-pdf files being improperly handled by Ruby requests
data/README.md CHANGED
@@ -18,8 +18,9 @@ gem 'mindee'
18
18
  ```
19
19
 
20
20
  And then execute:
21
-
22
- $ bundle install
21
+ ```sh
22
+ bundle install
23
+ ```
23
24
 
24
25
  Finally, Ruby away!
25
26
 
@@ -43,6 +44,28 @@ result = mindee_client.parse(
43
44
  puts result.document
44
45
  ```
45
46
 
47
+ **Note:** Files can also be loaded from:
48
+
49
+ A URL (`https`):
50
+ ```rb
51
+ input_source = mindee_client.source_from_url("https://my-url")
52
+ ```
53
+
54
+ A bytes input stream:
55
+ ```rb
56
+ input_source = mindee_client.source_from_bytes('/path/to/the/file.ext', "name-of-my-file.ext")
57
+ ```
58
+
59
+ A base64 encoded string:
60
+ ```rb
61
+ input_source = mindee_client.source_from_b64string('/path/to/the/file.ext', "name-of-my-file.ext")
62
+ ```
63
+
64
+ A ruby `file` object:
65
+ ```rb
66
+ input_source = mindee_client.source_from_file(input_file, "name-of-my-file.ext")
67
+ ```
68
+
46
69
  #### Region-Specific Documents
47
70
  ```ruby
48
71
  require 'mindee'
@@ -93,15 +116,42 @@ result.document.inference.prediction.fields.each do |field_name, field_data|
93
116
  end
94
117
  ```
95
118
 
119
+ ## CLI Tool
120
+
121
+ A command-line interface tool is available to quickly test documents:
122
+ ```sh
123
+ ruby ./bin/mindee.rb invoice path/to/your/file.ext
124
+ ```
125
+
126
+
127
+ Using the ruby bundler:
128
+ ```sh
129
+ bundle exec ruby ./bin/mindee.rb invoice path/to/your/file.ext
130
+ ```
131
+
96
132
  ## Further Reading
97
133
  There's more to it than that for those that need more features, or want to
98
134
  customize the experience.
99
135
 
100
- * [Ruby Overview](https://developers.mindee.com/docs/ruby-getting-started)
101
- * [Ruby Custom APIs OCR](https://developers.mindee.com/docs/ruby-api-builder)
102
- * [Ruby invoices OCR](https://developers.mindee.com/docs/ruby-invoice-ocr)
103
- * [Ruby receipts OCR](https://developers.mindee.com/docs/ruby-receipt-ocr)
104
- * [Ruby passports OCR](https://developers.mindee.com/docs/ruby-passport-ocr)
136
+ * [Ruby Overview](https://developers.mindee.com/docs/getting-started-ocr-ruby)
137
+ * [Custom OCR Ruby](https://developers.mindee.com/docs/api-builder-ocr-ruby)
138
+ * [Invoice OCR Ruby](https://developers.mindee.com/docs/invoice-ocr-ruby)
139
+ * [Financial Document OCR Ruby](https://developers.mindee.com/docs/financial-document-ocr-ruby)
140
+ * [Passport OCR Ruby](https://developers.mindee.com/docs/passport-ocr-ruby)
141
+ * [Proof of Address OCR Ruby](https://developers.mindee.com/docs/proof-of-address-ocr-ruby)
142
+ * [Receipt OCR Ruby](https://developers.mindee.com/docs/receipt-ocr-ruby)
143
+ * [EU License Plate OCR Ruby](https://developers.mindee.com/docs/eu-license-plate-ocr-ruby)
144
+ * [FR Bank Account Details OCR Ruby](https://developers.mindee.com/docs/fr-bank-account-details-ocr-ruby)
145
+ * [FR Carte Vitale OCR Ruby](https://developers.mindee.com/docs/fr-carte-vitale-ocr-ruby)
146
+ * [FR ID Card OCR Ruby](https://developers.mindee.com/docs/fr-id-card-ocr-ruby)
147
+ * [US Bank Check OCR Ruby](https://developers.mindee.com/docs/us-bank-check-ocr-ruby)
148
+ * [US Driver License OCR Ruby](https://developers.mindee.com/docs/us-driver-license-ocr-ruby)
149
+ * [US W9 API Ruby](https://developers.mindee.com/docs/us-w9-api-ruby)
150
+ * [Barcode Reader API Ruby](https://developers.mindee.com/docs/barcode-reader-api-ruby)
151
+ * [Cropper API Ruby](https://developers.mindee.com/docs/cropper-api-ruby)
152
+ * [Invoice Splitter API Ruby](https://developers.mindee.com/docs/invoice-splitter-api-ruby)
153
+ * [Multi Receipts Detector API Ruby](https://developers.mindee.com/docs/multi-receipts-detector-api-ruby)
154
+
105
155
 
106
156
  You can also take a look at the
107
157
  [Reference Documentation](https://mindee.github.io/mindee-api-ruby/).
data/bin/mindee.rb CHANGED
@@ -1,149 +1,226 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'optparse'
5
-
6
6
  require 'mindee'
7
7
 
8
8
  DOCUMENTS = {
9
9
  "custom" => {
10
- help: "Custom document type from API builder",
11
- prediction: Mindee::Product::Custom::CustomV1,
10
+ description: "Custom document type from API builder",
11
+ doc_class: Mindee::Product::Custom::CustomV1,
12
+ sync: true,
13
+ async: false,
12
14
  },
13
15
  "proof-of-address" => {
14
- help: 'Proof of Address',
15
- prediction: Mindee::Product::ProofOfAddress::ProofOfAddressV1,
16
+ description: 'Proof of Address',
17
+ doc_class: Mindee::Product::ProofOfAddress::ProofOfAddressV1,
18
+ sync: true,
19
+ async: false,
20
+ },
21
+ "cropper" => {
22
+ description: 'Cropper',
23
+ doc_class: Mindee::Product::Cropper::CropperV1,
24
+ sync: true,
25
+ async: false,
16
26
  },
17
27
  "financial-document" => {
18
- help: 'Financial Document',
19
- prediction: Mindee::Product::FinancialDocument::FinancialDocumentV1,
28
+ description: 'Financial Document',
29
+ doc_class: Mindee::Product::FinancialDocument::FinancialDocumentV1,
30
+ sync: true,
31
+ async: false,
20
32
  },
21
33
  "invoice" => {
22
- help: 'Invoice',
23
- prediction: Mindee::Product::Invoice::InvoiceV4,
34
+ description: 'Invoice',
35
+ doc_class: Mindee::Product::Invoice::InvoiceV4,
36
+ sync: true,
37
+ async: false,
24
38
  },
25
39
  "receipt" => {
26
- help: "Expense Receipt",
27
- prediction: Mindee::Product::Receipt::ReceiptV5,
40
+ description: "Expense Receipt",
41
+ doc_class: Mindee::Product::Receipt::ReceiptV5,
42
+ sync: true,
43
+ async: false,
28
44
  },
29
45
  "passport" => {
30
- help: "Passport",
31
- prediction: Mindee::Product::Passport::PassportV1,
46
+ description: "Passport",
47
+ doc_class: Mindee::Product::Passport::PassportV1,
48
+ sync: true,
49
+ async: false,
32
50
  },
33
51
  "eu-license-plate" => {
34
- help: "EU License Plate",
35
- prediction: Mindee::Product::EU::LicensePlate::LicensePlateV1,
52
+ description: "EU License Plate",
53
+ doc_class: Mindee::Product::EU::LicensePlate::LicensePlateV1,
54
+ sync: true,
55
+ async: false,
36
56
  },
37
57
  "fr-bank-account-details" => {
38
- help: "FR Bank Account Details",
39
- prediction: Mindee::Product::FR::BankAccountDetails::BankAccountDetailsV1,
58
+ description: "FR Bank Account Details",
59
+ doc_class: Mindee::Product::FR::BankAccountDetails::BankAccountDetailsV2,
60
+ sync: true,
61
+ async: false,
40
62
  },
41
63
  "fr-carte-vitale" => {
42
- help: "FR Carte Vitale",
43
- prediction: Mindee::Product::FR::CarteVitale::CarteVitaleV1,
64
+ description: "FR Carte Vitale",
65
+ doc_class: Mindee::Product::FR::CarteVitale::CarteVitaleV1,
66
+ sync: true,
67
+ async: false,
44
68
  },
45
69
  "fr-id-card" => {
46
- help: "FR ID Card",
47
- prediction: Mindee::Product::FR::IdCard::IdCardV1,
70
+ description: "FR ID Card",
71
+ doc_class: Mindee::Product::FR::IdCard::IdCardV2,
72
+ sync: true,
73
+ async: false,
48
74
  },
49
75
  "us-bank-check" => {
50
- help: "US Bank Check",
51
- prediction: Mindee::Product::US::BankCheck::BankCheckV1,
76
+ description: "US Bank Check",
77
+ doc_class: Mindee::Product::US::BankCheck::BankCheckV1,
78
+ sync: true,
79
+ async: false,
80
+ },
81
+ "us-driver-license" => {
82
+ description: "US Driver License",
83
+ doc_class: Mindee::Product::US::DriverLicense::DriverLicenseV1,
84
+ sync: true,
85
+ async: false,
86
+ },
87
+ "us-w9" => {
88
+ description: "US W9 Form",
89
+ doc_class: Mindee::Product::US::W9::W9V1,
90
+ sync: true,
91
+ async: false
52
92
  },
53
93
  "invoice-splitter" => {
54
- help: "US Bank Check",
55
- prediction: Mindee::Product::InvoiceSplitter::InvoiceSplitterV1,
94
+ description: "US Bank Check",
95
+ doc_class: Mindee::Product::InvoiceSplitter::InvoiceSplitterV1,
96
+ sync: false,
97
+ async: true,
56
98
  },
57
99
  }
58
100
 
59
- options = {
60
- api_key: '',
61
- print_full: false,
101
+ options = {}
102
+ DEFAULT_CUTTING = {
103
+ page_indexes: [0, 1, 2, 3, 4],
104
+ operation: :KEEP_ONLY,
105
+ on_min_pages: 0,
62
106
  }
63
107
 
64
- def ots_subcommand(command, options)
65
- OptionParser.new do |opt|
66
- opt.banner = "Usage: #{command} [options] FILE"
67
- opt.on('-k [KEY]', '--key [KEY]', 'API key for the endpoint') do |v|
68
- options[:api_key] = v
69
- end
70
- opt.on('-w', '--all-words', 'Include words in response') do |v|
71
- options[:all_words] = v
72
- end
73
- opt.on('-c', '--cut-pages', "Cut document pages") do |v|
74
- options[:cut_pages] = v
75
- end
108
+ # Initializes custom-specific options
109
+ # @param cli_parser [OptionParser]
110
+ def custom_subcommand(cli_parser)
111
+ cli_parser.on('-v [VERSION]', '--version [VERSION]', 'Model version for the API') do |v|
112
+ options[:version] = v
113
+ end
114
+ cli_parser.on('-a ACCOUNT_NAME', '--account ACCOUNT_NAME', 'API account name for the endpoint') do |v|
115
+ options[:account_name] = v
76
116
  end
77
117
  end
78
118
 
79
- def custom_subcommand(options)
80
- OptionParser.new do |opt|
81
- opt.banner = "Usage: custom [options] ENDPOINT_NAME FILE"
82
- opt.on('-w', '--all-words', 'Include words in response') do |v|
119
+ product_parser = {}
120
+ DOCUMENTS.each do |doc_key, doc_value|
121
+ product_parser[doc_key] = OptionParser.new do | opts |
122
+ opts.on('-w', '--all-words', 'Include words in response') do |v|
83
123
  options[:all_words] = v
84
124
  end
85
- opt.on('-c', '--cut-pages', "Don't cut document pages") do |v|
125
+ opts.on('-c', '--cut-pages', "Don't cut document pages") do |v|
86
126
  options[:cut_pages] = v
87
127
  end
88
- opt.on('-k [KEY]', '--key [KEY]', 'API key for the endpoint') do |v|
128
+ opts.on('-k [KEY]', '--key [KEY]', 'API key for the endpoint') do |v|
89
129
  options[:api_key] = v
90
130
  end
91
- opt.on('-v [VERSION]', '--version [VERSION]', 'Model version for the API') do |v|
92
- options[:version] = v
131
+ opts.on('-f', '--full', "Print the full data, including pages") do |v|
132
+ options[:print_full] = true
133
+ end
134
+ opts.on('-F', '--fix-pdf', "Attempts to fix broken PDF files before sending them to the server.") do |v|
135
+ options[:fix_pdf] = true
93
136
  end
94
- opt.on('-a ACCOUNT_NAME', '--account ACCOUNT_NAME', 'API account name for the endpoint') do |v|
95
- options[:account_name] = v
137
+ if (doc_key != 'custom')
138
+ opts.banner = "Product: #{doc_value[:description]}. \nUsage: mindee.rb #{doc_key} [options] file"
139
+ else
140
+ opts.banner = "#{doc_value[:description]}. \nUsage: mindee.rb custom [options] endpoint_name file"
141
+ custom_subcommand(opts)
142
+ end
143
+ if doc_value[:async]
144
+ if doc_value[:sync]
145
+ opts.on("-A", "--async", "Call asynchronously") do |v|
146
+ options[:parse_async] = v
147
+ end
148
+ end
96
149
  end
97
150
  end
98
151
  end
99
152
 
100
- global_parser = OptionParser.new do |opt|
101
- opt.banner = "Usage: #{$PROGRAM_NAME} [options] subcommand [options] FILE"
102
- opt.separator('')
103
- opt.separator("subcommands: #{DOCUMENTS.keys.join(', ')}")
104
- opt.separator('')
105
- opt.on('-f', '--full', "Print the full data, including pages") do |v|
106
- options[:print_full] = true
107
- end
153
+ global_parser = OptionParser.new do | opts |
154
+ opts.banner = "Usage: mindee.rb product [options] file"
155
+ opts.separator "Available products:"
156
+ opts.separator " #{DOCUMENTS.keys.join("\n ")}"
108
157
  end
109
158
 
110
- global_parser.order!
111
159
  command = ARGV.shift
160
+ if !DOCUMENTS.has_key?(command)
161
+ abort(global_parser.help)
162
+ end
163
+ doc_class = DOCUMENTS[command][:doc_class]
164
+ product_parser[command].parse!
165
+
112
166
  if command == 'custom'
113
- custom_subcommand(options).order!
114
- elsif DOCUMENTS.keys.include? command || ''
115
- ots_subcommand(command, options).order!
167
+ if ARGV.length < 2
168
+ $stderr.puts "The 'custom' command requires both ENDPOINT_NAME and file arguments."
169
+ abort(product_parser[command].help)
170
+ end
171
+ endpoint_name = ARGV[0]
172
+ options[:file_path] = ARGV[1]
116
173
  else
117
- $stderr.puts global_parser
118
- exit(1)
174
+ if ARGV.length < 1
175
+ $stderr.puts "file missing"
176
+ abort(product_parser[command].help)
177
+ end
178
+ endpoint_name = nil
179
+ options[:file_path] = ARGV[0]
119
180
  end
120
181
 
121
182
  mindee_client = Mindee::Client.new(api_key: options[:api_key])
183
+ if (options[:file_path].start_with?("https://"))
184
+ input_source = mindee_client.source_from_url(options[:file_path])
185
+ else
186
+ input_source = mindee_client.source_from_path(options[:file_path], fix_pdf: options[:fix_pdf])
187
+ end
122
188
 
123
189
  if command == 'custom'
124
- if ARGV.length != 2
125
- $stderr.puts "The 'custom' command requires both ENDPOINT_NAME and FILE arguments."
126
- exit(1)
127
- end
128
- doc_type = ARGV[0]
129
- file_path = ARGV[1]
190
+ endpoint_name = 'endpoint_name'
191
+ custom_endpoint = mindee_client.create_endpoint(
192
+ account_name: endpoint_name,
193
+ endpoint_name: options[:account_name],
194
+ endpoint_version: options[:endpoint_version].nil? ? "1" : options[:endpoint_version]
195
+ )
130
196
  else
131
- if ARGV.length != 1
132
- $stderr.puts 'No file specified.'
133
- exit(1)
134
- end
135
- doc_type = ''
136
- file_path = ARGV[0]
197
+ custom_endpoint = nil
137
198
  end
138
199
 
139
- default_cutting = {
140
- page_indexes: [0, 1, 2, 3, 4],
141
- operation: :KEEP_ONLY,
142
- on_min_pages: 0,
143
- }
144
200
  page_options = options[:cut_pages].nil? ? nil : default_cutting
145
- input_source = mindee_client.source_from_path(file_path)
146
- result = mindee_client.parse(input_source, DOCUMENTS[command][:prediction], page_options: page_options)
201
+ if options[:parse_async].nil?
202
+ if !DOCUMENTS[command][:sync]
203
+ options[:parse_async] = true
204
+ else
205
+ options[:parse_async] = false
206
+ end
207
+ end
208
+ if options[:parse_async]
209
+ result = mindee_client.enqueue_and_parse(
210
+ input_source,
211
+ DOCUMENTS[command][:doc_class],
212
+ endpoint: custom_endpoint,
213
+ page_options: page_options,
214
+ )
215
+ else
216
+ result = mindee_client.parse(
217
+ input_source,
218
+ DOCUMENTS[command][:doc_class],
219
+ endpoint: custom_endpoint,
220
+ page_options: page_options,
221
+ )
222
+ end
223
+
147
224
  if options[:print_full]
148
225
  puts result.document
149
226
  else
@@ -0,0 +1,137 @@
1
+ ---
2
+ title: FR Bank Account Details OCR Ruby
3
+ ---
4
+ The Ruby OCR SDK supports the [Bank Account Details API](https://platform.mindee.com/mindee/bank_account_details).
5
+
6
+ Using the [sample below](https://github.com/mindee/client-lib-test-data/blob/main/products/bank_account_details/default_sample.jpg), we are going to illustrate how to extract the data that we want using the OCR SDK.
7
+ ![Bank Account Details sample](https://github.com/mindee/client-lib-test-data/blob/main/products/bank_account_details/default_sample.jpg?raw=true)
8
+
9
+ # Quick-Start
10
+ ```rb
11
+ require 'mindee'
12
+
13
+ # Init a new client
14
+ mindee_client = Mindee::Client.new(api_key: 'my-api-key')
15
+
16
+ # Load a file from disk
17
+ input_source = mindee_client.source_from_path('/path/to/the/file.ext')
18
+
19
+ # Parse the file
20
+ result = mindee_client.parse(
21
+ input_source,
22
+ Mindee::Product::FR::BankAccountDetails::BankAccountDetailsV2
23
+ )
24
+
25
+ # Print a full summary of the parsed data in RST format
26
+ puts result.document
27
+
28
+ # Print the document-level parsed data
29
+ # puts result.document.inference.prediction
30
+ ```
31
+
32
+ **Output (RST):**
33
+ ```rst
34
+ ########
35
+ Document
36
+ ########
37
+ :Mindee ID: bc8f7265-8dab-49fe-810c-d50049605578
38
+ :Filename: default_sample.jpg
39
+
40
+ Inference
41
+ #########
42
+ :Product: mindee/bank_account_details v2.0
43
+ :Rotation applied: Yes
44
+
45
+ Prediction
46
+ ==========
47
+ :Account Holder's Names: MME HEGALALDIA L ENVOL
48
+ :Basic Bank Account Number:
49
+ :Bank Code: 13335
50
+ :Branch Code: 00040
51
+ :Key: 06
52
+ :Account Number: 08932891361
53
+ :IBAN: FR7613335000400893289136106
54
+ :SWIFT Code: CEPAFRPP333
55
+
56
+ Page Predictions
57
+ ================
58
+
59
+ Page 0
60
+ ------
61
+ :Account Holder's Names: MME HEGALALDIA L ENVOL
62
+ :Basic Bank Account Number:
63
+ :Bank Code: 13335
64
+ :Branch Code: 00040
65
+ :Key: 06
66
+ :Account Number: 08932891361
67
+ :IBAN: FR7613335000400893289136106
68
+ :SWIFT Code: CEPAFRPP333
69
+ ```
70
+
71
+ # Field Types
72
+ ## Standard Fields
73
+ These fields are generic and used in several products.
74
+
75
+ ### Basic Field
76
+ Each prediction object contains a set of fields that inherit from the generic `Field` class.
77
+ A typical `Field` object will have the following attributes:
78
+
79
+ * **value** (`String`, `Float`, `Integer`, `Boolean`): corresponds to the field value. Can be `nil` if no value was extracted.
80
+ * **confidence** (Float, nil): the confidence score of the field prediction.
81
+ * **bounding_box** (`Mindee::Geometry::Quadrilateral`, `nil`): contains exactly 4 relative vertices (points) coordinates of a right rectangle containing the field in the document.
82
+ * **polygon** (`Mindee::Geometry::Polygon`, `nil`): contains the relative vertices coordinates (`Point`) of a polygon containing the field in the image.
83
+ * **page_id** (`Integer`, `nil`): the ID of the page, is `nil` when at document-level.
84
+ * **reconstructed** (`Boolean`): indicates whether or not an object was reconstructed (not extracted as the API gave it).
85
+
86
+
87
+ Aside from the previous attributes, all basic fields have access to a `to_s` method that can be used to print their value as a string.
88
+
89
+ ### String Field
90
+ The text field `StringField` only has one constraint: it's **value** is a `String` (or `nil`).
91
+
92
+ ## Specific Fields
93
+ Fields which are specific to this product; they are not used in any other product.
94
+
95
+ ### Basic Bank Account Number Field
96
+ Full extraction of BBAN, including: branch code, bank code, account and key.
97
+
98
+ A `BankAccountDetailsV2Bban` implements the following attributes:
99
+
100
+ * `bban_bank_code` (String): The BBAN bank code outputted as a string.
101
+ * `bban_branch_code` (String): The BBAN branch code outputted as a string.
102
+ * `bban_key` (String): The BBAN key outputted as a string.
103
+ * `bban_number` (String): The BBAN Account number outputted as a string.
104
+
105
+ # Attributes
106
+ The following fields are extracted for Bank Account Details V2:
107
+
108
+ ## Account Holder's Names
109
+ **account_holders_names** ([StringField](#string-field)): Full extraction of the account holders names.
110
+
111
+ ```rb
112
+ puts result.document.inference.prediction.account_holders_names.value
113
+ ```
114
+
115
+ ## Basic Bank Account Number
116
+ **bban** ([BankAccountDetailsV2Bban](#basic-bank-account-number-field)): Full extraction of BBAN, including: branch code, bank code, account and key.
117
+
118
+ ```rb
119
+ puts result.document.inference.prediction.bban.value
120
+ ```
121
+
122
+ ## IBAN
123
+ **iban** ([StringField](#string-field)): Full extraction of the IBAN number.
124
+
125
+ ```rb
126
+ puts result.document.inference.prediction.iban.value
127
+ ```
128
+
129
+ ## SWIFT Code
130
+ **swift_code** ([StringField](#string-field)): Full extraction of the SWIFT code.
131
+
132
+ ```rb
133
+ puts result.document.inference.prediction.swift_code.value
134
+ ```
135
+
136
+ # Questions?
137
+ [Join our Slack](https://join.slack.com/t/mindee-community/shared_invite/zt-1jv6nawjq-FDgFcF2T5CmMmRpl9LLptw)