ClarifaiRuby
Made with
This gem is an unofficial Ruby client for Clarifai's image recognition API.
The Clarifai API offers image and video recognition as a service. Whether you have one image or billions, you are only steps away from using artificial intelligence to 'see' what's inside your visual content.
Table of Contents
Prerequisites
Before using this gem, make sure to create an account for Clarifai and create an application to obtain a client id and client secret.
Installation
Add this line to your application's Gemfile:
gem 'clarifai_ruby'
And then execute:
$ bundle
Or install it yourself as:
$ gem install clarifai_ruby
Configuration
To configure the gem, stick this block:
ClarifaiRuby.configure do |config|
config.base_url = "https://api.clarifai.com"
config.version_path = "/v1"
config.client_id = "<CLIENT_ID>"
config.client_secret = "<CLIENT_SECRET>"
end
inside of your initializer file.
Usage
This gem can make 4 types of requests (Info, Tag, Color, Feedback) using 4 corresponding request objects:
InfoRequest
TagRequest
ColorRequest
FeedbackRequest
And each request will result in a corresponding response object that will have access to each response's data:
InfoResponse
TagResponse
ColorResponse
FeedbackResponse
InfoRequest
To make an InfoRequest
:
info = ClarifaiRuby::InfoRequest.new.get
#=> ClarifaiRuby::InfoResponse
info.status_code
#=> "OK"
TagRequest
To make a TagRequest
:
tag_response = ClarifaiRuby::TagRequest.new.get("https://samples.clarifai.com/metro-north.jpg")
#=> #<ClarifaiRuby::TagResponse>
tag_response.tag_images
#=> [#<ClarifaiRuby::TagImage>]
# Each tag image will contain an array of Tag objects
tag_response.tag_images.first.tags
#=> [#<ClarifaiRuby::Tag>, #<ClarifaiRuby::Tag>, ...]
A TagResponse
will contain an array of TagImage
s and each TagImage
will contain an array of Tag
s
Tag
A Tag
represents each tag returned by Clarifai.
Each Tag
contains these readers:
word
- the class of the tagprob
- (short for probability) indicate how well the model believes the corresponding tag is associated with the input data.concept_id
- the corresponding concept_id
Model
You can pass in the model
(more info)
If you'd like to get tags for an image or video using a different model, you can do so by passing in a
model
parameter. If you omit this parameter, the API will use the default model for your application. You can change this on the applications page.
ClarifaiRuby::TagRequest.new.get("https://samples.clarifai.com/metro-north.jpg", model: "nsfw-v0.1")
#=> #<ClarifaiRuby::TagResponse>
As of February here are the valid models:
general-v1.3
nsfw-v0.1
weddings-v1.0
Please refer to the documentation for any possible changes to this list.
Select Classes
You can pass in select_classes
(more info)
If you'd like to get the probability of a certain tag or tags, you can specify them in the request using the
select_classes
parameter. Different tags should be comma separated.
tag_response = ClarifaiRuby::TagRequest.new.get("https://samples.clarifai.com/metro-north.jpg", select_classes: "light,sky")
#=> #<ClarifaiRuby::TagResponse>
Language
You can pass in language
(more info)
By default this API call returns tags in English. You can change this default setting on the applications page or can pass in a language parameter. If you use a language other than English, you must make sure the model you are using is
general-v1.3
.
tag_response = tag_response = ClarifaiRuby::TagRequest.new.get("https://samples.clarifai.com/metro-north.jpg", model: "general-v1.3", language: "es")
#=> #<ClarifaiRuby::TagResponse>
ColorRequest
Pending
FeedbackRequest
Pending
Known Issues
- Token Overconsumption
- Currently, every instance of any request objects generates a separate access token. We would need to change it, such that it would use one token across all request objects.
- No support for multiple files
- The
tag
endpoint can support multiple files within its request, however, due toHTTMultiParty
gem limitations.Â
- The
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/chardane/ClarifaiRuby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
License
The gem is available as open source under the terms of the MIT License.