gcloud 0.12.2 → 0.20.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.
Files changed (169) hide show
  1. checksums.yaml +5 -13
  2. data/lib/gcloud.rb +27 -456
  3. data/lib/gcloud/bigquery.rb +2 -382
  4. data/lib/gcloud/datastore.rb +2 -576
  5. data/lib/gcloud/dns.rb +2 -321
  6. data/lib/gcloud/logging.rb +1 -322
  7. data/lib/gcloud/pubsub.rb +2 -476
  8. data/lib/gcloud/resource_manager.rb +2 -273
  9. data/lib/gcloud/storage.rb +2 -440
  10. data/lib/gcloud/translate.rb +1 -250
  11. data/lib/gcloud/version.rb +2 -2
  12. data/lib/gcloud/vision.rb +1 -501
  13. metadata +36 -332
  14. data/AUTHENTICATION.md +0 -75
  15. data/CHANGELOG.md +0 -382
  16. data/OVERVIEW.md +0 -259
  17. data/lib/gcloud/backoff.rb +0 -150
  18. data/lib/gcloud/bigquery/copy_job.rb +0 -97
  19. data/lib/gcloud/bigquery/credentials.rb +0 -29
  20. data/lib/gcloud/bigquery/data.rb +0 -239
  21. data/lib/gcloud/bigquery/dataset.rb +0 -753
  22. data/lib/gcloud/bigquery/dataset/access.rb +0 -507
  23. data/lib/gcloud/bigquery/dataset/list.rb +0 -169
  24. data/lib/gcloud/bigquery/extract_job.rb +0 -117
  25. data/lib/gcloud/bigquery/insert_response.rb +0 -81
  26. data/lib/gcloud/bigquery/job.rb +0 -299
  27. data/lib/gcloud/bigquery/job/list.rb +0 -172
  28. data/lib/gcloud/bigquery/load_job.rb +0 -202
  29. data/lib/gcloud/bigquery/project.rb +0 -475
  30. data/lib/gcloud/bigquery/query_data.rb +0 -234
  31. data/lib/gcloud/bigquery/query_job.rb +0 -137
  32. data/lib/gcloud/bigquery/schema.rb +0 -359
  33. data/lib/gcloud/bigquery/service.rb +0 -506
  34. data/lib/gcloud/bigquery/table.rb +0 -1141
  35. data/lib/gcloud/bigquery/table/list.rb +0 -180
  36. data/lib/gcloud/bigquery/view.rb +0 -475
  37. data/lib/gcloud/credentials.rb +0 -129
  38. data/lib/gcloud/datastore/commit.rb +0 -148
  39. data/lib/gcloud/datastore/credentials.rb +0 -35
  40. data/lib/gcloud/datastore/cursor.rb +0 -76
  41. data/lib/gcloud/datastore/dataset.rb +0 -660
  42. data/lib/gcloud/datastore/dataset/lookup_results.rb +0 -219
  43. data/lib/gcloud/datastore/dataset/query_results.rb +0 -386
  44. data/lib/gcloud/datastore/entity.rb +0 -449
  45. data/lib/gcloud/datastore/errors.rb +0 -41
  46. data/lib/gcloud/datastore/gql_query.rb +0 -211
  47. data/lib/gcloud/datastore/grpc_utils.rb +0 -132
  48. data/lib/gcloud/datastore/key.rb +0 -281
  49. data/lib/gcloud/datastore/properties.rb +0 -128
  50. data/lib/gcloud/datastore/query.rb +0 -348
  51. data/lib/gcloud/datastore/service.rb +0 -167
  52. data/lib/gcloud/datastore/transaction.rb +0 -362
  53. data/lib/gcloud/dns/change.rb +0 -158
  54. data/lib/gcloud/dns/change/list.rb +0 -173
  55. data/lib/gcloud/dns/credentials.rb +0 -29
  56. data/lib/gcloud/dns/importer.rb +0 -183
  57. data/lib/gcloud/dns/project.rb +0 -247
  58. data/lib/gcloud/dns/record.rb +0 -170
  59. data/lib/gcloud/dns/record/list.rb +0 -174
  60. data/lib/gcloud/dns/service.rb +0 -167
  61. data/lib/gcloud/dns/zone.rb +0 -759
  62. data/lib/gcloud/dns/zone/list.rb +0 -168
  63. data/lib/gcloud/dns/zone/transaction.rb +0 -176
  64. data/lib/gcloud/errors.rb +0 -206
  65. data/lib/gcloud/gce.rb +0 -56
  66. data/lib/gcloud/grpc_utils.rb +0 -87
  67. data/lib/gcloud/logging/credentials.rb +0 -29
  68. data/lib/gcloud/logging/entry.rb +0 -465
  69. data/lib/gcloud/logging/entry/http_request.rb +0 -141
  70. data/lib/gcloud/logging/entry/list.rb +0 -177
  71. data/lib/gcloud/logging/entry/operation.rb +0 -90
  72. data/lib/gcloud/logging/logger.rb +0 -307
  73. data/lib/gcloud/logging/metric.rb +0 -169
  74. data/lib/gcloud/logging/metric/list.rb +0 -172
  75. data/lib/gcloud/logging/project.rb +0 -642
  76. data/lib/gcloud/logging/resource.rb +0 -84
  77. data/lib/gcloud/logging/resource_descriptor.rb +0 -137
  78. data/lib/gcloud/logging/resource_descriptor/list.rb +0 -174
  79. data/lib/gcloud/logging/service.rb +0 -267
  80. data/lib/gcloud/logging/sink.rb +0 -227
  81. data/lib/gcloud/logging/sink/list.rb +0 -171
  82. data/lib/gcloud/pubsub/credentials.rb +0 -29
  83. data/lib/gcloud/pubsub/message.rb +0 -94
  84. data/lib/gcloud/pubsub/policy.rb +0 -204
  85. data/lib/gcloud/pubsub/project.rb +0 -482
  86. data/lib/gcloud/pubsub/received_message.rb +0 -160
  87. data/lib/gcloud/pubsub/service.rb +0 -334
  88. data/lib/gcloud/pubsub/subscription.rb +0 -565
  89. data/lib/gcloud/pubsub/subscription/list.rb +0 -208
  90. data/lib/gcloud/pubsub/topic.rb +0 -511
  91. data/lib/gcloud/pubsub/topic/list.rb +0 -174
  92. data/lib/gcloud/pubsub/topic/publisher.rb +0 -85
  93. data/lib/gcloud/resource_manager/credentials.rb +0 -30
  94. data/lib/gcloud/resource_manager/manager.rb +0 -266
  95. data/lib/gcloud/resource_manager/policy.rb +0 -211
  96. data/lib/gcloud/resource_manager/project.rb +0 -484
  97. data/lib/gcloud/resource_manager/project/list.rb +0 -167
  98. data/lib/gcloud/resource_manager/project/updater.rb +0 -130
  99. data/lib/gcloud/resource_manager/service.rb +0 -127
  100. data/lib/gcloud/storage/bucket.rb +0 -775
  101. data/lib/gcloud/storage/bucket/acl.rb +0 -810
  102. data/lib/gcloud/storage/bucket/cors.rb +0 -153
  103. data/lib/gcloud/storage/bucket/list.rb +0 -172
  104. data/lib/gcloud/storage/credentials.rb +0 -29
  105. data/lib/gcloud/storage/errors.rb +0 -65
  106. data/lib/gcloud/storage/file.rb +0 -842
  107. data/lib/gcloud/storage/file/acl.rb +0 -425
  108. data/lib/gcloud/storage/file/list.rb +0 -191
  109. data/lib/gcloud/storage/file/verifier.rb +0 -67
  110. data/lib/gcloud/storage/project.rb +0 -316
  111. data/lib/gcloud/storage/service.rb +0 -347
  112. data/lib/gcloud/translate/api.rb +0 -241
  113. data/lib/gcloud/translate/detection.rb +0 -137
  114. data/lib/gcloud/translate/language.rb +0 -69
  115. data/lib/gcloud/translate/service.rb +0 -80
  116. data/lib/gcloud/translate/translation.rb +0 -112
  117. data/lib/gcloud/vision/annotate.rb +0 -224
  118. data/lib/gcloud/vision/annotation.rb +0 -455
  119. data/lib/gcloud/vision/annotation/entity.rb +0 -234
  120. data/lib/gcloud/vision/annotation/face.rb +0 -1750
  121. data/lib/gcloud/vision/annotation/properties.rb +0 -245
  122. data/lib/gcloud/vision/annotation/safe_search.rb +0 -161
  123. data/lib/gcloud/vision/annotation/text.rb +0 -236
  124. data/lib/gcloud/vision/annotation/vertex.rb +0 -108
  125. data/lib/gcloud/vision/credentials.rb +0 -29
  126. data/lib/gcloud/vision/image.rb +0 -590
  127. data/lib/gcloud/vision/location.rb +0 -115
  128. data/lib/gcloud/vision/project.rb +0 -278
  129. data/lib/gcloud/vision/service.rb +0 -66
  130. data/lib/google/api/annotations.rb +0 -14
  131. data/lib/google/api/http.rb +0 -30
  132. data/lib/google/api/label.rb +0 -24
  133. data/lib/google/api/monitored_resource.rb +0 -25
  134. data/lib/google/datastore/v1beta3/datastore.rb +0 -115
  135. data/lib/google/datastore/v1beta3/datastore_services.rb +0 -33
  136. data/lib/google/datastore/v1beta3/entity.rb +0 -63
  137. data/lib/google/datastore/v1beta3/query.rb +0 -128
  138. data/lib/google/devtools/cloudtrace/v1/trace.rb +0 -78
  139. data/lib/google/devtools/cloudtrace/v1/trace_services.rb +0 -32
  140. data/lib/google/example/library/v1/library.rb +0 -91
  141. data/lib/google/example/library/v1/library_services.rb +0 -40
  142. data/lib/google/iam/v1/iam_policy.rb +0 -33
  143. data/lib/google/iam/v1/iam_policy_services.rb +0 -30
  144. data/lib/google/iam/v1/policy.rb +0 -25
  145. data/lib/google/logging/type/http_request.rb +0 -28
  146. data/lib/google/logging/type/log_severity.rb +0 -27
  147. data/lib/google/logging/v2/log_entry.rb +0 -44
  148. data/lib/google/logging/v2/logging.rb +0 -56
  149. data/lib/google/logging/v2/logging_config.rb +0 -59
  150. data/lib/google/logging/v2/logging_config_services.rb +0 -32
  151. data/lib/google/logging/v2/logging_metrics.rb +0 -51
  152. data/lib/google/logging/v2/logging_metrics_services.rb +0 -32
  153. data/lib/google/logging/v2/logging_services.rb +0 -31
  154. data/lib/google/longrunning/operations.rb +0 -50
  155. data/lib/google/longrunning/operations_services.rb +0 -29
  156. data/lib/google/protobuf/descriptor.rb +0 -0
  157. data/lib/google/pubsub/v1/pubsub.rb +0 -129
  158. data/lib/google/pubsub/v1/pubsub_services.rb +0 -56
  159. data/lib/google/pubsub/v1beta2/pubsub.rb +0 -126
  160. data/lib/google/pubsub/v1beta2/pubsub_services.rb +0 -56
  161. data/lib/google/rpc/code.rb +0 -32
  162. data/lib/google/rpc/error_details.rb +0 -61
  163. data/lib/google/rpc/status.rb +0 -19
  164. data/lib/google/type/color.rb +0 -20
  165. data/lib/google/type/date.rb +0 -18
  166. data/lib/google/type/dayofweek.rb +0 -23
  167. data/lib/google/type/latlng.rb +0 -17
  168. data/lib/google/type/money.rb +0 -18
  169. data/lib/google/type/timeofday.rb +0 -19
@@ -1,112 +0,0 @@
1
- # Copyright 2016 Google Inc. All rights reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
-
16
- module Gcloud
17
- module Translate
18
- ##
19
- # # Translation
20
- #
21
- # Represents a translation query result. Returned by
22
- # {Gcloud::Translate::Api#translate}.
23
- #
24
- # @see https://cloud.google.com/translate/v2/using_rest#Translate Translate
25
- # Text
26
- #
27
- # @example
28
- # require "gcloud"
29
- #
30
- # gcloud = Gcloud.new
31
- # translate = gcloud.translate
32
- #
33
- # translation = translate.translate "Hello world!", to: "la"
34
- #
35
- # puts translation #=> Salve mundi!
36
- #
37
- # translation.from #=> "en"
38
- # translation.origin #=> "Hello world!"
39
- # translation.to #=> "la"
40
- # translation.text #=> "Salve mundi!"
41
- #
42
- class Translation
43
- ##
44
- # The translated result.
45
- #
46
- # @return [String]
47
- attr_reader :text
48
- alias_method :to_s, :text
49
- alias_method :to_str, :text
50
-
51
- ##
52
- # The original query text that was translated.
53
- #
54
- # @return [String]
55
- attr_reader :origin
56
-
57
- ##
58
- # The target language into which the text was translated.
59
- #
60
- # @return [String]
61
- attr_reader :to
62
- alias_method :language, :to
63
- alias_method :target, :to
64
-
65
- ##
66
- # The source language from which the text was translated.
67
- attr_reader :from
68
- alias_method :source, :from
69
-
70
- ##
71
- # @private Create a new object.
72
- def initialize text, to, origin, from, detected
73
- @text = text
74
- @to = to
75
- @origin = origin
76
- @from = from
77
- @detected = detected
78
- end
79
-
80
- ##
81
- # Determines if the source language was detected by the Google Cloud
82
- # Translate API.
83
- #
84
- # @return [Boolean] `true` if the source language was detected by the
85
- # Translate service, `false` if the source language was provided in the
86
- # request
87
- def detected?
88
- @detected
89
- end
90
-
91
- ##
92
- # @private New Translation from a TranslationsListResponse object as
93
- # defined by the Google API Client object.
94
- def self.from_gapi_list gapi, text, to, from
95
- res = text.zip(Array(gapi.translations)).map do |origin, g|
96
- from_gapi g, to, origin, from
97
- end
98
- return res.first if res.size == 1
99
- res
100
- end
101
-
102
- ##
103
- # @private New Translation from a TranslationsResource object as defined
104
- # by the Google API Client object.
105
- def self.from_gapi gapi, to, origin, from
106
- from ||= gapi.detected_source_language
107
- detected = !gapi.detected_source_language.nil?
108
- new gapi.translated_text, to, origin, from, detected
109
- end
110
- end
111
- end
112
- end
@@ -1,224 +0,0 @@
1
- # Copyright 2016 Google Inc. All rights reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
-
16
- require "gcloud/vision/image"
17
- require "google/apis/vision_v1"
18
-
19
- module Gcloud
20
- module Vision
21
- ##
22
- # # Annotate
23
- #
24
- # Accumulates configuration for an image annotation request. Users describe
25
- # the type of Google Cloud Vision API tasks to perform over images by
26
- # configuring features such as `faces`, `landmarks`, `text`, etc. This
27
- # configuration captures the Cloud Vision API vertical to operate on and the
28
- # number of top-scoring results to return.
29
- #
30
- # See {Project#annotate}.
31
- #
32
- # @example
33
- # require "gcloud"
34
- #
35
- # gcloud = Gcloud.new
36
- # vision = gcloud.vision
37
- #
38
- # face_image = vision.image "path/to/face.jpg"
39
- # landmark_image = vision.image "path/to/landmark.jpg"
40
- #
41
- # annotation = vision.annotate do |annotate|
42
- # annotate.annotate face_image, faces: true, labels: true
43
- # annotate.annotate landmark_image, landmarks: true
44
- # end
45
- #
46
- # annotation.faces.count #=> 1
47
- # annotation.labels.count #=> 4
48
- # annotation.landmarks.count #=> 1
49
- #
50
- class Annotate
51
- # @private
52
- attr_accessor :requests
53
-
54
- ##
55
- # @private Creates a new Annotate instance.
56
- def initialize project
57
- @project = project
58
- @requests = []
59
- end
60
-
61
- ##
62
- # Performs detection of Cloud Vision [features](https://cloud.google.com/vision/reference/rest/v1/images/annotate#Feature)
63
- # on the given images. If no options for features are provided, **all**
64
- # image detection features will be performed, with a default of `100`
65
- # results for faces, landmarks, logos, and labels. If any feature option
66
- # is provided, only the specified feature detections will be performed.
67
- # Please review [Pricing](https://cloud.google.com/vision/docs/pricing)
68
- # before use, as a separate charge is incurred for each feature performed
69
- # on an image.
70
- #
71
- # Cloud Vision sets upper limits on file size as well as on the total
72
- # combined size of all images in a request. Reducing your file size can
73
- # significantly improve throughput; however, be careful not to reduce
74
- # image quality in the process. See [Best Practices - Image
75
- # Sizing](https://cloud.google.com/vision/docs/image-best-practices#image_sizing)
76
- # for current file size limits.
77
- #
78
- # See {Project#annotate} for requests that do not involve multiple feature
79
- # configurations.
80
- #
81
- # @see https://cloud.google.com/vision/docs/requests-and-responses Cloud
82
- # Vision API Requests and Responses
83
- # @see https://cloud.google.com/vision/reference/rest/v1/images/annotate#AnnotateImageRequest
84
- # AnnotateImageRequest
85
- # @see https://cloud.google.com/vision/docs/pricing Cloud Vision Pricing
86
- #
87
- # @param [Image, Object] images The image or images to annotate. This can
88
- # be an {Image} instance, or any other type that converts to an {Image}.
89
- # See {#image} for details.
90
- # @param [Boolean, Integer] faces Whether to perform the facial detection
91
- # feature. The maximum number of results is configured in
92
- # {Gcloud::Vision.default_max_faces}, or may be provided here. Optional.
93
- # @param [Boolean, Integer] landmarks Whether to perform the landmark
94
- # detection feature. The maximum number of results is configured in
95
- # {Gcloud::Vision.default_max_landmarks}, or may be provided here.
96
- # Optional.
97
- # @param [Boolean, Integer] logos Whether to perform the logo detection
98
- # feature. The maximum number of results is configured in
99
- # {Gcloud::Vision.default_max_logos}, or may be provided here. Optional.
100
- # @param [Boolean, Integer] labels Whether to perform the label detection
101
- # feature. The maximum number of results is configured in
102
- # {Gcloud::Vision.default_max_labels}, or may be provided here.
103
- # Optional.
104
- # @param [Boolean] text Whether to perform the text (OCR) feature.
105
- # Optional.
106
- # @param [Boolean] safe_search Whether to perform the safe search feature.
107
- # Optional.
108
- # @param [Boolean] properties Whether to perform the image properties
109
- # feature (currently, the image's dominant colors.) Optional.
110
- #
111
- # @return [Annotation, Array<Annotation>] The results for all image
112
- # detections, returned as a single {Annotation} instance for one image,
113
- # or as an array of {Annotation} instances, one per image, for multiple
114
- # images.
115
- #
116
- # @example
117
- # require "gcloud"
118
- #
119
- # gcloud = Gcloud.new
120
- # vision = gcloud.vision
121
- #
122
- # face_image = vision.image "path/to/face.jpg"
123
- # landmark_image = vision.image "path/to/landmark.jpg"
124
- # text_image = vision.image "path/to/text.png"
125
- #
126
- # annotations = vision.annotate do |annotate|
127
- # annotate.annotate face_image, faces: true, labels: true
128
- # annotate.annotate landmark_image, landmarks: true
129
- # annotate.annotate text_image, text: true
130
- # end
131
- #
132
- # annotations[0].faces.count #=> 1
133
- # annotations[0].labels.count #=> 4
134
- # annotations[1].landmarks.count #=> 1
135
- # annotations[2].text.words.count #=> 28
136
- #
137
- def annotate *images, faces: false, landmarks: false, logos: false,
138
- labels: false, text: false, safe_search: false,
139
- properties: false
140
- add_requests(images, faces, landmarks, logos, labels, text,
141
- safe_search, properties)
142
- end
143
-
144
- protected
145
-
146
- def image source
147
- return source if source.is_a? Image
148
- Image.from_source source, @project
149
- end
150
-
151
- def add_requests images, faces, landmarks, logos, labels, text,
152
- safe_search, properties
153
- features = annotate_features(faces, landmarks, logos, labels, text,
154
- safe_search, properties)
155
-
156
- Array(images).flatten.each do |img|
157
- i = image(img)
158
- @requests << Google::Apis::VisionV1::AnnotateImageRequest.new(
159
- image: i.to_gapi,
160
- features: features,
161
- imageContext: i.context.to_gapi
162
- )
163
- end
164
- end
165
-
166
- def annotate_features faces, landmarks, logos, labels, text,
167
- safe_search, properties
168
- return default_features if default_features?(
169
- faces, landmarks, logos, labels, text, safe_search, properties)
170
-
171
- faces, landmarks, logos, labels = validate_max_values(
172
- faces, landmarks, logos, labels)
173
-
174
- f = []
175
- f << feature("FACE_DETECTION", faces) unless faces.zero?
176
- f << feature("LANDMARK_DETECTION", landmarks) unless landmarks.zero?
177
- f << feature("LOGO_DETECTION", logos) unless logos.zero?
178
- f << feature("LABEL_DETECTION", labels) unless labels.zero?
179
- f << feature("TEXT_DETECTION", 1) if text
180
- f << feature("SAFE_SEARCH_DETECTION", 1) if safe_search
181
- f << feature("IMAGE_PROPERTIES", 1) if properties
182
- f
183
- end
184
-
185
- def feature type, max_results
186
- Google::Apis::VisionV1::Feature.new type: type, max_results: max_results
187
- end
188
-
189
- def default_features? faces, landmarks, logos, labels, text,
190
- safe_search, properties
191
- faces == false && landmarks == false && logos == false &&
192
- labels == false && text == false && safe_search == false &&
193
- properties == false
194
- end
195
-
196
- def default_features
197
- [
198
- feature("FACE_DETECTION", Gcloud::Vision.default_max_faces),
199
- feature("LANDMARK_DETECTION", Gcloud::Vision.default_max_landmarks),
200
- feature("LOGO_DETECTION", Gcloud::Vision.default_max_logos),
201
- feature("LABEL_DETECTION", Gcloud::Vision.default_max_labels),
202
- feature("TEXT_DETECTION", 1),
203
- feature("SAFE_SEARCH_DETECTION", 1),
204
- feature("IMAGE_PROPERTIES", 1)
205
- ]
206
- end
207
-
208
- def validate_max_values faces, landmarks, logos, labels
209
- faces = validate_max_value faces, Gcloud::Vision.default_max_faces
210
- landmarks = validate_max_value landmarks,
211
- Gcloud::Vision.default_max_landmarks
212
- logos = validate_max_value logos, Gcloud::Vision.default_max_logos
213
- labels = validate_max_value labels, Gcloud::Vision.default_max_labels
214
- [faces, landmarks, logos, labels]
215
- end
216
-
217
- def validate_max_value value, default_value
218
- return value.to_int if value.respond_to? :to_int
219
- return default_value if value
220
- 0 # not a number, not a truthy value
221
- end
222
- end
223
- end
224
- end
@@ -1,455 +0,0 @@
1
- # Copyright 2016 Google Inc. All rights reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
-
16
- require "gcloud/vision/annotation/face"
17
- require "gcloud/vision/annotation/entity"
18
- require "gcloud/vision/annotation/text"
19
- require "gcloud/vision/annotation/safe_search"
20
- require "gcloud/vision/annotation/properties"
21
-
22
- module Gcloud
23
- module Vision
24
- ##
25
- # # Annotation
26
- #
27
- # The results of all requested image annotations.
28
- #
29
- # See {Project#annotate} and {Image}.
30
- #
31
- # @example
32
- # require "gcloud"
33
- #
34
- # gcloud = Gcloud.new
35
- # vision = gcloud.vision
36
- # image = vision.image "path/to/face.jpg"
37
- #
38
- # annotation = vision.annotate image, faces: true, labels: true
39
- # annotation.faces.count #=> 1
40
- # annotation.labels.count #=> 4
41
- # annotation.text #=> nil
42
- #
43
- class Annotation
44
- ##
45
- # @private The AnnotateImageResponse Google API Client object.
46
- attr_accessor :gapi
47
-
48
- ##
49
- # @private Creates a new Annotation instance.
50
- def initialize
51
- @gapi = nil
52
- end
53
-
54
- ##
55
- # The results of face detection.
56
- #
57
- # @return [Array<Face>]
58
- #
59
- # @example
60
- # require "gcloud"
61
- #
62
- # gcloud = Gcloud.new
63
- # vision = gcloud.vision
64
- # image = vision.image "path/to/face.jpg"
65
- #
66
- # annotation = vision.annotate image, faces: true
67
- # annotation.faces.count #=> 1
68
- # face = annotation.faces.first
69
- #
70
- def faces
71
- @faces ||= Array(@gapi.face_annotations).map do |fa|
72
- Face.from_gapi fa
73
- end
74
- end
75
-
76
- ##
77
- # The first face result, if there is one.
78
- #
79
- # @return [Face]
80
- #
81
- # @example
82
- # require "gcloud"
83
- #
84
- # gcloud = Gcloud.new
85
- # vision = gcloud.vision
86
- # image = vision.image "path/to/face.jpg"
87
- #
88
- # annotation = vision.annotate image, faces: 1
89
- # face = annotation.face
90
- #
91
- def face
92
- faces.first
93
- end
94
-
95
- ##
96
- # Whether there is at least one result from face detection.
97
- #
98
- # @return [Boolean]
99
- #
100
- # @example
101
- # require "gcloud"
102
- #
103
- # gcloud = Gcloud.new
104
- # vision = gcloud.vision
105
- # image = vision.image "path/to/face.jpg"
106
- #
107
- # annotation = vision.annotate image, faces: 1
108
- # annotation.face? #=> true
109
- #
110
- def face?
111
- faces.count > 0
112
- end
113
-
114
- ##
115
- # The results of landmark detection.
116
- #
117
- # @return [Array<Entity>]
118
- #
119
- # @example
120
- # require "gcloud"
121
- #
122
- # gcloud = Gcloud.new
123
- # vision = gcloud.vision
124
- # image = vision.image "path/to/landmark.jpg"
125
- #
126
- # annotation = vision.annotate image, landmarks: 1
127
- # annotation.landmarks.count #=> 1
128
- # landmark = annotation.landmarks.first
129
- #
130
- def landmarks
131
- @landmarks ||= Array(@gapi.landmark_annotations).map do |lm|
132
- Entity.from_gapi lm
133
- end
134
- end
135
-
136
- ##
137
- # The first landmark result, if there is one.
138
- #
139
- # @return [Entity]
140
- #
141
- # @example
142
- # require "gcloud"
143
- #
144
- # gcloud = Gcloud.new
145
- # vision = gcloud.vision
146
- # image = vision.image "path/to/landmark.jpg"
147
- #
148
- # annotation = vision.annotate image, landmarks: 1
149
- # landmark = annotation.landmark
150
- #
151
- def landmark
152
- landmarks.first
153
- end
154
-
155
- ##
156
- # Whether there is at least one result from landmark detection.
157
- # detection.
158
- #
159
- # @return [Boolean]
160
- #
161
- # @example
162
- # require "gcloud"
163
- #
164
- # gcloud = Gcloud.new
165
- # vision = gcloud.vision
166
- # image = vision.image "path/to/landmark.jpg"
167
- #
168
- # annotation = vision.annotate image, landmarks: 1
169
- # annotation.landmark? #=> true
170
- #
171
- def landmark?
172
- landmarks.count > 0
173
- end
174
-
175
- ##
176
- # The results of logo detection.
177
- #
178
- # @return [Array<Entity>]
179
- #
180
- # @example
181
- # require "gcloud"
182
- #
183
- # gcloud = Gcloud.new
184
- # vision = gcloud.vision
185
- # image = vision.image "path/to/logo.jpg"
186
- #
187
- # annotation = vision.annotate image, logos: 1
188
- # annotation.logos.count #=> 1
189
- # logo = annotation.logos.first
190
- #
191
- def logos
192
- @logos ||= Array(@gapi.logo_annotations).map do |lg|
193
- Entity.from_gapi lg
194
- end
195
- end
196
-
197
- ##
198
- # The first logo result, if there is one.
199
- #
200
- # @return [Entity]
201
- #
202
- # @example
203
- # require "gcloud"
204
- #
205
- # gcloud = Gcloud.new
206
- # vision = gcloud.vision
207
- # image = vision.image "path/to/logo.jpg"
208
- #
209
- # annotation = vision.annotate image, logos: 1
210
- # logo = annotation.logo
211
- #
212
- def logo
213
- logos.first
214
- end
215
-
216
- ##
217
- # Whether there is at least one result from logo detection.
218
- # detection.
219
- #
220
- # @return [Boolean]
221
- #
222
- # @example
223
- # require "gcloud"
224
- #
225
- # gcloud = Gcloud.new
226
- # vision = gcloud.vision
227
- # image = vision.image "path/to/logo.jpg"
228
- #
229
- # annotation = vision.annotate image, logos: 1
230
- # annotation.logo? #=> true
231
- #
232
- def logo?
233
- logos.count > 0
234
- end
235
-
236
- ##
237
- # The results of label detection.
238
- #
239
- # @return [Array<Entity>]
240
- #
241
- # @example
242
- # require "gcloud"
243
- #
244
- # gcloud = Gcloud.new
245
- # vision = gcloud.vision
246
- # image = vision.image "path/to/face.jpg"
247
- #
248
- # annotation = vision.annotate image, labels: 1
249
- # annotation.labels.count #=> 1
250
- # label = annotation.labels.first
251
- #
252
- def labels
253
- @labels ||= Array(@gapi.label_annotations).map do |lb|
254
- Entity.from_gapi lb
255
- end
256
- end
257
-
258
- ##
259
- # The first label result, if there is one.
260
- #
261
- # @return [Entity]
262
- #
263
- # @example
264
- # require "gcloud"
265
- #
266
- # gcloud = Gcloud.new
267
- # vision = gcloud.vision
268
- # image = vision.image "path/to/face.jpg"
269
- #
270
- # annotation = vision.annotate image, labels: 1
271
- # label = annotation.label
272
- #
273
- def label
274
- labels.first
275
- end
276
-
277
- ##
278
- # Whether there is at least one result from label detection.
279
- # detection.
280
- #
281
- # @return [Boolean]
282
- #
283
- # @example
284
- # require "gcloud"
285
- #
286
- # gcloud = Gcloud.new
287
- # vision = gcloud.vision
288
- # image = vision.image "path/to/face.jpg"
289
- #
290
- # annotation = vision.annotate image, labels: 1
291
- # annotation.label? #=> true
292
- #
293
- def label?
294
- labels.count > 0
295
- end
296
-
297
- ##
298
- # The results of text (OCR) detection.
299
- #
300
- # @return [Text]
301
- #
302
- # @example
303
- # require "gcloud"
304
- #
305
- # gcloud = Gcloud.new
306
- # vision = gcloud.vision
307
- # image = vision.image "path/to/text.png"
308
- #
309
- # annotation = vision.annotate image, text: true
310
- # text = annotation.text
311
- #
312
- def text
313
- @text ||= Text.from_gapi(@gapi.text_annotations)
314
- end
315
-
316
- ##
317
- # Whether there is a result from text (OCR) detection.
318
- #
319
- # @return [Boolean]
320
- #
321
- # @example
322
- # require "gcloud"
323
- #
324
- # gcloud = Gcloud.new
325
- # vision = gcloud.vision
326
- # image = vision.image "path/to/text.png"
327
- #
328
- # annotation = vision.annotate image, text: true
329
- # annotation.text? #=> true
330
- #
331
- def text?
332
- !text.nil?
333
- end
334
-
335
- ##
336
- # The results of safe_search detection.
337
- #
338
- # @return [SafeSearch]
339
- #
340
- # @example
341
- # require "gcloud"
342
- #
343
- # gcloud = Gcloud.new
344
- # vision = gcloud.vision
345
- # image = vision.image "path/to/face.jpg"
346
- #
347
- # annotation = vision.annotate image, safe_search: true
348
- # safe_search = annotation.safe_search
349
- #
350
- def safe_search
351
- return nil unless @gapi.safe_search_annotation
352
- @safe_search ||= SafeSearch.from_gapi(@gapi.safe_search_annotation)
353
- end
354
-
355
- ##
356
- # Whether there is a result for safe_search detection.
357
- # detection.
358
- #
359
- # @return [Boolean]
360
- #
361
- # @example
362
- # require "gcloud"
363
- #
364
- # gcloud = Gcloud.new
365
- # vision = gcloud.vision
366
- # image = vision.image "path/to/face.jpg"
367
- #
368
- # annotation = vision.annotate image, safe_search: true
369
- # annotation.safe_search? #=> true
370
- #
371
- def safe_search?
372
- !safe_search.nil?
373
- end
374
-
375
- ##
376
- # The results of properties detection.
377
- #
378
- # @return [Properties]
379
- #
380
- # @example
381
- # require "gcloud"
382
- #
383
- # gcloud = Gcloud.new
384
- # vision = gcloud.vision
385
- # image = vision.image "path/to/face.jpg"
386
- #
387
- # annotation = vision.annotate image, properties: true
388
- # properties = annotation.properties
389
- #
390
- def properties
391
- return nil unless @gapi.image_properties_annotation
392
- @properties ||= Properties.from_gapi(@gapi.image_properties_annotation)
393
- end
394
-
395
- ##
396
- # Whether there is a result for properties detection.
397
- #
398
- # @return [Boolean]
399
- #
400
- # @example
401
- # require "gcloud"
402
- #
403
- # gcloud = Gcloud.new
404
- # vision = gcloud.vision
405
- # image = vision.image "path/to/face.jpg"
406
- #
407
- # annotation = vision.annotate image, properties: true
408
- # annotation.properties? #=> true
409
- #
410
- def properties?
411
- !properties.nil?
412
- end
413
-
414
- ##
415
- # Deeply converts object to a hash. All keys will be symbolized.
416
- #
417
- # @return [Hash]
418
- #
419
- def to_h
420
- to_hash
421
- end
422
-
423
- ##
424
- # Deeply converts object to a hash. All keys will be symbolized.
425
- #
426
- # @return [Hash]
427
- #
428
- def to_hash
429
- { faces: faces.map(&:to_h), landmarks: landmarks.map(&:to_h),
430
- logos: logos.map(&:to_h), labels: labels.map(&:to_h),
431
- text: text.map(&:to_h), safe_search: safe_search.to_h,
432
- properties: properties.to_h }
433
- end
434
-
435
- # @private
436
- def to_s
437
- tmplt = "(faces: %i, landmarks: %i, logos: %i, labels: %i, text: %s," \
438
- " safe_search: %s, properties: %s)"
439
- format tmplt, faces.count, landmarks.count, logos.count, labels.count,
440
- text?, safe_search?, properties?
441
- end
442
-
443
- # @private
444
- def inspect
445
- "#<#{self.class.name} #{self}>"
446
- end
447
-
448
- ##
449
- # @private New Annotation from a Google API Client object.
450
- def self.from_gapi gapi
451
- new.tap { |a| a.instance_variable_set :@gapi, gapi }
452
- end
453
- end
454
- end
455
- end