indico 0.1.6 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -16,6 +16,10 @@ Or install it yourself as:
16
16
 
17
17
  $ gem install indico
18
18
 
19
+ Documentation
20
+ ------------
21
+ Found [here](http://indico.readme.io/v1.0/docs)
22
+
19
23
  ## Usage
20
24
 
21
25
  ```ruby
@@ -41,19 +45,44 @@ Or install it yourself as:
41
45
 
42
46
  ```
43
47
 
44
- ###Local
48
+ ###Batch API Access
45
49
 
46
- When using a local version of the api you must remember to require 'indico_local' instead of 'indico'. Along the same vein, the package is then referenced as "IndicoLocal" rather than "Indico".
50
+ If you'd like to use our batch api interface, please check out the [pricing page](https://indico.io/pricing) on our website to find the right plan for you.
47
51
 
48
52
  ```ruby
49
- > require 'indico_local'
53
+ > require 'indico'
50
54
 
51
55
  => true
52
56
 
53
- > IndicoLocal.sentiment("I love using this tool!")
57
+ > data = ["I believe in capital punishment", "The president is wrong"]
58
+
59
+ => ["I believe in capital punishment", "The president is wrong"]
60
+
61
+ > Indico.batch_political(data, "username", "password")
62
+
63
+ => [ {"Libertarian"=>0.3511057701654774, "Liberal"=>0.06709112089656208, "Green"=>0.03830472376983833, "Conservative"=>0.5434983851681222}, {"Libertarian"=>0.08762905907467175, "Liberal"=>0.18965142341591298, "Green"=>0.02612359787701222, "Conservative"=>0.696595919632403}]
64
+ ````
65
+
66
+ ###Private cloud API Access
67
+
68
+ If you're looking to use indico's API for high throughput applications, please check out the [pricing page](https://indico.io/pricing) on our website to find the right plan for you.
69
+
70
+ ```ruby
71
+ > require 'indico'
72
+
73
+ => true
74
+
75
+ > data = ["I believe in capital punishment", "The president is wrong"]
76
+
77
+ => ["I believe in capital punishment", "The president is wrong"]
78
+
79
+ > Indico.batch_political(data, "username", "password", cloud)
80
+
81
+ => [ {"Libertarian"=>0.3511057701654774, "Liberal"=>0.06709112089656208, "Green"=>0.03830472376983833, "Conservative"=>0.5434983851681222}, {"Libertarian"=>0.08762905907467175, "Liberal"=>0.18965142341591298, "Green"=>0.02612359787701222, "Conservative"=>0.696595919632403}]
82
+ ````
83
+
84
+ The `cloud` parameter redirects API calls to your private cloud hosted at `[cloud].indico.domains`
54
85
 
55
- => {"Sentiment"=>0.7483253499779664}
56
- ```
57
86
 
58
87
  ## Contributing
59
88
 
data/lib/indico.rb CHANGED
@@ -8,37 +8,68 @@ module Indico
8
8
 
9
9
  HEADERS = { "Content-Type" => "application/json", "Accept" => "text/plain" }
10
10
 
11
- def self.political(test_text, api="remote")
12
- api_handler(test_text, api, "political")
11
+ def self.political(test_text, username=nil, password=nil, private_cloud=nil)
12
+ api_handler(test_text, private_cloud, "political", username, password)
13
13
  end
14
14
 
15
- def self.posneg(test_text, api="remote")
16
- api_handler(test_text, api, "sentiment")
15
+ def self.batch_political(test_text, username, password, private_cloud=nil)
16
+ api_handler(test_text, private_cloud, "political/batch", username, password)
17
+ end
18
+
19
+ def self.posneg(test_text, username=nil, password=nil, private_cloud=nil)
20
+ api_handler(test_text, private_cloud, "sentiment", username, password)
21
+ end
22
+
23
+ def self.batch_posneg(test_text, username, password, private_cloud=nil)
24
+ api_handler(test_text, private_cloud, "sentiment/batch", username, password)
17
25
  end
18
26
 
19
27
  def self.sentiment(*args)
20
28
  self.posneg(*args)
21
29
  end
22
30
 
23
- def self.language(test_text, api="remote")
24
- api_handler(test_text, api, "language")
31
+ def self.batch_sentiment(*args)
32
+ self.batch_posneg(*args)
33
+ end
34
+
35
+ def self.language(test_text, username=nil, password=nil, private_cloud=nil)
36
+ api_handler(test_text, private_cloud, "language", username, password)
37
+ end
38
+
39
+ def self.batch_language(test_text, username, password, private_cloud=nil)
40
+ api_handler(test_text, private_cloud, "language/batch", username, password)
25
41
  end
26
42
 
27
- def self.text_tags(test_text, api="remote")
28
- api_handler(test_text, api, "texttags")
43
+ def self.text_tags(test_text, username=nil, password=nil, private_cloud=nil)
44
+ api_handler(test_text, private_cloud, "texttags", username, password)
29
45
  end
30
-
31
- def self.fer(face, api="remote")
32
- api_handler(face, api, "fer")
46
+
47
+ def self.batch_text_tags(test_text, username, password, private_cloud=nil)
48
+ api_handler(test_text, private_cloud, "texttags/batch", username, password)
49
+ end
50
+
51
+ def self.fer(face, username=nil, password=nil, private_cloud=nil)
52
+ api_handler(face, private_cloud, "fer", username, password)
53
+ end
54
+
55
+ def self.batch_fer(test_text, username, password, private_cloud=nil)
56
+ api_handler(test_text, private_cloud, "fer/batch", username, password)
57
+ end
58
+
59
+ def self.facial_features(face, username=nil, password=nil, private_cloud=nil)
60
+ api_handler(face, private_cloud, "facialfeatures", username, password)
33
61
  end
34
62
 
35
- def self.facial_features(face, api="remote")
36
- api_handler(face, api, "facialfeatures")
63
+ def self.batch_facial_features(test_text, username, password, private_cloud=nil)
64
+ api_handler(test_text, private_cloud, "facialfeatures/batch", username, password)
37
65
  end
38
66
 
39
- def self.image_features(face, api="remote")
40
- api_handler(face, api, "imagefeatures")
67
+ def self.image_features(face, username=nil, password=nil, private_cloud=nil)
68
+ api_handler(face, private_cloud, "imagefeatures", username, password)
41
69
  end
42
70
 
71
+ def self.batch_image_features(test_text, username, password, private_cloud=nil)
72
+ api_handler(test_text, private_cloud, "imagefeatures/batch", username, password)
73
+ end
43
74
 
44
75
  end
data/lib/indico/helper.rb CHANGED
@@ -1,22 +1,28 @@
1
+ require "base64"
2
+
1
3
  module Indico
2
4
  private
3
5
 
4
6
  def self.url_join(root, api)
5
- if root == 'local'
6
- "http://localhost:9438/%s" % api
7
- else
7
+ if root.nil?
8
8
  "http://apiv1.indico.io/%s" % api
9
+ else
10
+ "http://" + root + ".indico.domains/" + api
9
11
  end
10
12
  end
11
13
 
12
- def self.api_handler(data, server, api)
14
+ def self.api_handler(data, server, api, username=nil, password=nil)
13
15
  d = {}
14
16
  d['data'] = data
15
17
  data_dict = JSON.dump(d)
16
- response = make_request(url_join(server, api), data_dict, HEADERS)
18
+ if username.nil?
19
+ response = make_request(url_join(server, api), data_dict, HEADERS)
20
+ else
21
+ response = make_request(url_join(server, api), data_dict, encode_credentials(username, password))
22
+ end
17
23
  results = JSON.parse(response.body)
18
24
  if results.key?("error")
19
- results = results["error"]
25
+ raise results["error"]
20
26
  else
21
27
  results = results["results"]
22
28
  end
@@ -36,4 +42,12 @@ module Indico
36
42
 
37
43
  http.request(request)
38
44
  end
39
- end
45
+
46
+ def self.encode_credentials(username, password)
47
+ headers = { "Content-Type" => "application/json", "Accept" => "text/plain" }
48
+ credentials = username + ":" + password
49
+ headers["Authorization"] = "Basic " + Base64.strict_encode64(credentials)
50
+ headers
51
+ end
52
+
53
+ end
@@ -1,3 +1,3 @@
1
1
  module Indico
2
- VERSION = "0.1.6"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,133 @@
1
+ require 'spec_helper'
2
+ require 'set'
3
+
4
+ $username = ENV['INDICO_USERNAME']
5
+ $password = ENV['INDICO_PASSWORD']
6
+ $private_cloud = 'indico-test'
7
+
8
+ describe Indico do
9
+
10
+ it "should tag text with correct political tags" do
11
+ expected_keys = Set.new(["Conservative", "Green", "Liberal", "Libertarian"])
12
+ data = ["Guns don't kill people."," People kill people."]
13
+ response = Indico.batch_political(data, $username, $password) # Guns don't kill people. People kill people.
14
+
15
+ expect(Set.new(response[0].keys)).to eql(expected_keys)
16
+ expect(Set.new(response[1].keys)).to eql(expected_keys)
17
+ end
18
+
19
+ it "should access a private cloud" do
20
+ expected_keys = Set.new(["Conservative", "Green", "Liberal", "Libertarian"])
21
+ data = ["Guns don't kill people."," People kill people."]
22
+ response = Indico.batch_political(data, $username, $password, $private_cloud) # Guns don't kill people. People kill people.
23
+
24
+ expect(Set.new(response[0].keys)).to eql(expected_keys)
25
+ expect(Set.new(response[1].keys)).to eql(expected_keys)
26
+ end
27
+
28
+ it "should tag text with correct sentiment tags" do
29
+ response = Indico.batch_sentiment(["Worst movie ever."], $username, $password)
30
+
31
+ expect(response[0] < 0.5).to eql(true)
32
+ end
33
+
34
+ it "should tag text with correct language tags" do
35
+ expected_keys = Set.new([
36
+ 'English',
37
+ 'Spanish',
38
+ 'Tagalog',
39
+ 'Esperanto',
40
+ 'French',
41
+ 'Chinese',
42
+ 'French',
43
+ 'Bulgarian',
44
+ 'Latin',
45
+ 'Slovak',
46
+ 'Hebrew',
47
+ 'Russian',
48
+ 'German',
49
+ 'Japanese',
50
+ 'Korean',
51
+ 'Portuguese',
52
+ 'Italian',
53
+ 'Polish',
54
+ 'Turkish',
55
+ 'Dutch',
56
+ 'Arabic',
57
+ 'Persian (Farsi)',
58
+ 'Czech',
59
+ 'Swedish',
60
+ 'Indonesian',
61
+ 'Vietnamese',
62
+ 'Romanian',
63
+ 'Greek',
64
+ 'Danish',
65
+ 'Hungarian',
66
+ 'Thai',
67
+ 'Finnish',
68
+ 'Norwegian',
69
+ 'Lithuanian'
70
+ ])
71
+
72
+ data = ['Quis custodiet ipsos custodes', 'Clearly english, foo!']
73
+ response = Indico.batch_language(data, $username, $password)
74
+
75
+ expect(Set.new(response[0].keys)).to eql(expected_keys)
76
+ expect(Set.new(response[1].keys)).to eql(expected_keys)
77
+ end
78
+
79
+ it "should tag text with correct text tags" do
80
+ expected_keys = Set.new(['fashion', 'art', 'energy', 'economics', 'entrepreneur',
81
+ 'books', 'politics', 'gardening', 'nba', 'conservative',
82
+ 'technology', 'startups', 'relationships', 'education',
83
+ 'humor', 'psychology', 'bicycling', 'investing', 'travel',
84
+ 'cooking', 'christianity', 'environment', 'religion', 'health',
85
+ 'hockey', 'pets', 'music', 'soccer', 'guns', 'gaming', 'jobs',
86
+ 'business', 'nature', 'food', 'cars', 'photography', 'philosophy',
87
+ 'geek', 'sports', 'baseball', 'news', 'television', 'entertainment',
88
+ 'parenting', 'comics', 'science', 'nfl','programming',
89
+ 'personalfinance', 'atheism', 'movies', 'anime', 'fitness',
90
+ 'military', 'realestate', 'history'])
91
+
92
+ data = ["Guns don't kill people.", "People kill people."]
93
+ response = Indico.batch_text_tags(data, $username, $password) # Guns don't kill people. People kill people.
94
+
95
+ expect Set.new(response[0].keys).subset?(Set.new(expected_keys))
96
+ expect Set.new(response[1].keys).subset?(Set.new(expected_keys))
97
+ end
98
+
99
+ it "should tag face with correct facial expression" do
100
+ expected_keys = Set.new(["Angry", "Sad", "Neutral", "Surprise", "Fear", "Happy"])
101
+ test_face = Array.new(48){Array.new(48){rand(100)/100.0} }
102
+ response = Indico.batch_fer([test_face, test_face], $username, $password)
103
+
104
+ expect(Set.new(response[0].keys)).to eql(expected_keys)
105
+ expect(Set.new(response[1].keys)).to eql(expected_keys)
106
+ end
107
+
108
+ it "should tag face with correct facial features" do
109
+ test_face = Array.new(48){Array.new(48){rand(100)/100.0} }
110
+ response = Indico.batch_facial_features([test_face, test_face], $username, $password)
111
+
112
+ expect(response[0].length).to eql(48)
113
+ expect(response[1].length).to eql(48)
114
+ end
115
+
116
+ it "should tag image with correct image features" do
117
+ test_image = Array.new(48){Array.new(48){rand(100)/100.0} }
118
+ response = Indico.batch_image_features([test_image, test_image], $username, $password)
119
+
120
+ expect(response[0].length).to eql(2048)
121
+ expect(response[1].length).to eql(2048)
122
+ end
123
+
124
+ # Uncomment when frontend updated to accept image urls
125
+ # it "should accept image urls" do
126
+ # test_image = "http://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/48/Emotes-face-smile-icon.png"
127
+ # response = Indico.batch_image_features([test_image, test_image], $username, $password)
128
+
129
+ # expect(response[0].length).to eql(2048)
130
+ # expect(response[1].length).to eql(2048)
131
+ # end
132
+
133
+ end
data/spec/indico_spec.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  require 'spec_helper'
2
2
  require 'set'
3
3
 
4
+ $username = ENV['INDICO_USERNAME']
5
+ $password = ENV['INDICO_PASSWORD']
6
+ $private_cloud = 'indico-test'
7
+
4
8
  describe Indico do
5
9
 
6
10
  it "should tag text with correct political tags" do
@@ -10,6 +14,14 @@ describe Indico do
10
14
  expect(Set.new(response.keys)).to eql(expected_keys)
11
15
  end
12
16
 
17
+ it "should tag text with correct political tags" do
18
+ expected_keys = Set.new(["Conservative", "Green", "Liberal", "Libertarian"])
19
+ data = "Guns don't kill people. People kill people."
20
+ response = Indico.political(data, $username, $password, $private_cloud) # Guns don't kill people. People kill people.
21
+
22
+ expect(Set.new(response.keys)).to eql(expected_keys)
23
+ end
24
+
13
25
  it "should tag text with correct sentiment tags" do
14
26
  response = Indico.sentiment("Worst movie ever.")
15
27
 
@@ -59,11 +71,11 @@ describe Indico do
59
71
  end
60
72
 
61
73
  it "should tag text with correct text tags" do
62
- expected_keys = Set.new(['fashion', 'art', 'energy', 'economics', 'entrepreneur',
63
- 'books', 'politics', 'gardening', 'nba', 'conservative',
74
+ expected_keys = Set.new(['fashion', 'art', 'energy', 'economics', 'entrepreneur',
75
+ 'books', 'politics', 'gardening', 'nba', 'conservative',
64
76
  'technology', 'startups', 'relationships', 'education',
65
77
  'humor', 'psychology', 'bicycling', 'investing', 'travel',
66
- 'cooking', 'christianity', 'environment', 'religion', 'health',
78
+ 'cooking', 'christianity', 'environment', 'religion', 'health',
67
79
  'hockey', 'pets', 'music', 'soccer', 'guns', 'gaming', 'jobs',
68
80
  'business', 'nature', 'food', 'cars', 'photography', 'philosophy',
69
81
  'geek', 'sports', 'baseball', 'news', 'television', 'entertainment',
@@ -72,22 +84,37 @@ describe Indico do
72
84
  'military', 'realestate', 'history'])
73
85
  response = Indico.text_tags("Guns don't kill people. People kill people.") # Guns don't kill people. People kill people.
74
86
 
75
- expect(Set.new(response.keys)).to eql(expected_keys)
87
+ expect Set.new(response.keys).subset?(Set.new(expected_keys))
76
88
  end
77
89
 
78
90
  it "should tag face with correct facial expression" do
79
91
  expected_keys = Set.new(["Angry", "Sad", "Neutral", "Surprise", "Fear", "Happy"])
80
- test_face = 0.step(50, 50.0/(48.0*48.0)).to_a[0..-2].each_slice(48).to_a
92
+ test_face = Array.new(48){Array.new(48){rand(100)/100.0} }
93
+
81
94
  response = Indico.fer(test_face)
82
95
 
83
96
  expect(Set.new(response.keys)).to eql(expected_keys)
84
97
  end
85
98
 
86
99
  it "should tag face with correct facial features" do
87
- test_face = 0.step(50, 50.0/(48.0*48.0)).to_a[0..-2].each_slice(48).to_a
100
+ test_face = Array.new(48){Array.new(48){rand(100)/100.0} }
88
101
  response = Indico.facial_features(test_face)
89
102
 
90
103
  expect(response.length).to eql(48)
91
104
  end
92
105
 
93
- end
106
+ it "should tag image with correct image features" do
107
+ test_image = Array.new(48){Array.new(48){rand(100)/100.0} }
108
+ response = Indico.image_features(test_image)
109
+
110
+ expect(response.length).to eql(2048)
111
+ end
112
+
113
+ # Uncomment when frontend updated to accept image urls
114
+ # it "should accept image urls" do
115
+ # response = Indico.image_features("http://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/48/Emotes-face-smile-icon.png")
116
+
117
+ # expect(response.length).to eql(2048)
118
+ # end
119
+
120
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: indico
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-11-07 00:00:00.000000000 Z
13
+ date: 2015-03-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -78,8 +78,7 @@ files:
78
78
  - lib/indico.rb
79
79
  - lib/indico/helper.rb
80
80
  - lib/indico/version.rb
81
- - lib/indico_local.rb
82
- - spec/indico_local_spec.rb
81
+ - spec/indico_batch_spec.rb
83
82
  - spec/indico_spec.rb
84
83
  - spec/spec_helper.rb
85
84
  homepage: https://github.com/IndicoDataSolutions/IndicoIo-ruby
@@ -108,6 +107,6 @@ signing_key:
108
107
  specification_version: 3
109
108
  summary: A simple Ruby Wrapper for the indico set of APIs.
110
109
  test_files:
111
- - spec/indico_local_spec.rb
110
+ - spec/indico_batch_spec.rb
112
111
  - spec/indico_spec.rb
113
112
  - spec/spec_helper.rb
data/lib/indico_local.rb DELETED
@@ -1,37 +0,0 @@
1
- require "indico"
2
-
3
- module IndicoLocal
4
-
5
- def self.political(test_text)
6
- Indico.political(test_text, "local")
7
- end
8
-
9
- def self.posneg(test_text)
10
- Indico.posneg(test_text, "local")
11
- end
12
-
13
- def self.sentiment(*args)
14
- self.posneg(*args)
15
- end
16
-
17
- def self.language(test_text)
18
- Indico.language(test_text, "local")
19
- end
20
-
21
- def self.text_tags(test_text)
22
- Indico.text_tags(test_text, "local")
23
- end
24
-
25
- def self.fer(face)
26
- Indico.fer(face, "local")
27
- end
28
-
29
- def self.facial_features(face)
30
- Indico.facial_features(face, "local")
31
- end
32
-
33
- def self.image_features(image)
34
- Indico.image_features(image, "local")
35
- end
36
-
37
- end
@@ -1,107 +0,0 @@
1
- require 'indico_local'
2
- require 'set'
3
-
4
- describe Indico do
5
-
6
- it "should tag text with correct political tags" do
7
- expected_keys = Set.new(["Conservative", "Green", "Liberal", "Libertarian"])
8
- response = Indico.political("Guns don't kill people. People kill people.") # Guns don't kill people. People kill people.
9
-
10
- expect(Set.new(response.keys)).to eql(expected_keys)
11
- end
12
-
13
- it "should tag text with correct text tags" do
14
- expected_keys = Set.new(["political", "arts", "products", "news"])
15
- response = Indico.text_tags("Guns don't kill people. People kill people.") # Guns don't kill people. People kill people.
16
-
17
- expect(Set.new(response.keys)).to eql(expected_keys)
18
- end
19
-
20
- it "should tag text with correct sentiment tags" do
21
- response = Indico.sentiment("Worst movie ever.")
22
-
23
- expect(response).to be < 0.5
24
- end
25
-
26
- it "should tag text with correct language tags" do
27
- expected_keys = Set.new([
28
- 'English',
29
- 'Spanish',
30
- 'Tagalog',
31
- 'Esperanto',
32
- 'French',
33
- 'Chinese',
34
- 'French',
35
- 'Bulgarian',
36
- 'Latin',
37
- 'Slovak',
38
- 'Hebrew',
39
- 'Russian',
40
- 'German',
41
- 'Japanese',
42
- 'Korean',
43
- 'Portuguese',
44
- 'Italian',
45
- 'Polish',
46
- 'Turkish',
47
- 'Dutch',
48
- 'Arabic',
49
- 'Persian (Farsi)',
50
- 'Czech',
51
- 'Swedish',
52
- 'Indonesian',
53
- 'Vietnamese',
54
- 'Romanian',
55
- 'Greek',
56
- 'Danish',
57
- 'Hungarian',
58
- 'Thai',
59
- 'Finnish',
60
- 'Norwegian',
61
- 'Lithuanian'
62
- ])
63
- response = Indico.language('Quis custodiet ipsos custodes')
64
-
65
- expect(Set.new(response.keys)).to eql(expected_keys)
66
- end
67
-
68
- it "should tag text with correct text tags" do
69
- expected_keys = Set.new(['fashion', 'art', 'energy', 'economics', 'entrepreneur',
70
- 'books', 'politics', 'gardening', 'nba', 'conservative',
71
- 'technology', 'startups', 'relationships', 'education',
72
- 'humor', 'psychology', 'bicycling', 'investing', 'travel',
73
- 'cooking', 'christianity', 'environment', 'religion', 'health',
74
- 'hockey', 'pets', 'music', 'soccer', 'guns', 'gaming', 'jobs',
75
- 'business', 'nature', 'food', 'cars', 'photography', 'philosophy',
76
- 'geek', 'sports', 'baseball', 'news', 'television', 'entertainment',
77
- 'parenting', 'comics', 'science', 'nfl','programming',
78
- 'personalfinance', 'atheism', 'movies', 'anime', 'fitness',
79
- 'military', 'realestate', 'history'])
80
- response = Indico.text_tags("Guns don't kill people. People kill people.") # Guns don't kill people. People kill people.
81
-
82
- expect(Set.new(response.keys)).to eql(expected_keys)
83
- end
84
-
85
- it "should tag face with correct facial expression" do
86
- expected_keys = Set.new(["Angry", "Sad", "Neutral", "Surprise", "Fear", "Happy"])
87
- test_face = 0.step(1, 1.0/(48.0*48.0)).to_a[0..-2].each_slice(48).to_a
88
- response = Indico.fer(test_face)
89
-
90
- expect(Set.new(response.keys)).to eql(expected_keys)
91
- end
92
-
93
- it "should return a facial feature vector" do
94
- test_face = 0.step(1, 1.0/(48.0*48.0)).to_a[0..-2].each_slice(48).to_a
95
- response = Indico.facial_features(test_face)
96
-
97
- expect(response.length).to eql(48)
98
- end
99
-
100
- it "should return an image features vector" do
101
- test_image = 0.step(1, 1.0/(48.0*48.0)).to_a[0..-2].each_slice(48).to_a
102
- response = Indico.image_features(test_image)
103
-
104
- expect(response.length).to eql(2048)
105
- end
106
-
107
- end