Turn raw text and image data into human insight

See For Yourself

Machine learning can be intimidating. At indico, we make it easy.

Explore the demo below to better understand the power of our predictive models —

use the code toggle on the right to see how easy it is to integrate.

  • Sentiment Analysis
  • Text Tags
  • Political Analysis
  • Language Detection
  • Emotion Recognition
  • Image Features
/

Text Tags

Figure out what people are talking about. Our Text Tags API automatically determines which topics a piece of text relates to.

Most likely tags

pets
sports
relationships

 

require 'indico'
Indico.api_key = 'YOUR_API_KEY'

puts(Indico.text_tags('This coconut green tea is amazing!'))
# { "food"=>0.3713687833244494, "cars"=>0.0037924017632370586, ...}
import indicoio
indicoio.config.api_key = 'YOUR_API_KEY'

tag_dict = indicoio.text_tags("Iran Agrees to Nuclear Limits, But Key Issues Are Unresolved")

print(sorted(tag_dict.keys(), key=lambda x: tag_dict[x], reverse=True)[:5])
# [u'investing', u'startups', u'business', u'entrepreneur', u'humor']

print(tag_dict)
# {u'fashion': 0.011450126534350728, u'art': 0.00358698972755963, u'energy': 0.005537894035625527, ...}
import io.indico.api.Indico;
import io.indico.api.exception.IndicoException;
import java.util.List;
import java.util.Arrays;
import java.util.Map;

public static void main(String[] args) throws IndicoException
{
  Indico.setApiKey('YOUR_API_KEY');
}

public static void main(String[] args) throws IndicoException
{
  Map<String, Double> result = Indico.text().textTags("Blog posts about Android tech make better journalism than most news outlets.");
  List<String> textData = Arrays.asList("Iran agress to nuclear limits, but key issues are unresolved.","We're supposed to get up to 24 inches of snow in the storm.");
  List<Map<String, Double>> batchResults = Indico.text().batchTextTags(textData);
}
require(__DIR__ . '/vendor/autoload.php');
use \IndicoIo\IndicoIo as IndicoIo;

IndicoIo::$config['api_key'] = 'YOUR_API_KEY';

print_r( IndicoIo::text_tags('Iran Agrees to Nuclear Limits, But Key Issues Are Unresolved'));
// Array ( [food]: 0.3713687833244494, [cars]: 0.0037924017632370586, ...)
var indico = require('indico.io');
indico.apiKey = 'YOUR_API_KEY';

indico.textTags("This coconut green tea is amazing.")
  .then(function(res) {
    console.log(res);
  }).catch(function(err) {
    console.warn(err);
  });
// {u'food': 0.3713687833244494, u'cars': 0.0037924017632370586, ...}
library(indicoio)

print(text_tags("Iran Agrees to Nuclear Limits, But Key Issues Are Unresolved", api_key 'YOUR_API_KEY'))

Sentiment Analysis

Do they love it? Our Sentiment Analysis API automatically determines whether a document is positive or negative.

Positivity

50%

 

require 'indico'
Indico.api_key = 'YOUR_API_KEY'

puts(Indico.sentiment("indico is so easy to use!"))
# {"Sentiment"=>0.900475156188022}
import indicoio
indicoio.config.api_key = 'YOUR_API_KEY'

print(indicoio.sentiment('indico is so easy to use!'))
# 0.07062467665597527
import io.indico.api.Indico;
import io.indico.api.exception.IndicoException;
import java.util.List;
import java.util.Arrays;
import java.util.Map;

public static void main(String[] args) throws IndicoException
{
  Indico.setApiKey('YOUR_API_KEY');
}

public static void main(String[] args) throws IndicoException
{
  doubled result = Indico.text().sentiment("Best day ever.");
  List<String> textData = Arrays.asList("Best day ever",
                                        "Worst day ever");
  List<Double> batchResults = Indico.text().batchSentiment(textData);
}
require(__DIR__ . '/vendor/autoload.php');
use \IndicoIo\IndicoIo as IndicoIo;

IndicoIo::$config['api_key'] = 'YOUR_API_KEY';

print_r(IndicoIo::sentiment("indico is so easy to use!"));

// Array ( [Sentiment] => 0.8254603561191486 )
var indico = require('indico.io');
indico.apiKey = 'YOUR_API_KEY';

indico.sentiment("This is a decent example")
  .then(function(res) {
    console.log(res);
  }).catch(function(err) {
    console.warn(err);
  });
// {u'Sentiment': 0.6072520629364269}
library(indicoio)

print(sentiment("indico is so easy to use!", api_key 'YOUR_API_KEY'))

Political Analysis

Politics are complicated. Our Political Analysis API will automatically recognize the political alignment of a body of text.

 

Most likely parties

Libertarian

45%

 

Conservative

37%

 

Liberal

13%

 

require 'indico'
Indico.api_key = 'YOUR_API_KEY'

puts(Indico.political("Those who surrender freedom for security will not have, nor do they deserve, either one."))
# {"Libertarian"=>0.47740164630834825, "Liberal"=>0.16617097211030055, "Green"=>0.08454409540443657, "Conservative"=>0.2718832861769146}
import indicoio
indicoio.config.api_key = 'YOUR_API_KEY'

print(indicoio.political("Those who surrender freedom for security will not have, nor do they deserve, either one."))
# {u'Libertarian': 0.47740164630834825, u'Green': 0.08454409540443657, u'Liberal': 0.16617097211030055, u'Conservative': 0.2718832861769146}
import io.indico.api.Indico;
import io.indico.api.exception.IndicoException;
import java.util.List;
import java.util.Arrays;
import java.util.Map;

public static void main(String[] args) throws IndicoException
{
  Indico.setApiKey('YOUR_API_KEY');
}

public static void main(String[] args) throws IndicoException
{
  Map<String, Double> result = Indico.text().politicalSentiment("Quis custodiet ipsos custodes");
  List<String> textData = Arrays.asList("Quis custodiet ipsos custodes",
                                        "Clearly an English sentence.");
  List<Map<String, Double>> batchResults = Indico.text().batchPoliticalSentiment(textData);
}
require(__DIR__ . '/vendor/autoload.php');
use \IndicoIo\IndicoIo as IndicoIo;

IndicoIo::$config['api_key'] = 'YOUR_API_KEY';

print_r(IndicoIo::political("Those who surrender freedom for security will not have, nor do they deserve, either one."));

// Array ( [Libertarian] => 0.29189946558241 [Liberal] => 0.010490688696418 [Green] => 0.0110258933524 [Conservative] => 0.68658395236877 )
var indico = require('indico.io');
indico.apiKey = 'YOUR_API_KEY';

indico.political("Those who surrender freedom for security will not have, nor do they deserve, either one.")
  .then(function(res) {
    console.log(res);
  }).catch(function(err) {
    console.warn(err);
  });
// { Libertarian: 0.47740164630834825, Liberal: 0.16617097211030055, Green: 0.08454409540443657, Conservative: 0.2718832861769146}
library(indicoio)

print(political("Those who surrender freedom for security will not have, nor do they deserve, either one.", api_key 'YOUR_API_KEY'))

Language Detection

Websites usually have language headers, but for finding multi-lingual users, or filtering raw text, you're out of luck. Our Language Detection API will take care of that for you.

 

Most likely languages

French

70%

 

Lithuanian

18%

 

Portuguese

11%

 

require 'indico'
Indico.api_key = 'YOUR_API_KEY'

puts(Indico.language('Quis custodiet ipsos custodes'))
# {"Swedish"=>0.00033330636691921914, "Vietnamese"=>0.0002686116137658802, ... "Latin"=>0.8230599921384231, ...}
import indicoio
indicoio.config.api_key = 'YOUR_API_KEY'

print(indicoio.language('Quis custodiet ipsos custodes'))
# {u'Swedish': 0.00033330636691921914, u'Vietnamese': 0.0002686116137658802, ... u'Latin': 0.8230599921384231, ... }
import io.indico.api.Indico;
import io.indico.api.exception.IndicoException;
import java.util.List;
import java.util.Arrays;
import java.util.Map;

public static void main(String[] args) throws IndicoException
{
  Indico.setApiKey('YOUR_API_KEY');
}

public static void main(String[] args) throws IndicoException
{
  Map<String, Double> result = Indico.text().language("Quis custodiet ipsos custodes");
  List<String> textData = Arrays.asList("Quis custodiet ipsos custodes",
                                        "Clearly an English sentence.");
  List<Map<String, Double>> batchResults = Indico.text().batchLanguage(textData);
}
require(__DIR__ . '/vendor/autoload.php');
use \IndicoIo\IndicoIo as IndicoIo;

IndicoIo::$config['api_key'] = 'YOUR_API_KEY';

print_r( IndicoIo::language('una giornata molto buona auguro') );

// Array ( [Swedish] => 0.00011552035349677 [Vietnamese] => 0.0010439073406634 ... [Italian] => 0.91248953273899 ... )
var indico = require('indico.io');
indico.apiKey = 'YOUR_API_KEY';

indico.language("Quis custodiet ipsos custodes")
  .then(function(res) {
    console.log(res);
  }).catch(function(err) {
    console.warn(err);
  });
// {u'Swedish': 0.00033330636691921914, u'Lithuanian': 0.007328693814717631, ... u'Latin': 0.8230599921384231, ... }
library(indicoio)

print(language("Monday: Delightful with mostly sunny skies.
                        Highs in the low 70s.", api_key 'YOUR_API_KEY'))

Emotion Recognition

This powerful API reads the emotional state of faces, allowing you to get instant feedback, like automatically processing the results of your ad experiment. Click on the faces below to see how some of our team members are feeling today!

·
·
·
55%

happy

7%

surprised

16%

neutral

4%

sad

11%

fearful

8%

angry

 

require 'indico'
require 'base64'

Indico.api_key = 'YOUR_API_KEY'

base64data = Base64.encode64(File.open("filepath", "rb").read)
puts(Indico.fer(base64data))
# {"Angry"=>0.08871302945302893, "Sad"=>0.39368196823094165, "Neutral"=>0.19148772584016358, "Surprise"=>0.03452161064102057, "Fear"=>0.17661406590357706, "Happy"=>0.11498159993126851}
import indicoio

indicoio.config.api_key = 'YOUR_API_KEY'

print(indicoio.fer(filepath))
# {u'Angry': 0.08843749137458341, u'Sad': 0.39091163159204684, u'Neutral': 0.1947947999669361, u'Surprise': 0.03443785859010413, u'Fear': 0.17574534848440568, u'Happy': 0.11567286999192382}
import io.indico.api.Indico;
import io.indico.api.exception.IndicoException;
import java.util.List;
import java.util.Arrays;
import java.util.Map;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;

public static void main(String[] args) throws IndicoException
{
  Indico.setApiKey('YOUR_API_KEY');
}

public static void main(String[] args) throws IndicoException, IOException
{
  BufferedImage img = ImageIO.read(exampleImage);
  Map<String, Double> result = Indico.image().emotionalState(img);
  List<BufferedImage> imageData = Arrays.asList(img, img);
  List<Map<String, Double>> batchResults = Indico.image().batchEmotionalState(imageData);
}
require(__DIR__ . '/vendor/autoload.php');
use \IndicoIo\IndicoIo as IndicoIo;

IndicoIo::$config['api_key'] = 'YOUR_API_KEY';

print_r(IndicoIo::fer($b64data));

$batch = array($b64data, $b64data);
print_r(IndicoIo::batch_fer($batch));
// method 1
-(IQURLConnection*)facialEmotionRecognitionWithImage:(UIImage*)image completionHandler:(IQDictionaryCompletionBlock)completionHandler;

// method 2 (if you'd like to resize the image)
-(IQURLConnection*)facialEmotionRecognitionWithImage:(UIImage*)image resizeToSize:(CGSize)size completionHandler:(IQDictionaryCompletionBlock)completionHandler;

// usage
[[IndicoAPI service] facialEmotionRecognitionWithImage:[UIImage imageNamed:@"testImage"] completionHandler:^(NSDictionary *result, NSError *error) {
if (result) {
    //Convert result to model object.
    ICEmotionObject *object = [[ICEmotionObject alloc] initWithDictionary:result[kICResultsKey]];
}
else if (error) {
    //Error handling code goes here
}
}];
var indico = require('indico.io');
var fs = require('fs');
indico.apiKey = 'YOUR_API_KEY';

fs.readFile(filename, function(err, data) {
  base64data = new Buffer(data).toString('base64');
});

indico.fer(base64data)
  .then(function(res) {
    console.log(res);
  }).catch(function(err) {
    console.warn(err);
  });
// {Angry: 0.08843749137458341, Sad: 0.39091163159204684, Neutral: 0.1947947999669361, Surprise: 0.03443785859010413, Fear: 0.17574534848440568, Happy: 0.11567286999192382}
library(indicoio)
library(base64enc)

img <- file(filepath, "rb", raw=TRUE)
data <- base64encode(img)
print(face_emotion(data, api_key 'YOUR_API_KEY'))

Image Features

The Image Features API is used as a building block for other models with more applications. One use case could be to find images that have similar characteristics to one another — click any of the images below to rearrange the group based on how closely each picture resembles the one you chose. Reads left to right in order of decreasing similarity.

·
·
·
require 'indico'
require 'base64'

Indico.api_key = 'YOUR_API_KEY'

base64data = Base64.encode64(File.open("filepath", "rb").read)
puts(Indico.image_features(base64data))
# [0.0, 0.0, 0.0, 3.045085906982422, ... 0.12163206934928894]
import indicoio

indicoio.config.api_key = 'YOUR_API_KEY'

print(indicoio.image_features(filepath))
# [0.0, -0.02568680526917187, ..., 3.0342637531932777]
import io.indico.api.Indico;
import io.indico.api.exception.IndicoException;
import java.util.List;
import java.util.Arrays;
import java.util.Map;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;

public static void main(String[] args) throws IndicoException
{
  Indico.setApiKey('YOUR_API_KEY');
}

public static void main(String[] args) throws IndicoException, IOException
{
  BufferedImage img = ImageIO.read(exampleImage);
  List<Double> result = Indico.image().imageFeatures(img);
  List<BufferedImage> imageData = Arrays.asList(img, img);
  List<List<Double>> batchResults = Indico.image().batchImageFeatures(imageData);
}
require(__DIR__ . '/vendor/autoload.php');
use \IndicoIo\IndicoIo as IndicoIo;

IndicoIo::$config['api_key'] = 'YOUR_API_KEY';

print_r(IndicoIo::image_features($b64data));
// method 1 (no resize)
-(IQURLConnection*)imageFeaturesWithImage:(UIImage*)image completionHandler:(IQDictionaryCompletionBlock)completionHandler;

// method 2 (with resize)
-(IQURLConnection*)imageFeaturesWithImage:(UIImage*)image resizeToSize:(CGSize)size completionHandler:(IQDictionaryCompletionBlock)completionHandler;

// usage
[[IndicoAPI service] imageFeaturesWithImage:[UIImage imageNamed:@"testImage"] completionHandler:^(NSDictionary *result, NSError *error) {
if (result) {
    //Logic handling code goes here.
    NSLog(@"%@",result);
}
else if (error) {
    //Error handling code goes here
}
}];
var indico = require('indico.io');
var fs = require('fs');
indico.apiKey = 'YOUR_API_KEY';

fs.readFile(filename, function(err, data) {
  base64data = new Buffer(data).toString('base64');
});

indico.imageFeatures(base64data)
  .then(function(res) {
    console.log(res);
  }).catch(function(err) {
    console.warn(err);
  });
// [0.0, -0.02568680526917187, ... , 3.0342637531932777]
library(indicoio)
library(base64enc)

img <- file(filepath, "rb", raw=TRUE)
data <- base64encode(img)
print(image_features(pixel_array, api_key 'YOUR_API_KEY'))

Get Started

Get started with our APIs in just a few lines of code.
Signing up takes less than a minute!