Sha256: 5c2c647c98c46a46a323f96cdbab6c5e47c92b6c20d3417cfee47d03f2afd7e2
Contents?: true
Size: 1.84 KB
Versions: 1
Compression:
Stored size: 1.84 KB
Contents
require "json" require "net/http" require "uri" require "openssl" require "base64" module Embulk module Filter class GoogleVisionApi < FilterPlugin class VisionClient ENDPOINT = "https://vision.googleapis.com/v1/images:annotate" def initialize(features:, google_api_key:) uri = URI.parse("#{ENDPOINT}?key=#{google_api_key}") @http = Net::HTTP.new(uri.host, uri.port) @http.use_ssl = true @http.verify_mode = OpenSSL::SSL::VERIFY_NONE @post = Net::HTTP::Post.new(uri.request_uri, initheader = {'Content-Type' =>'application/json'}) @features = features end def request(images) @post.body = get_body(images).to_json Embulk.logger.debug "request body => #{@post.body}" @http.start do |h| response = h.request(@post) JSON.parse(response.body) end end private def get_body(images) { requests: get_requests(images) } end def get_requests(images) images.map do |image_path| get_request(image_path) end end def get_request(image_path) request = { image: Hash.new{|h,k| h[k] = {}}, features: @features } if image_path =~ /gs\:\/\// request[:image][:source][:gcs_image_uri] = image_path else image_body = get_image_body(image_path) request[:image][:content] = Base64.encode64(image_body) end request end def get_image_body(image_path) if image_path =~ /https?\:\/\// Net::HTTP.get_response(URI.parse(image_path)).body rescue "" else File.read(image_path) rescue "" end end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
embulk-filter-google_vision_api-0.2.1 | lib/embulk/filter/google_vision_api/vision_client.rb |