sqed 0.0.1
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 +7 -0
- data/.gitignore +27 -0
- data/.rspec +2 -0
- data/.travis.yml +18 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +36 -0
- data/Rakefile +9 -0
- data/lib/sqed.rb +111 -0
- data/lib/sqed/boundaries.rb +79 -0
- data/lib/sqed/boundary_finder.rb +150 -0
- data/lib/sqed/boundary_finder/color_line_finder.rb +83 -0
- data/lib/sqed/boundary_finder/cross_finder.rb +23 -0
- data/lib/sqed/boundary_finder/stage_finder.rb +139 -0
- data/lib/sqed/extractor.rb +45 -0
- data/lib/sqed/parser.rb +11 -0
- data/lib/sqed/parser/barcode_parser.rb +27 -0
- data/lib/sqed/parser/ocr_parser.rb +52 -0
- data/lib/sqed/result.rb +15 -0
- data/lib/sqed/version.rb +3 -0
- data/lib/sqed_config.rb +112 -0
- data/spec/lib/sqed/boundaries_spec.rb +35 -0
- data/spec/lib/sqed/boundary_finder/color_line_finder_spec.rb +167 -0
- data/spec/lib/sqed/boundary_finder/cross_finder_spec.rb +28 -0
- data/spec/lib/sqed/boundary_finder/stage_finder_spec.rb +9 -0
- data/spec/lib/sqed/boundary_finder_spec.rb +108 -0
- data/spec/lib/sqed/extractor_spec.rb +82 -0
- data/spec/lib/sqed/parser_spec.rb +6 -0
- data/spec/lib/sqed/result_spec.rb +17 -0
- data/spec/lib/sqed_spec.rb +200 -0
- data/spec/spec_helper.rb +34 -0
- data/spec/support/files/2Dbarcode.png +0 -0
- data/spec/support/files/CrossyBlackLinesSpecimen.jpg +0 -0
- data/spec/support/files/CrossyGreenLinesSpecimen.jpg +0 -0
- data/spec/support/files/Quadrant_2_3.jpg +0 -0
- data/spec/support/files/black_stage_green_line_specimen.jpg +0 -0
- data/spec/support/files/boundary_cross_green.jpg +0 -0
- data/spec/support/files/boundary_left_t_yellow.jpg +0 -0
- data/spec/support/files/boundary_offset_cross_red.jpg +0 -0
- data/spec/support/files/boundary_right_t_green.jpg +0 -0
- data/spec/support/files/greenlineimage.jpg +0 -0
- data/spec/support/files/label_images/black_stage_green_line_specimen_label.jpg +0 -0
- data/spec/support/files/test0.jpg +0 -0
- data/spec/support/files/test1.jpg +0 -0
- data/spec/support/files/test2.jpg +0 -0
- data/spec/support/files/test3.jpg +0 -0
- data/spec/support/files/test4.jpg +0 -0
- data/spec/support/files/test4OLD.jpg +0 -0
- data/spec/support/files/test_barcode.JPG +0 -0
- data/spec/support/files/test_ocr0.jpg +0 -0
- data/spec/support/files/types_21.jpg +0 -0
- data/spec/support/files/types_8.jpg +0 -0
- data/spec/support/image_helpers.rb +78 -0
- data/sqed.gemspec +31 -0
- metadata +244 -0
@@ -0,0 +1,200 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'RMagick'
|
3
|
+
describe Sqed do
|
4
|
+
|
5
|
+
let(:s) {Sqed.new}
|
6
|
+
|
7
|
+
context 'attributes' do
|
8
|
+
specify '#image' do
|
9
|
+
expect(s).to respond_to(:image)
|
10
|
+
end
|
11
|
+
|
12
|
+
specify '#pattern' do
|
13
|
+
expect(s).to respond_to(:pattern)
|
14
|
+
end
|
15
|
+
|
16
|
+
specify '#stage_image' do
|
17
|
+
expect(s).to respond_to(:image)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'initialization' do
|
22
|
+
specify 'without providing a pattern assigns :standard_cross' do
|
23
|
+
expect(s.pattern).to eq(:standard_cross)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'asking for a result' do
|
28
|
+
specify 'without providing an image returns false' do
|
29
|
+
expect(s.result).to eq(false)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'with a test image' do
|
34
|
+
let(:a) { ImageHelpers.test0_image }
|
35
|
+
before {
|
36
|
+
s.image = a
|
37
|
+
}
|
38
|
+
|
39
|
+
specify '#crop_image' do #should expand to multiple cases of image border types
|
40
|
+
expect(s.crop_image).to be_truthy
|
41
|
+
expect(s.stage_image.columns < a.columns).to be(true)
|
42
|
+
expect(s.stage_image.rows < a.rows).to be(true)
|
43
|
+
end
|
44
|
+
|
45
|
+
specify '#boundaries returns a Sqed::Boundaries instance' do
|
46
|
+
s.pattern = :standard_cross
|
47
|
+
expect(s.boundaries.class).to eq(Sqed::Boundaries)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'stage image with a border' do
|
52
|
+
let(:a) { ImageHelpers.standard_cross_green }
|
53
|
+
before {
|
54
|
+
s.image = a
|
55
|
+
s.crop_image
|
56
|
+
}
|
57
|
+
specify 'stage boundary is created for standard_ cross_green ~ (100,94, 800, 600)' do
|
58
|
+
expect(s.stage_boundary.x_for(0)).to be_within(2).of 100
|
59
|
+
expect(s.stage_boundary.y_for(0)).to be_within(2).of 94
|
60
|
+
expect(s.stage_boundary.width_for(0)).to be_within(2).of 800
|
61
|
+
expect(s.stage_boundary.height_for(0)).to be_within(2).of 600
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'offset boundaries from original crossy_green_line_specimen image ' do
|
66
|
+
before(:all) {
|
67
|
+
@s = Sqed.new(image: ImageHelpers.crossy_green_line_specimen, pattern: :offset_cross)
|
68
|
+
@s.crop_image
|
69
|
+
@offset_boundaries = @s.boundaries.offset(@s.stage_boundary)
|
70
|
+
wtf = 0
|
71
|
+
}
|
72
|
+
|
73
|
+
specify "offset and size should match internal found areas " do
|
74
|
+
sbx = @s.stage_boundary.x_for(0)
|
75
|
+
sby = @s.stage_boundary.y_for(0)
|
76
|
+
|
77
|
+
sl = @s.boundaries.coordinates.length # may be convenient to clone this model for other than 4 boundaries found
|
78
|
+
expect(sl).to eq(4) #for offset cross pattern and valid image
|
79
|
+
expect(@s.boundaries.complete).to be(true)
|
80
|
+
expect(@offset_boundaries.complete).to be(true)
|
81
|
+
(0..sl - 1).each do |i|
|
82
|
+
# check all the x/y
|
83
|
+
expect(@offset_boundaries.x_for(i)).to eq(@s.boundaries.x_for(i) + sbx)
|
84
|
+
expect(@offset_boundaries.y_for(i)).to eq(@s.boundaries.y_for(i) + sby)
|
85
|
+
|
86
|
+
# check all width/heights
|
87
|
+
expect(@offset_boundaries.width_for(i)).to eq(@s.boundaries.width_for(i))
|
88
|
+
expect(@offset_boundaries.height_for(i)).to eq(@s.boundaries.height_for(i))
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
specify "find image, barcode, and text content" do
|
93
|
+
bc = Sqed::Extractor.new(boundaries: [0, 0, @s.image.columns, @s.image.rows], image: @s.image, layout: :offset_cross)
|
94
|
+
poc = Sqed::Parser::OcrParser.new(bc.extract_image(@offset_boundaries.coordinates[1]))
|
95
|
+
expect(poc.text).to eq('000085067')
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'offset boundaries from crossy_black_line_specimen image ' do
|
101
|
+
before(:all) {
|
102
|
+
@s = Sqed.new(image: ImageHelpers.crossy_black_line_specimen, pattern: :offset_cross, boundary_color: :black)
|
103
|
+
@s.crop_image
|
104
|
+
@offset_boundaries = @s.boundaries.offset(@s.stage_boundary)
|
105
|
+
wtf = 0
|
106
|
+
}
|
107
|
+
|
108
|
+
specify "offset and size should match internal found areas " do ##**** actually fails
|
109
|
+
|
110
|
+
sbx = @s.stage_boundary.x_for(0)
|
111
|
+
sby = @s.stage_boundary.y_for(0)
|
112
|
+
|
113
|
+
sl = @s.boundaries.coordinates.length # may be convenient to clone this model for other than 4 boundaries found
|
114
|
+
expect(sl).to eq(4) #for offset cross pattern and valid image
|
115
|
+
expect(@s.boundaries.complete).to be(true)
|
116
|
+
expect(@offset_boundaries.complete).to be(true)
|
117
|
+
(0..sl - 1).each do |i|
|
118
|
+
# check all the x/y
|
119
|
+
expect(@offset_boundaries.x_for(i)).to eq(@s.boundaries.x_for(i) + sbx)
|
120
|
+
expect(@offset_boundaries.y_for(i)).to eq(@s.boundaries.y_for(i) + sby)
|
121
|
+
|
122
|
+
# check all width/heights
|
123
|
+
expect(@offset_boundaries.width_for(i)).to eq(@s.boundaries.width_for(i))
|
124
|
+
expect(@offset_boundaries.height_for(i)).to eq(@s.boundaries.height_for(i))
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
context 'offset boundaries from black_green_line_specimen image ' do
|
130
|
+
before(:all) {
|
131
|
+
@s = Sqed.new(image: ImageHelpers.black_stage_green_line_specimen, pattern: :offset_cross)
|
132
|
+
@s.crop_image
|
133
|
+
@offset_boundaries = @s.boundaries.offset(@s.stage_boundary)
|
134
|
+
wtf = 0
|
135
|
+
}
|
136
|
+
|
137
|
+
specify "offset and size should match internal found areas " do
|
138
|
+
sbx = @s.stage_boundary.x_for(0)
|
139
|
+
sby = @s.stage_boundary.y_for(0)
|
140
|
+
|
141
|
+
sl = @s.boundaries.coordinates.length # may be convenient to clone this model for other than 4 boundaries found
|
142
|
+
expect(sl).to eq(4) #for offset cross pattern and valid image
|
143
|
+
expect(@s.boundaries.complete).to be(true)
|
144
|
+
expect(@offset_boundaries.complete).to be(true)
|
145
|
+
(0..sl - 1).each do |i|
|
146
|
+
# check all the x/y
|
147
|
+
expect(@offset_boundaries.x_for(i)).to eq(@s.boundaries.x_for(i) + sbx)
|
148
|
+
expect(@offset_boundaries.y_for(i)).to eq(@s.boundaries.y_for(i) + sby)
|
149
|
+
|
150
|
+
# check all width/heights
|
151
|
+
expect(@offset_boundaries.width_for(i)).to eq(@s.boundaries.width_for(i))
|
152
|
+
expect(@offset_boundaries.height_for(i)).to eq(@s.boundaries.height_for(i))
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
specify "find image, barcode, and text content" do
|
157
|
+
bc = Sqed::Extractor.new(boundaries: [0, 0, @s.image.columns, @s.image.rows], image: @s.image, layout: :offset_cross)
|
158
|
+
# ioc = bc.extract_image(@offset_boundaries.coordinates[3])
|
159
|
+
# iioc = ioc.crop(384, 140, 1420, 572, true)
|
160
|
+
poc = Sqed::Parser::OcrParser.new(bc.extract_image(@offset_boundaries.coordinates[3]).crop(400, 140, 1420, 600, true))
|
161
|
+
# expect(poc.text).to eq('000085067')
|
162
|
+
ppc = Sqed::Parser::OcrParser.new(ImageHelpers.black_stage_green_line_specimen_label)
|
163
|
+
poc.image.write('tmp/poc.jpg')
|
164
|
+
ppc.image.write('tmp/ppc.jpg')
|
165
|
+
expect(ppc.text).to eq(poc.text)
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
context 'offset boundaries from original red_line image ' do
|
171
|
+
before(:all) {
|
172
|
+
@s = Sqed.new(image: ImageHelpers.offset_cross_red, pattern: :right_t, boundary_color: :red)
|
173
|
+
@s.crop_image
|
174
|
+
@offset_boundaries = @s.boundaries.offset(@s.stage_boundary)
|
175
|
+
wtf = 0
|
176
|
+
}
|
177
|
+
|
178
|
+
specify "offset and size should match internal found areas " do
|
179
|
+
sbx = @s.stage_boundary.x_for(0) # only a single boundary
|
180
|
+
sby = @s.stage_boundary.y_for(0)
|
181
|
+
pct = 0.02
|
182
|
+
|
183
|
+
sl = @s.boundaries.coordinates.length # may be convenient to clone this model for other than 4 boundaries found
|
184
|
+
expect(sl).to eq(3) #for offset cross pattern and valid image
|
185
|
+
expect(@s.boundaries.complete).to be(true)
|
186
|
+
expect(@offset_boundaries.complete).to be(true)
|
187
|
+
expect(@s.stage_boundary.width_for(0)).to be_within(pct*800).of(800)
|
188
|
+
expect(@s.stage_boundary.height_for(0)).to be_within(pct*600).of(600)
|
189
|
+
(0..sl - 1).each do |i|
|
190
|
+
# check all the x/y
|
191
|
+
expect(@offset_boundaries.x_for(i)).to eq(@s.boundaries.x_for(i) + sbx)
|
192
|
+
expect(@offset_boundaries.y_for(i)).to eq(@s.boundaries.y_for(i) + sby)
|
193
|
+
|
194
|
+
# check all width/heights
|
195
|
+
expect(@offset_boundaries.width_for(i)).to eq(@s.boundaries.width_for(i))
|
196
|
+
expect(@offset_boundaries.height_for(i)).to eq(@s.boundaries.height_for(i))
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
Bundler.setup
|
4
|
+
|
5
|
+
require 'sqed'
|
6
|
+
require 'support/image_helpers'
|
7
|
+
require 'byebug'
|
8
|
+
require 'awesome_print'
|
9
|
+
require 'fileutils'
|
10
|
+
require 'RMagick'
|
11
|
+
|
12
|
+
FileUtils::mkdir_p 'tmp'
|
13
|
+
|
14
|
+
RSpec.configure do |config|
|
15
|
+
|
16
|
+
config.raise_errors_for_deprecations!
|
17
|
+
|
18
|
+
config.run_all_when_everything_filtered = false
|
19
|
+
# config.filter_run :focus
|
20
|
+
|
21
|
+
# Run specs in random order to surface order dependencies. If you find an
|
22
|
+
# order dependency and want to debug it, you can fix the order by providing
|
23
|
+
# the seed, which is printed after each run.
|
24
|
+
# --seed 1234
|
25
|
+
# config.order = 'random'
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def in_range(value, percentage, midpoint) #order of second and third params to be consistent with be_within
|
30
|
+
# value is a scalar for testing against the range, percentage is a float less than 1, midpoint is the nominal center of the range
|
31
|
+
return (value <= midpoint*(1.0 + percentage)) & (value >= midpoint*(1.0 - percentage))
|
32
|
+
end
|
33
|
+
|
34
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module ImageHelpers
|
2
|
+
|
3
|
+
BASE_PATH = '../files/'
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def get_image(file_name)
|
8
|
+
Image.read(File.expand_path(BASE_PATH + file_name, __FILE__)).first
|
9
|
+
end
|
10
|
+
|
11
|
+
# Images
|
12
|
+
|
13
|
+
def test0_image
|
14
|
+
get_image('test3.jpg')
|
15
|
+
end
|
16
|
+
|
17
|
+
def greenline_image
|
18
|
+
get_image 'greenlineimage.jpg'
|
19
|
+
end
|
20
|
+
|
21
|
+
def ocr_image
|
22
|
+
get_image 'test4.jpg'
|
23
|
+
end
|
24
|
+
|
25
|
+
def barcode_image
|
26
|
+
get_image 'test_barcode.jpg'
|
27
|
+
end
|
28
|
+
|
29
|
+
def labels_image
|
30
|
+
get_image 'types_8.jpg'
|
31
|
+
end
|
32
|
+
|
33
|
+
def foo3_image
|
34
|
+
get_image 'foo3.jpg'
|
35
|
+
end
|
36
|
+
|
37
|
+
# Images for boundary tests (otherwise empty)
|
38
|
+
|
39
|
+
def standard_cross_green
|
40
|
+
get_image 'boundary_cross_green.jpg'
|
41
|
+
end
|
42
|
+
|
43
|
+
def crossy_green_line_specimen
|
44
|
+
get_image 'CrossyGreenLinesSpecimen.jpg'
|
45
|
+
end
|
46
|
+
def crossy_black_line_specimen
|
47
|
+
get_image 'CrossyBlackLinesSpecimen.jpg'
|
48
|
+
end
|
49
|
+
|
50
|
+
def black_stage_green_line_specimen
|
51
|
+
get_image 'black_stage_green_line_specimen.jpg'
|
52
|
+
end
|
53
|
+
|
54
|
+
def black_stage_green_line_specimen_label
|
55
|
+
get_image 'label_images/black_stage_green_line_specimen_label.jpg'
|
56
|
+
end
|
57
|
+
|
58
|
+
def offset_cross_red
|
59
|
+
get_image 'boundary_offset_cross_red.jpg'
|
60
|
+
end
|
61
|
+
|
62
|
+
def right_t_green
|
63
|
+
get_image 'boundary_right_t_green.jpg'
|
64
|
+
end
|
65
|
+
|
66
|
+
def left_t_yellow
|
67
|
+
get_image 'boundary_left_t_yellow.jpg'
|
68
|
+
end
|
69
|
+
|
70
|
+
def of_size(width = 1024, height = 768)
|
71
|
+
Image.new(width, height) {
|
72
|
+
self.background_color = 'white'
|
73
|
+
}
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
data/sqed.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'sqed/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "sqed"
|
8
|
+
spec.version = Sqed::VERSION
|
9
|
+
spec.authors = ["Matt Yoder", "Rich Flood"]
|
10
|
+
spec.email = ["diapriid@gmail.com"]
|
11
|
+
spec.summary = %q{Specimens Quickly Extracted and Digitized, or just "squid". A ruby gem for image related specimen accessioning.}
|
12
|
+
spec.description = %q{A utility gem to aid in the processing of images taken in the process of digitizing natural history collections.}
|
13
|
+
spec.homepage = "http://github.com/SpeciesFileGroup/sqed"
|
14
|
+
spec.license = "NCSA"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency 'rake'
|
22
|
+
spec.add_dependency 'rmagick', '~> 2.13.2'
|
23
|
+
spec.add_dependency 'rtesseract'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
26
|
+
spec.add_development_dependency 'did_you_mean', '~> 0.9'
|
27
|
+
spec.add_development_dependency 'byebug'
|
28
|
+
spec.add_development_dependency 'rspec'
|
29
|
+
spec.add_development_dependency 'awesome_print', '~> 1.6'
|
30
|
+
end
|
31
|
+
|
metadata
ADDED
@@ -0,0 +1,244 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sqed
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matt Yoder
|
8
|
+
- Rich Flood
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-06-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rmagick
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 2.13.2
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 2.13.2
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rtesseract
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: bundler
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '1.5'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.5'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: did_you_mean
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0.9'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0.9'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: byebug
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: rspec
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: awesome_print
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '1.6'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.6'
|
126
|
+
description: A utility gem to aid in the processing of images taken in the process
|
127
|
+
of digitizing natural history collections.
|
128
|
+
email:
|
129
|
+
- diapriid@gmail.com
|
130
|
+
executables: []
|
131
|
+
extensions: []
|
132
|
+
extra_rdoc_files: []
|
133
|
+
files:
|
134
|
+
- ".gitignore"
|
135
|
+
- ".rspec"
|
136
|
+
- ".travis.yml"
|
137
|
+
- Gemfile
|
138
|
+
- LICENSE.txt
|
139
|
+
- README.md
|
140
|
+
- Rakefile
|
141
|
+
- lib/sqed.rb
|
142
|
+
- lib/sqed/boundaries.rb
|
143
|
+
- lib/sqed/boundary_finder.rb
|
144
|
+
- lib/sqed/boundary_finder/color_line_finder.rb
|
145
|
+
- lib/sqed/boundary_finder/cross_finder.rb
|
146
|
+
- lib/sqed/boundary_finder/stage_finder.rb
|
147
|
+
- lib/sqed/extractor.rb
|
148
|
+
- lib/sqed/parser.rb
|
149
|
+
- lib/sqed/parser/barcode_parser.rb
|
150
|
+
- lib/sqed/parser/ocr_parser.rb
|
151
|
+
- lib/sqed/result.rb
|
152
|
+
- lib/sqed/version.rb
|
153
|
+
- lib/sqed_config.rb
|
154
|
+
- spec/lib/sqed/boundaries_spec.rb
|
155
|
+
- spec/lib/sqed/boundary_finder/color_line_finder_spec.rb
|
156
|
+
- spec/lib/sqed/boundary_finder/cross_finder_spec.rb
|
157
|
+
- spec/lib/sqed/boundary_finder/stage_finder_spec.rb
|
158
|
+
- spec/lib/sqed/boundary_finder_spec.rb
|
159
|
+
- spec/lib/sqed/extractor_spec.rb
|
160
|
+
- spec/lib/sqed/parser_spec.rb
|
161
|
+
- spec/lib/sqed/result_spec.rb
|
162
|
+
- spec/lib/sqed_spec.rb
|
163
|
+
- spec/spec_helper.rb
|
164
|
+
- spec/support/files/2Dbarcode.png
|
165
|
+
- spec/support/files/CrossyBlackLinesSpecimen.jpg
|
166
|
+
- spec/support/files/CrossyGreenLinesSpecimen.jpg
|
167
|
+
- spec/support/files/Quadrant_2_3.jpg
|
168
|
+
- spec/support/files/black_stage_green_line_specimen.jpg
|
169
|
+
- spec/support/files/boundary_cross_green.jpg
|
170
|
+
- spec/support/files/boundary_left_t_yellow.jpg
|
171
|
+
- spec/support/files/boundary_offset_cross_red.jpg
|
172
|
+
- spec/support/files/boundary_right_t_green.jpg
|
173
|
+
- spec/support/files/greenlineimage.jpg
|
174
|
+
- spec/support/files/label_images/black_stage_green_line_specimen_label.jpg
|
175
|
+
- spec/support/files/test0.jpg
|
176
|
+
- spec/support/files/test1.jpg
|
177
|
+
- spec/support/files/test2.jpg
|
178
|
+
- spec/support/files/test3.jpg
|
179
|
+
- spec/support/files/test4.jpg
|
180
|
+
- spec/support/files/test4OLD.jpg
|
181
|
+
- spec/support/files/test_barcode.JPG
|
182
|
+
- spec/support/files/test_ocr0.jpg
|
183
|
+
- spec/support/files/types_21.jpg
|
184
|
+
- spec/support/files/types_8.jpg
|
185
|
+
- spec/support/image_helpers.rb
|
186
|
+
- sqed.gemspec
|
187
|
+
homepage: http://github.com/SpeciesFileGroup/sqed
|
188
|
+
licenses:
|
189
|
+
- NCSA
|
190
|
+
metadata: {}
|
191
|
+
post_install_message:
|
192
|
+
rdoc_options: []
|
193
|
+
require_paths:
|
194
|
+
- lib
|
195
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - ">="
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '0'
|
200
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
201
|
+
requirements:
|
202
|
+
- - ">="
|
203
|
+
- !ruby/object:Gem::Version
|
204
|
+
version: '0'
|
205
|
+
requirements: []
|
206
|
+
rubyforge_project:
|
207
|
+
rubygems_version: 2.4.5
|
208
|
+
signing_key:
|
209
|
+
specification_version: 4
|
210
|
+
summary: Specimens Quickly Extracted and Digitized, or just "squid". A ruby gem for
|
211
|
+
image related specimen accessioning.
|
212
|
+
test_files:
|
213
|
+
- spec/lib/sqed/boundaries_spec.rb
|
214
|
+
- spec/lib/sqed/boundary_finder/color_line_finder_spec.rb
|
215
|
+
- spec/lib/sqed/boundary_finder/cross_finder_spec.rb
|
216
|
+
- spec/lib/sqed/boundary_finder/stage_finder_spec.rb
|
217
|
+
- spec/lib/sqed/boundary_finder_spec.rb
|
218
|
+
- spec/lib/sqed/extractor_spec.rb
|
219
|
+
- spec/lib/sqed/parser_spec.rb
|
220
|
+
- spec/lib/sqed/result_spec.rb
|
221
|
+
- spec/lib/sqed_spec.rb
|
222
|
+
- spec/spec_helper.rb
|
223
|
+
- spec/support/files/2Dbarcode.png
|
224
|
+
- spec/support/files/CrossyBlackLinesSpecimen.jpg
|
225
|
+
- spec/support/files/CrossyGreenLinesSpecimen.jpg
|
226
|
+
- spec/support/files/Quadrant_2_3.jpg
|
227
|
+
- spec/support/files/black_stage_green_line_specimen.jpg
|
228
|
+
- spec/support/files/boundary_cross_green.jpg
|
229
|
+
- spec/support/files/boundary_left_t_yellow.jpg
|
230
|
+
- spec/support/files/boundary_offset_cross_red.jpg
|
231
|
+
- spec/support/files/boundary_right_t_green.jpg
|
232
|
+
- spec/support/files/greenlineimage.jpg
|
233
|
+
- spec/support/files/label_images/black_stage_green_line_specimen_label.jpg
|
234
|
+
- spec/support/files/test0.jpg
|
235
|
+
- spec/support/files/test1.jpg
|
236
|
+
- spec/support/files/test2.jpg
|
237
|
+
- spec/support/files/test3.jpg
|
238
|
+
- spec/support/files/test4.jpg
|
239
|
+
- spec/support/files/test4OLD.jpg
|
240
|
+
- spec/support/files/test_barcode.JPG
|
241
|
+
- spec/support/files/test_ocr0.jpg
|
242
|
+
- spec/support/files/types_21.jpg
|
243
|
+
- spec/support/files/types_8.jpg
|
244
|
+
- spec/support/image_helpers.rb
|