Class: TwentyBN::Image

Inherits:
Object
  • Object
show all
Defined in:
lib/twentybn/image.rb

Instance Method Summary collapse

Constructor Details

#initialize(image) ⇒ Image

Returns a new instance of Image.



17
18
19
# File 'lib/twentybn/image.rb', line 17

def initialize(image)
  @image = image
end

Instance Method Details

#api_connectionObject



59
60
61
62
63
64
65
# 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) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
# 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_base64Object



55
56
57
# File 'lib/twentybn/image.rb', line 55

def image_base64
  Base64.strict_encode64(IO.binread(@image))
end

#tag(model = :objects) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 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