mirador 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/Rakefile +8 -0
- data/lib/mirador.rb +47 -7
- data/lib/mirador/version.rb +1 -1
- data/mirador.gemspec +1 -1
- data/test/images/nsfw.jpg +0 -0
- data/test/images/sfw.jpg +0 -0
- data/test/test_mirador.rb +118 -0
- metadata +10 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjUwNGI0MWY1NGIxYzZlYmVjNzQyZGFhN2E0ZmQ4NTQxOGQyZmZlNw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDkyNmUyMmM4MDUxOWZjYTJmMjhkMWVlMGY5Yjk1NWNhNDc3MjBmOQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Yzg1OThhODBlN2VlODQyNDY0NDczNDUxYWEwNDJmMjA5YzdhZDllOTZiNjYx
|
10
|
+
MTNiMTAyNWRhYjkwZTAzYzA3NzZlYTYwNGRjMmYyZTE5ZGI5ODUyNmZjMTNh
|
11
|
+
Mjg1NzU2Yzk1MWUxNWY5YTkyZTk2MWU1YWI5YmJiYTQxOTllZmY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZGIwNWU1NTA1YTUxMTAxOWJiYWU1NjY4NzM5NjU4M2Q5ZGY4YjZjM2EyNWNk
|
14
|
+
YzRiNDdjYjI5YTRhNzFkMjlhY2I4YjUwZjkyMGU0NjVkYjI4NmEzMjRmMWZl
|
15
|
+
ZTEwYTZjN2IyMDAzMTE1Y2FkZDI4MDI5Mzg4ZjY5NWMyMGUwY2U=
|
data/Rakefile
CHANGED
data/lib/mirador.rb
CHANGED
@@ -37,6 +37,9 @@ module Mirador
|
|
37
37
|
class Client
|
38
38
|
include HTTParty
|
39
39
|
base_uri 'api.mirador.im'
|
40
|
+
default_timeout 10
|
41
|
+
|
42
|
+
MAX_LEN = 8
|
40
43
|
|
41
44
|
def initialize(api_key)
|
42
45
|
@options = { api_key: api_key }
|
@@ -44,10 +47,20 @@ module Mirador
|
|
44
47
|
|
45
48
|
def classify_urls urls
|
46
49
|
|
47
|
-
|
50
|
+
if urls.length > MAX_LEN
|
51
|
+
out = []
|
52
|
+
urls.each_slice(MAX_LEN) do |s|
|
53
|
+
out << self.classify_urls(s)
|
54
|
+
end
|
55
|
+
|
56
|
+
return out.flatten
|
57
|
+
end
|
58
|
+
|
59
|
+
res = self.class.post(
|
48
60
|
"/v1/classify",
|
49
61
|
{
|
50
|
-
|
62
|
+
body: @options.merge({url: urls}),
|
63
|
+
headers: {"User-Agent" => "Mirador Client v1.0/Ruby"}
|
51
64
|
}
|
52
65
|
)
|
53
66
|
|
@@ -61,24 +74,51 @@ module Mirador
|
|
61
74
|
end
|
62
75
|
|
63
76
|
def classify_files files
|
77
|
+
if files.length > MAX_LEN
|
78
|
+
out = []
|
79
|
+
files.each_slice(MAX_LEN) do |s|
|
80
|
+
out << self.classify_files(s)
|
81
|
+
end
|
82
|
+
|
83
|
+
return out.flatten
|
84
|
+
end
|
85
|
+
|
64
86
|
processed = files.map do |f| self.process_file(f) end
|
65
|
-
return self.classify_encoded processed
|
87
|
+
return self.classify_encoded files, processed
|
66
88
|
end
|
67
89
|
|
68
90
|
|
69
91
|
def classify_raw_images imgs
|
70
|
-
|
71
|
-
|
92
|
+
|
93
|
+
if imgs.length > MAX_LEN
|
94
|
+
out = []
|
95
|
+
imgs.each_slice(MAX_LEN) do |s|
|
96
|
+
out << self.classify_raw_images(Hash[s])
|
97
|
+
end
|
98
|
+
|
99
|
+
return out.flatten
|
100
|
+
end
|
101
|
+
|
102
|
+
# expects a hash
|
103
|
+
# id => image
|
104
|
+
images, names = [], []
|
105
|
+
imgs.each_pair do |k, v|
|
106
|
+
images << v
|
107
|
+
names << k
|
108
|
+
end
|
109
|
+
|
110
|
+
processed = images.map { |i| Base64.encode64(i).gsub("\n", '') }
|
111
|
+
return self.classify_encoded names, processed
|
72
112
|
end
|
73
113
|
|
74
|
-
|
114
|
+
protected
|
75
115
|
|
76
116
|
def process_file file
|
77
117
|
data = File.read(file)
|
78
118
|
Base64.encode64(data).gsub("\n", '')
|
79
119
|
end
|
80
120
|
|
81
|
-
def classify_encoded encoded
|
121
|
+
def classify_encoded files, encoded
|
82
122
|
res = self.class.post(
|
83
123
|
"/v1/classify",
|
84
124
|
{
|
data/lib/mirador/version.rb
CHANGED
data/mirador.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.email = ["nick@mirador.im"]
|
11
11
|
gem.description = %q{Interface to the Mirador Image Moderation API}
|
12
12
|
gem.summary = %q{Simple interface to mirador API }
|
13
|
-
gem.homepage = "http://
|
13
|
+
gem.homepage = "http://mirador-cv.github.io/mirador-rb"
|
14
14
|
gem.license = "MIT"
|
15
15
|
|
16
16
|
gem.files = `git ls-files`.split($/)
|
Binary file
|
data/test/images/sfw.jpg
ADDED
Binary file
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'mirador'
|
3
|
+
|
4
|
+
class MiradorTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
dirname = File.dirname(__FILE__)
|
7
|
+
|
8
|
+
NSFW_IM = File.join(dirname, 'images/nsfw.jpg')
|
9
|
+
SFW_IM = File.join(dirname, 'images/sfw.jpg')
|
10
|
+
|
11
|
+
SFW_URL = "http://demo.mirador.im/test/sfw.jpg"
|
12
|
+
NSFW_URL = "http://demo.mirador.im/test/nsfw.jpg"
|
13
|
+
|
14
|
+
MM = Mirador::Client.new('')
|
15
|
+
|
16
|
+
def test_classify_files
|
17
|
+
|
18
|
+
res = MM.classify_files([NSFW_IM, SFW_IM])
|
19
|
+
|
20
|
+
assert_equal res.length, 2
|
21
|
+
|
22
|
+
nsfw, sfw = res
|
23
|
+
|
24
|
+
assert_operator nsfw.value, :>=, 0.50
|
25
|
+
assert_operator sfw.value, :<, 0.50
|
26
|
+
|
27
|
+
assert nsfw.name.eql?(NSFW_IM), "nsfw name does not match"
|
28
|
+
assert sfw.name.eql?(SFW_IM), "sfw name does not match"
|
29
|
+
|
30
|
+
assert sfw.safe
|
31
|
+
assert (not nsfw.safe)
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_chunked_files
|
36
|
+
nsfw_files = [NSFW_IM]*10
|
37
|
+
sfw_files = [SFW_IM]*10
|
38
|
+
|
39
|
+
nres = MM.classify_files(nsfw_files)
|
40
|
+
assert_equal nres.length, 10
|
41
|
+
|
42
|
+
nres.each do |r|
|
43
|
+
assert_operator r.value, :>=, 0.50
|
44
|
+
assert r.name.eql?(NSFW_IM)
|
45
|
+
assert (not r.safe)
|
46
|
+
end
|
47
|
+
|
48
|
+
sres = MM.classify_files(sfw_files)
|
49
|
+
assert_equal sres.length, 10
|
50
|
+
|
51
|
+
sres.each do |r|
|
52
|
+
assert_operator r.value, :<, 0.50
|
53
|
+
assert r.name.eql?(SFW_IM)
|
54
|
+
assert r.safe
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_chunked_urls
|
59
|
+
nsfw_urls = [NSFW_URL]*10
|
60
|
+
sfw_urls = [SFW_URL]*10
|
61
|
+
|
62
|
+
nres = MM.classify_urls(nsfw_urls)
|
63
|
+
assert_equal nres.length, 10
|
64
|
+
|
65
|
+
nres.each do |r|
|
66
|
+
assert_not_nil r
|
67
|
+
assert_operator r.value, :>=, 0.50
|
68
|
+
assert r.name.eql?(NSFW_URL)
|
69
|
+
assert (not r.safe)
|
70
|
+
end
|
71
|
+
|
72
|
+
sres = MM.classify_urls(sfw_urls)
|
73
|
+
assert_equal sres.length, 10
|
74
|
+
|
75
|
+
sres.each do |r|
|
76
|
+
assert_not_nil r
|
77
|
+
assert_not_nil r.value
|
78
|
+
assert_operator r.value, :<, 0.50
|
79
|
+
assert r.name.eql?(SFW_URL)
|
80
|
+
assert r.safe
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_classify_urls
|
86
|
+
res = MM.classify_urls([NSFW_URL, SFW_URL])
|
87
|
+
|
88
|
+
assert_equal res.length, 2
|
89
|
+
nsfw, sfw = res
|
90
|
+
|
91
|
+
assert nsfw.name.eql?(NSFW_URL)
|
92
|
+
assert sfw.name.eql?(SFW_URL)
|
93
|
+
|
94
|
+
assert_operator nsfw.value, :>=, 0.50
|
95
|
+
assert_operator sfw.value, :<, 0.50
|
96
|
+
|
97
|
+
assert sfw.safe
|
98
|
+
assert (not nsfw.safe)
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_classify_raw
|
102
|
+
nsfw_d, sfw_d = [NSFW_IM, SFW_IM].map { |f| File.read(f) }
|
103
|
+
res = MM.classify_raw_images({ "nsfw" => nsfw_d, "sfw" => sfw_d })
|
104
|
+
|
105
|
+
assert_equal res.length, 2
|
106
|
+
nsfw, sfw = res
|
107
|
+
|
108
|
+
assert nsfw.name.eql?('nsfw'), "invalid name: #{ nsfw.name }"
|
109
|
+
assert sfw.name.eql?('sfw')
|
110
|
+
|
111
|
+
assert_operator nsfw.value, :>=, 0.50
|
112
|
+
assert_operator sfw.value, :<, 0.50
|
113
|
+
|
114
|
+
assert sfw.safe
|
115
|
+
assert (not nsfw.safe)
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mirador
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Jacob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -47,7 +47,10 @@ files:
|
|
47
47
|
- lib/mirador.rb
|
48
48
|
- lib/mirador/version.rb
|
49
49
|
- mirador.gemspec
|
50
|
-
|
50
|
+
- test/images/nsfw.jpg
|
51
|
+
- test/images/sfw.jpg
|
52
|
+
- test/test_mirador.rb
|
53
|
+
homepage: http://mirador-cv.github.io/mirador-rb
|
51
54
|
licenses:
|
52
55
|
- MIT
|
53
56
|
metadata: {}
|
@@ -71,5 +74,8 @@ rubygems_version: 2.3.0
|
|
71
74
|
signing_key:
|
72
75
|
specification_version: 4
|
73
76
|
summary: Simple interface to mirador API
|
74
|
-
test_files:
|
77
|
+
test_files:
|
78
|
+
- test/images/nsfw.jpg
|
79
|
+
- test/images/sfw.jpg
|
80
|
+
- test/test_mirador.rb
|
75
81
|
has_rdoc:
|