google-cloud-vision 0.20.2 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -28,10 +28,9 @@ module Google
28
28
  # standard](http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf).
29
29
  #
30
30
  # @example
31
- # require "google/cloud"
31
+ # require "google/cloud/vision"
32
32
  #
33
- # gcloud = Google::Cloud.new
34
- # vision = gcloud.vision
33
+ # vision = Google::Cloud::Vision.new
35
34
  #
36
35
  # image = vision.image "path/to/landmark.jpg"
37
36
  # entity = image.landmark
@@ -80,18 +79,18 @@ module Google
80
79
  end
81
80
 
82
81
  ##
83
- # @private New Google API Client LatLng object.
84
- def to_gapi
85
- Google::Apis::VisionV1::LatLng.new(
82
+ # @private New GRPC LatLng object.
83
+ def to_grpc
84
+ Google::Type::LatLng.new(
86
85
  latitude: latitude,
87
86
  longitude: longitude
88
87
  )
89
88
  end
90
89
 
91
90
  ##
92
- # @private New Location from a Google API Client LatLng object.
93
- def self.from_gapi gapi
94
- new gapi.latitude, gapi.longitude
91
+ # @private New Location from a GRPC LatLng object.
92
+ def self.from_grpc grpc
93
+ new grpc.latitude, grpc.longitude
95
94
  end
96
95
  end
97
96
  end
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
  require "google/cloud/errors"
17
- require "google/cloud/core/gce"
17
+ require "google/cloud/core/environment"
18
18
  require "google/cloud/vision/service"
19
19
  require "google/cloud/vision/credentials"
20
20
  require "google/cloud/vision/annotate"
@@ -27,16 +27,15 @@ module Google
27
27
  ##
28
28
  # # Project
29
29
  #
30
- # Google Cloud Vision allows easy integration of vision detection features
31
- # within developer applications, including image labeling, face and
32
- # landmark detection, optical character recognition (OCR), and tagging of
33
- # explicit content.
30
+ # Google Cloud Vision allows developers to easily integrate vision
31
+ # detection features within applications, including image labeling, face
32
+ # and landmark detection, optical character recognition (OCR), and tagging
33
+ # of explicit content.
34
34
  #
35
35
  # @example
36
- # require "google/cloud"
36
+ # require "google/cloud/vision"
37
37
  #
38
- # gcloud = Google::Cloud.new
39
- # vision = gcloud.vision
38
+ # vision = Google::Cloud::Vision.new
40
39
  #
41
40
  # image = vision.image "path/to/landmark.jpg"
42
41
  #
@@ -61,11 +60,12 @@ module Google
61
60
  # The Vision project connected to.
62
61
  #
63
62
  # @example
64
- # require "google/cloud"
63
+ # require "google/cloud/vision"
65
64
  #
66
- # gcloud = Google::Cloud.new "my-todo-project",
67
- # "/path/to/keyfile.json"
68
- # vision = gcloud.vision
65
+ # vision = Google::Cloud::Vision.new(
66
+ # project: "my-todo-project",
67
+ # keyfile: "/path/to/keyfile.json"
68
+ # )
69
69
  #
70
70
  # vision.project #=> "my-todo-project"
71
71
  #
@@ -79,7 +79,7 @@ module Google
79
79
  ENV["VISION_PROJECT"] ||
80
80
  ENV["GOOGLE_CLOUD_PROJECT"] ||
81
81
  ENV["GCLOUD_PROJECT"] ||
82
- Google::Cloud::Core::GCE.project_id
82
+ Google::Cloud::Core::Environment.project_id
83
83
  end
84
84
 
85
85
  ##
@@ -89,7 +89,7 @@ module Google
89
89
  # combined size of all images in a request. Reducing your file size can
90
90
  # significantly improve throughput; however, be careful not to reduce
91
91
  # image quality in the process. See [Best Practices - Image
92
- # Sizing](https://cloud.google.com/vision/docs/image-best-practices#image_sizing)
92
+ # Sizing](https://cloud.google.com/vision/docs/best-practices#image_sizing)
93
93
  # for current file size limits.
94
94
  #
95
95
  # Note that an object in Google Cloud Storage is a single entity;
@@ -97,7 +97,7 @@ module Google
97
97
  # exist (though default bucket permissions do exist). Make sure the code
98
98
  # which performs your request has access to that image.
99
99
  #
100
- # @see https://cloud.google.com/vision/docs/image-best-practices Best
100
+ # @see https://cloud.google.com/vision/docs/best-practices Best
101
101
  # Practices
102
102
  #
103
103
  # @param [String, IO, StringIO, Tempfile, Google::Cloud::Storage::File]
@@ -109,18 +109,16 @@ module Google
109
109
  # @return [Image] An image for the Vision service.
110
110
  #
111
111
  # @example With a Google Cloud Storage URI:
112
- # require "google/cloud"
112
+ # require "google/cloud/vision"
113
113
  #
114
- # gcloud = Google::Cloud.new
115
- # vision = gcloud.vision
114
+ # vision = Google::Cloud::Vision.new
116
115
  #
117
116
  # image = vision.image "gs://bucket-name/path_to_image_object"
118
117
  #
119
118
  # @example With a local file path:
120
- # require "google/cloud"
119
+ # require "google/cloud/vision"
121
120
  #
122
- # gcloud = Google::Cloud.new
123
- # vision = gcloud.vision
121
+ # vision = Google::Cloud::Vision.new
124
122
  #
125
123
  # image = vision.image "path/to/landmark.jpg"
126
124
  #
@@ -144,7 +142,7 @@ module Google
144
142
  # combined size of all images in a request. Reducing your file size can
145
143
  # significantly improve throughput; however, be careful not to reduce
146
144
  # image quality in the process. See [Best Practices - Image
147
- # Sizing](https://cloud.google.com/vision/docs/image-best-practices#image_sizing)
145
+ # Sizing](https://cloud.google.com/vision/docs/best-practices#image_sizing)
148
146
  # for current file size limits.
149
147
  #
150
148
  # @see https://cloud.google.com/vision/docs/requests-and-responses Cloud
@@ -189,10 +187,9 @@ module Google
189
187
  # multiple images.
190
188
  #
191
189
  # @example With a single image:
192
- # require "google/cloud"
190
+ # require "google/cloud/vision"
193
191
  #
194
- # gcloud = Google::Cloud.new
195
- # vision = gcloud.vision
192
+ # vision = Google::Cloud::Vision.new
196
193
  #
197
194
  # image = vision.image "path/to/landmark.jpg"
198
195
  #
@@ -203,10 +200,9 @@ module Google
203
200
  # #=> "monument", "landmark"]
204
201
  #
205
202
  # @example With multiple images:
206
- # require "google/cloud"
203
+ # require "google/cloud/vision"
207
204
  #
208
- # gcloud = Google::Cloud.new
209
- # vision = gcloud.vision
205
+ # vision = Google::Cloud::Vision.new
210
206
  #
211
207
  # face_img = vision.image "path/to/face.jpg"
212
208
  # landmark_img = vision.image "path/to/landmark.jpg"
@@ -217,10 +213,9 @@ module Google
217
213
  # annotations[1].labels.count #=> 6
218
214
  #
219
215
  # @example With multiple images and configurations passed in a block:
220
- # require "google/cloud"
216
+ # require "google/cloud/vision"
221
217
  #
222
- # gcloud = Google::Cloud.new
223
- # vision = gcloud.vision
218
+ # vision = Google::Cloud::Vision.new
224
219
  #
225
220
  # face_img = vision.image "path/to/face.jpg"
226
221
  # landmark_img = vision.image "path/to/landmark.jpg"
@@ -238,10 +233,9 @@ module Google
238
233
  # annotations[2].text.words.count #=> 28
239
234
  #
240
235
  # @example Maximum result values can also be provided:
241
- # require "google/cloud"
236
+ # require "google/cloud/vision"
242
237
  #
243
- # gcloud = Google::Cloud.new
244
- # vision = gcloud.vision
238
+ # vision = Google::Cloud::Vision.new
245
239
  #
246
240
  # image = vision.image "path/to/landmark.jpg"
247
241
  #
@@ -260,10 +254,10 @@ module Google
260
254
 
261
255
  yield a if block_given?
262
256
 
263
- gapi = service.annotate a.requests
264
- annotations = Array(gapi.responses).map do |g|
257
+ grpc = service.annotate a.requests
258
+ annotations = Array(grpc.responses).map do |g|
265
259
  fail Error.from_error(g.error) if g.error
266
- Annotation.from_gapi g
260
+ Annotation.from_grpc g
267
261
  end
268
262
  return annotations.first if annotations.count == 1
269
263
  annotations
@@ -15,7 +15,8 @@
15
15
 
16
16
  require "google/cloud/errors"
17
17
  require "google/cloud/vision/version"
18
- require "google/apis/vision_v1"
18
+ require "google/cloud/vision/v1"
19
+ require "google/gax/errors"
19
20
 
20
21
  module Google
21
22
  module Cloud
@@ -24,39 +25,54 @@ module Google
24
25
  # @private
25
26
  # Represents the service to Vision, exposing the API calls.
26
27
  class Service
27
- ##
28
- # Alias to the Google Client API module
29
- API = Google::Apis::VisionV1
30
-
31
- attr_accessor :project
32
- attr_accessor :credentials
28
+ attr_accessor :project, :credentials, :host, :timeout, :client_config
33
29
 
34
30
  ##
35
31
  # Creates a new Service instance.
36
- def initialize project, credentials, retries: nil, timeout: nil
32
+ def initialize project, credentials, host: nil, timeout: nil,
33
+ client_config: nil
37
34
  @project = project
38
35
  @credentials = credentials
39
- @service = API::VisionService.new
40
- @service.client_options.application_name = "google-cloud-vision"
41
- @service.client_options.application_version = \
42
- Google::Cloud::Vision::VERSION
43
- @service.request_options.retries = retries || 3
44
- @service.request_options.timeout_sec = timeout
45
- @service.request_options.open_timeout_sec = timeout
46
- @service.authorization = @credentials.client
36
+ @host = host || V1::ImageAnnotatorApi::SERVICE_ADDRESS
37
+ @timeout = timeout
38
+ @client_config = client_config || {}
39
+ end
40
+
41
+ def channel
42
+ require "grpc"
43
+ GRPC::Core::Channel.new host, nil, chan_creds
44
+ end
45
+
46
+ def chan_creds
47
+ return credentials if insecure?
48
+ require "grpc"
49
+ GRPC::Core::ChannelCredentials.new.compose \
50
+ GRPC::Core::CallCredentials.new credentials.client.updater_proc
47
51
  end
48
52
 
49
53
  def service
50
54
  return mocked_service if mocked_service
51
- @service
55
+ @service ||= \
56
+ V1::ImageAnnotatorApi.new(
57
+ service_path: host,
58
+ channel: channel,
59
+ timeout: timeout,
60
+ client_config: client_config,
61
+ app_name: "gcloud-ruby",
62
+ app_version: Google::Cloud::Vision::VERSION)
52
63
  end
53
64
  attr_accessor :mocked_service
54
65
 
66
+ def insecure?
67
+ credentials == :this_channel_is_insecure
68
+ end
69
+
55
70
  ##
56
71
  # Returns API::BatchAnnotateImagesResponse
57
72
  def annotate requests
58
- request = API::BatchAnnotateImagesRequest.new(requests: requests)
59
- execute { service.annotate_image request }
73
+ execute do
74
+ service.batch_annotate_images requests, options: default_options
75
+ end
60
76
  end
61
77
 
62
78
  def inspect
@@ -65,10 +81,19 @@ module Google
65
81
 
66
82
  protected
67
83
 
84
+ def default_headers
85
+ { "google-cloud-resource-prefix" => "projects/#{@project}" }
86
+ end
87
+
88
+ def default_options
89
+ Google::Gax::CallOptions.new kwargs: default_headers
90
+ end
91
+
68
92
  def execute
69
93
  yield
70
- rescue Google::Apis::Error => e
71
- raise Google::Cloud::Error.from_error(e)
94
+ rescue Google::Gax::GaxError => e
95
+ # GaxError wraps BadStatus, but exposes it as #cause
96
+ raise Google::Cloud::Error.from_error(e.cause)
72
97
  end
73
98
  end
74
99
  end
@@ -26,7 +26,7 @@ require "json"
26
26
  require "pathname"
27
27
 
28
28
  require "google/gax"
29
- require "google/cloud/vision/v1/image_annotator_services_pb"
29
+ require "google/cloud/vision/v1/image_annotator_pb"
30
30
 
31
31
  module Google
32
32
  module Cloud
@@ -36,10 +36,10 @@ module Google
36
36
  # landmark, logo, label, and text detection, over client images, and returns
37
37
  # detected entities from the images.
38
38
  #
39
- # @!attribute [r] stub
39
+ # @!attribute [r] image_annotator_stub
40
40
  # @return [Google::Cloud::Vision::V1::ImageAnnotator::Stub]
41
41
  class ImageAnnotatorApi
42
- attr_reader :stub
42
+ attr_reader :image_annotator_stub
43
43
 
44
44
  # The default address of the service.
45
45
  SERVICE_ADDRESS = "vision.googleapis.com".freeze
@@ -86,8 +86,15 @@ module Google
86
86
  timeout: DEFAULT_TIMEOUT,
87
87
  app_name: "gax",
88
88
  app_version: Google::Gax::VERSION
89
+ # These require statements are intentionally placed here to initialize
90
+ # the gRPC module only when it's required.
91
+ # See https://github.com/googleapis/toolkit/issues/446
92
+ require "google/gax/grpc"
93
+ require "google/cloud/vision/v1/image_annotator_services_pb"
94
+
89
95
  google_api_client = "#{app_name}/#{app_version} " \
90
- "#{CODE_GEN_NAME_VERSION} ruby/#{RUBY_VERSION}".freeze
96
+ "#{CODE_GEN_NAME_VERSION} gax/#{Google::Gax::VERSION} " \
97
+ "ruby/#{RUBY_VERSION}".freeze
91
98
  headers = { :"x-goog-api-client" => google_api_client }
92
99
  client_config_file = Pathname.new(__dir__).join(
93
100
  "image_annotator_client_config.json"
@@ -103,7 +110,7 @@ module Google
103
110
  kwargs: headers
104
111
  )
105
112
  end
106
- @stub = Google::Gax::Grpc.create_stub(
113
+ @image_annotator_stub = Google::Gax::Grpc.create_stub(
107
114
  service_path,
108
115
  port,
109
116
  chan_creds: chan_creds,
@@ -113,7 +120,7 @@ module Google
113
120
  )
114
121
 
115
122
  @batch_annotate_images = Google::Gax.create_api_call(
116
- @stub.method(:batch_annotate_images),
123
+ @image_annotator_stub.method(:batch_annotate_images),
117
124
  defaults["batch_annotate_images"]
118
125
  )
119
126
  end
@@ -129,6 +136,15 @@ module Google
129
136
  # retries, etc.
130
137
  # @return [Google::Cloud::Vision::V1::BatchAnnotateImagesResponse]
131
138
  # @raise [Google::Gax::GaxError] if the RPC is aborted.
139
+ # @example
140
+ # require "google/cloud/vision/v1/image_annotator_api"
141
+ #
142
+ # ImageAnnotatorApi = Google::Cloud::Vision::V1::ImageAnnotatorApi
143
+ #
144
+ # image_annotator_api = ImageAnnotatorApi.new
145
+ # requests = []
146
+ # response = image_annotator_api.batch_annotate_images(requests)
147
+
132
148
  def batch_annotate_images \
133
149
  requests,
134
150
  options: nil
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Vision
19
- VERSION = "0.20.2"
19
+ VERSION = "0.21.0"
20
20
  end
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-vision
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.2
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-09-06 00:00:00.000000000 Z
12
+ date: 2016-10-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: google-cloud-core
@@ -17,28 +17,70 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 0.20.0
20
+ version: 0.21.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 0.20.0
27
+ version: 0.21.0
28
28
  - !ruby/object:Gem::Dependency
29
- name: google-api-client
29
+ name: grpc
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 0.9.11
34
+ version: '1.0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: google-gax
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 0.6.0
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: 0.6.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: google-protobuf
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '3.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '3.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: googleapis-common-protos
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '1.3'
35
77
  type: :runtime
36
78
  prerelease: false
37
79
  version_requirements: !ruby/object:Gem::Requirement
38
80
  requirements:
39
81
  - - "~>"
40
82
  - !ruby/object:Gem::Version
41
- version: 0.9.11
83
+ version: '1.3'
42
84
  - !ruby/object:Gem::Dependency
43
85
  name: minitest
44
86
  requirement: !ruby/object:Gem::Requirement
@@ -151,6 +193,20 @@ dependencies:
151
193
  - - "~>"
152
194
  - !ruby/object:Gem::Version
153
195
  version: '0.9'
196
+ - !ruby/object:Gem::Dependency
197
+ name: yard-doctest
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: 0.1.6
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: 0.1.6
154
210
  description: google-cloud-vision is the official library for Google Cloud Vision API.
155
211
  email:
156
212
  - mike@blowmage.com