class TwentyBN::Image

Public Class Methods

new(image) click to toggle source
# File lib/twentybn/image.rb, line 17
def initialize(image)
  @image = image
end

Public Instance Methods

api_connection() click to toggle source
# File lib/twentybn/image.rb, line 59
def api_connection
  @api_connection ||= Faraday.new(url: TwentyBN.config[:api_url]) do |faraday|
    faraday.request  :url_encoded
    faraday.response :logger
    faraday.adapter Faraday.default_adapter
  end
end
ask(question) click to toggle source
# File lib/twentybn/image.rb, line 21
def ask(question)
  response = api_connection.post do |request|
    request.headers['Content-Type'] = 'application/json'
    request.headers['X-ApiKey'] = TwentyBN.config[:api_key]
    data = {
      content: self.image_base64,
      question: question,
    }
    request.url '/v1/vqa'
    request.body = JSON.generate(data)
  end
  return JSON.parse(response.body)
end
image_base64() click to toggle source
# File lib/twentybn/image.rb, line 55
def image_base64
  Base64.strict_encode64(IO.binread(@image))
end
tag(model=:objects) click to toggle source
# File lib/twentybn/image.rb, line 35
def tag(model=:objects)
  response = api_connection.post do |request|
    request.headers['Content-Type'] = 'application/json'
    request.headers['X-ApiKey'] = TwentyBN.config[:api_key]
    data = {
      content: self.image_base64,
    }
    default_models = [:objects, :places, :categories]
    if default_models.include? model
      request.url "/v1/tag_image"
      request.params['model'] = model
    else
      request.url '/v1/custom_tag_image'
      data[:modelId] = model
    end
    request.body = JSON.generate(data)
  end
  return JSON.parse(response.body)
end