sqed 0.4.1 → 0.4.2
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 +4 -4
- data/lib/sqed.rb +1 -0
- data/lib/sqed/boundary_finder.rb +2 -49
- data/lib/sqed/boundary_finder/color_line_finder.rb +60 -3
- data/lib/sqed/version.rb +1 -1
- data/lib/sqed_config.rb +15 -1
- data/lib/sqed_utils.rb +60 -0
- data/spec/lib/sqed_utils_spec.rb +42 -0
- data/spec/lib/stage_handling/lep_stage_spec.rb +64 -0
- data/spec/support/files/stage_images/lep_stage.jpg +0 -0
- data/spec/support/image_helpers.rb +4 -0
- data/sqed.gemspec +5 -5
- metadata +19 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 047c0529db7c52677c9ece993cbfbb76aad0e475
|
4
|
+
data.tar.gz: d700a6fffb703f94bcb1b5e0c3250b16b9b65894
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c45f312e2c5d42706104997a101b9aa5bcc25b37ddd774260b337e16d5426f17bf75614fd17b662c8444beecdd5c79e9d7520060b98a665f90a61f830aeec599
|
7
|
+
data.tar.gz: 0c14d57039134180aa3f9f85d80e24fe3d4863eb4a1e6116e2f6bfd08d4e18ad8d031f7de7d0cf3cd87625db2f4f7bb27edfc034cee1b1c0962c3ca64a67cf0b
|
data/lib/sqed.rb
CHANGED
data/lib/sqed/boundary_finder.rb
CHANGED
@@ -119,8 +119,9 @@ class Sqed
|
|
119
119
|
# @param scan
|
120
120
|
# (:rows|:columns), :rows finds vertical borders, :columns finds horizontal borders
|
121
121
|
#
|
122
|
+
#
|
123
|
+
# image: image, sample_subdivision_size: nil, sample_cutoff_factor: nil, scan: :rows, boundary_color: :green)
|
122
124
|
def self.color_boundary_finder(**opts)
|
123
|
-
# image: image, sample_subdivision_size: nil, sample_cutoff_factor: nil, scan: :rows, boundary_color: :green)
|
124
125
|
image = opts[:image]
|
125
126
|
sample_subdivision_size = opts[:sample_subdivision_size]
|
126
127
|
sample_cutoff_factor = opts[:sample_cutoff_factor]
|
@@ -222,54 +223,6 @@ class Sqed
|
|
222
223
|
[hit_ranges.first, hit_ranges[(hit_ranges.length / 2).to_i], hit_ranges.last]
|
223
224
|
end
|
224
225
|
|
225
|
-
# @return [Array]
|
226
|
-
# like `[0,1,2]`
|
227
|
-
# If median-min or max-median * width_factor are different from one another (by more than width_factor) then replace the larger wth the median +/- 1/2 the smaller
|
228
|
-
# Given [10, 12, 20] and width_factor 2 the result will be [10, 12, 13]
|
229
|
-
#
|
230
|
-
def corrected_frequency(frequency_stats, width_factor = 3.0, max_width = nil)
|
231
|
-
v0 = frequency_stats[0]
|
232
|
-
m = frequency_stats[1]
|
233
|
-
v2 = frequency_stats[2]
|
234
|
-
|
235
|
-
width_pct = nil
|
236
|
-
|
237
|
-
# If the width of the detected line is > 5 percent then
|
238
|
-
# assume the center is good measure, and use an arbitrary percentage width.
|
239
|
-
if !max_width.nil?
|
240
|
-
width_pct = (v2 - v0).to_f / max_width.to_f
|
241
|
-
end
|
242
|
-
|
243
|
-
if !width_pct.nil? && width_pct >= 0.05
|
244
|
-
half_width = max_width * 0.025
|
245
|
-
z = [m - half_width, m, m + half_width]
|
246
|
-
return z
|
247
|
-
end
|
248
|
-
|
249
|
-
# a = m - v0
|
250
|
-
# b = v2 - m
|
251
|
-
|
252
|
-
# largest = (a > b ? a : b)
|
253
|
-
|
254
|
-
# c = a * width_factor
|
255
|
-
# d = b * width_factor
|
256
|
-
|
257
|
-
# if c > largest || d > largest
|
258
|
-
# e = c > largest ? ((m - b) / 2).to_i : v0
|
259
|
-
# f = d > largest ? ((m + a) / 2).to_i : v2
|
260
|
-
# [e, m, f]
|
261
|
-
# else
|
262
|
-
# frequency_stats
|
263
|
-
# end
|
264
|
-
|
265
|
-
if a * width_factor > largest
|
266
|
-
[(m - (v2 - m) / 2).to_i, m, v2]
|
267
|
-
elsif b * width_factor > largest
|
268
|
-
[v0, m, (m + (m - v0) / 2).to_i]
|
269
|
-
else
|
270
|
-
frequency_stats
|
271
|
-
end
|
272
|
-
end
|
273
226
|
|
274
227
|
# Returns an Integer, the maximum of the pairwise differences of the values in the array
|
275
228
|
# For example, given
|
@@ -30,7 +30,57 @@ class Sqed::BoundaryFinder::ColorLineFinder < Sqed::BoundaryFinder
|
|
30
30
|
def find_bands
|
31
31
|
case layout # boundaries.coordinates are referenced from stage image
|
32
32
|
|
33
|
-
|
33
|
+
# No specs for this yet
|
34
|
+
when :lep_stage
|
35
|
+
top_bottom_split = Sqed::BoundaryFinder.color_boundary_finder(image: image, scan: :columns, boundary_color: boundary_color) # detect vertical division [array]
|
36
|
+
left_right_split = Sqed::BoundaryFinder.color_boundary_finder(image: image, sample_subdivision_size: 2, boundary_color: boundary_color) # detect horizontal division [array]
|
37
|
+
|
38
|
+
boundaries.set(6, [0, top_bottom_split[2], left_right_split[0], image.rows - top_bottom_split[2]] )
|
39
|
+
|
40
|
+
left_top_image = image.crop( 0, 0, left_right_split[0], top_bottom_split[0], true)
|
41
|
+
|
42
|
+
left_top_split =
|
43
|
+
SqedUtils.corrected_frequency(
|
44
|
+
Sqed::BoundaryFinder.color_boundary_finder(image: left_top_image, boundary_color: boundary_color),
|
45
|
+
max_width: left_top_image.columns,
|
46
|
+
width_factor: 1.8
|
47
|
+
)
|
48
|
+
|
49
|
+
boundaries.set(0, [0, 0, left_top_split[1], top_bottom_split[0]] ) # keep as 1 for safety
|
50
|
+
|
51
|
+
boundaries.set(1, [left_top_split[2], 0, left_top_image.columns - left_top_split[2], top_bottom_split[0]] ) # <
|
52
|
+
|
53
|
+
boundaries.set(2, [left_right_split[2], 0, image.columns - left_right_split[0], top_bottom_split[0]] )
|
54
|
+
|
55
|
+
bottom_right_image = image.crop(left_right_split[2], top_bottom_split[2], image.columns - left_right_split[2], image.rows - top_bottom_split[2], true)
|
56
|
+
|
57
|
+
bottom_right_split =
|
58
|
+
SqedUtils.corrected_frequency(
|
59
|
+
Sqed::BoundaryFinder.color_boundary_finder(image: bottom_right_image, boundary_color: boundary_color, scan: :rows),
|
60
|
+
max_width: bottom_right_image.columns,
|
61
|
+
width_factor: 1.8
|
62
|
+
)
|
63
|
+
|
64
|
+
boundaries.set(3, [left_right_split[2] + bottom_right_split[2], top_bottom_split[2], image.columns - bottom_right_split[2], image.rows - top_bottom_split[2] ] )
|
65
|
+
|
66
|
+
bottom_right_left_image = image.crop(left_right_split[2], top_bottom_split[2], bottom_right_split[0], image.rows - top_bottom_split[2], true)
|
67
|
+
|
68
|
+
bottom_right_left_split =
|
69
|
+
SqedUtils.corrected_frequency(
|
70
|
+
Sqed::BoundaryFinder.color_boundary_finder(image: bottom_right_left_image, scan: :columns, boundary_color: boundary_color),
|
71
|
+
max_width: bottom_right_left_image.columns,
|
72
|
+
width_factor: 1.8
|
73
|
+
)
|
74
|
+
|
75
|
+
boundaries.set(4, [left_right_split[2], top_bottom_split[2], bottom_right_image.columns - bottom_right_left_image.columns, bottom_right_left_split[0] ] )
|
76
|
+
|
77
|
+
boundaries.set(5, [
|
78
|
+
left_right_split[2],
|
79
|
+
top_bottom_split[2] + bottom_right_left_split[2],
|
80
|
+
bottom_right_image.columns - bottom_right_left_image.columns,
|
81
|
+
bottom_right_left_image.rows - bottom_right_left_split[2]
|
82
|
+
])
|
83
|
+
|
34
84
|
when :seven_slot
|
35
85
|
top_bottom_split = Sqed::BoundaryFinder.color_boundary_finder(image: image, scan: :columns, boundary_color: boundary_color) # detect vertical division [array]
|
36
86
|
left_right_split = Sqed::BoundaryFinder.color_boundary_finder(image: image, sample_subdivision_size: 2, boundary_color: boundary_color) # detect horizontal division [array]
|
@@ -41,12 +91,19 @@ class Sqed::BoundaryFinder::ColorLineFinder < Sqed::BoundaryFinder
|
|
41
91
|
right_top_image = image.crop( left_right_split[2], 0, image.columns - left_right_split[2], top_bottom_split[0] , true) # sections 1,2
|
42
92
|
right_bottom_image = image.crop(left_right_split[2], top_bottom_split[2], image.columns - left_right_split[2], image.rows - top_bottom_split[2], true) # sections 3,4,5
|
43
93
|
|
44
|
-
right_top_split =
|
94
|
+
right_top_split = ::SqedUtils.corrected_frequency(
|
95
|
+
Sqed::BoundaryFinder.color_boundary_finder(image: right_top_image, boundary_color: boundary_color),
|
96
|
+
width_factor: 1.8,
|
97
|
+
max_width: right_top_image.columns
|
98
|
+
) # vertical line b/w 1 & 2, use "corrected_frequency" to account for color bleed from previous crop
|
45
99
|
|
46
100
|
boundaries.set(1, [left_right_split[2], 0, right_top_split[0], top_bottom_split[0]] )
|
47
101
|
boundaries.set(2, [left_right_split[2] + right_top_split[2], 0, right_top_image.columns - right_top_split[2], top_bottom_split[0]])
|
48
102
|
|
49
|
-
right_bottom_split = corrected_frequency(
|
103
|
+
right_bottom_split = SqedUtils.corrected_frequency(
|
104
|
+
Sqed::BoundaryFinder.color_boundary_finder(image: right_bottom_image, scan: :columns, sample_subdivision_size: 2, boundary_color: boundary_color),
|
105
|
+
width_factor: 1.8,
|
106
|
+
max_width: right_bottom_image.rows) # horizontal line b/w (5,3) & 4, use "corrected_frequency" to account for color bleed from previous crop
|
50
107
|
|
51
108
|
bottom_right_top_image = right_bottom_image.crop(0,0, image.columns - left_right_split[2], right_bottom_split[0], true) # 3,5
|
52
109
|
|
data/lib/sqed/version.rb
CHANGED
data/lib/sqed_config.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# require 'zxing'
|
2
2
|
|
3
|
+
require_relative 'sqed_utils'
|
4
|
+
|
3
5
|
require_relative 'sqed/parser'
|
4
6
|
require_relative 'sqed/parser/ocr_parser'
|
5
7
|
require_relative 'sqed/parser/barcode_parser'
|
@@ -62,6 +64,11 @@ module SqedConfig
|
|
62
64
|
# 6 |--------
|
63
65
|
# | 4
|
64
66
|
#
|
67
|
+
# 0 | 1 | 2
|
68
|
+
# ------------
|
69
|
+
# | 5 | :lep_stage
|
70
|
+
# 6 |---- 3
|
71
|
+
# | 4 |
|
65
72
|
#
|
66
73
|
# Hash values are used to stub out
|
67
74
|
# the Sqed::Boundaries instance.
|
@@ -74,7 +81,8 @@ module SqedConfig
|
|
74
81
|
right_t: [0, 1, 2],
|
75
82
|
left_t: [0, 1, 2],
|
76
83
|
internal_box: [0],
|
77
|
-
seven_slot: [0, 1, 2, 3, 4, 5, 6]
|
84
|
+
seven_slot: [0, 1, 2, 3, 4, 5, 6],
|
85
|
+
lep_stage: [0, 1, 2, 3, 4, 5, 6]
|
78
86
|
}.freeze
|
79
87
|
|
80
88
|
# Each element of the layout is a "section".
|
@@ -142,6 +150,12 @@ module SqedConfig
|
|
142
150
|
boundary_finder: Sqed::BoundaryFinder::ColorLineFinder,
|
143
151
|
layout: :seven_slot,
|
144
152
|
metadata_map: { 0 => :collecting_event_labels, 1 => :determination_labels, 2 => :other_labels, 3 => :image_registration, 4 => :curator_metadata, 5 => :identifier, 6 => :specimen }
|
153
|
+
},
|
154
|
+
|
155
|
+
lep_stage: {
|
156
|
+
boundary_finder: Sqed::BoundaryFinder::ColorLineFinder,
|
157
|
+
layout: :lep_stage,
|
158
|
+
metadata_map: { 0 => :curator_metadata, 1 => :collecting_event_labels, 2 => :image_registration, 3 => :identifier, 4 => :other_labels, 5 => :determination_labels, 6 => :specimen }
|
145
159
|
}
|
146
160
|
}.freeze
|
147
161
|
|
data/lib/sqed_utils.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'byebug'
|
2
|
+
|
3
|
+
# Functions that don't belong in Sqed proper
|
4
|
+
#
|
5
|
+
module SqedUtils
|
6
|
+
|
7
|
+
|
8
|
+
# @return [Array]
|
9
|
+
# like `[0,1,2]`
|
10
|
+
#
|
11
|
+
# @param frequency_stats [Array]
|
12
|
+
# like [1,2,3]
|
13
|
+
#
|
14
|
+
# @param max_width [Integer]
|
15
|
+
# required, the width of the image in question
|
16
|
+
#
|
17
|
+
# See tests. This code does a rough job of smoothing out boundaries that seem to
|
18
|
+
# be biased on one side or the other. Definitely could be refined to use a more
|
19
|
+
# weighted approach.
|
20
|
+
#
|
21
|
+
def self.corrected_frequency(frequency_stats, width_factor: 3.0, max_width: nil)
|
22
|
+
|
23
|
+
return frequency_stats if max_width.nil?
|
24
|
+
|
25
|
+
v0 = frequency_stats[0]
|
26
|
+
m = frequency_stats[1]
|
27
|
+
v2 = frequency_stats[2]
|
28
|
+
|
29
|
+
width_pct = (v2.to_f - v0.to_f) / max_width.to_f
|
30
|
+
|
31
|
+
return frequency_stats if (width_pct * 100) <= 2.0
|
32
|
+
|
33
|
+
a = (m - v0).abs
|
34
|
+
b = (v2 - m).abs
|
35
|
+
|
36
|
+
c = a * width_factor
|
37
|
+
d = b * width_factor
|
38
|
+
|
39
|
+
largest = (a > b ? a : b)
|
40
|
+
|
41
|
+
l = (m - b / 2)
|
42
|
+
l = 0 if l < 0
|
43
|
+
|
44
|
+
r = (m + a / 2)
|
45
|
+
r = max_width if r > max_width
|
46
|
+
|
47
|
+
x = a * width_factor
|
48
|
+
y = b * width_factor
|
49
|
+
|
50
|
+
[
|
51
|
+
x > largest ? l : v0,
|
52
|
+
m,
|
53
|
+
y > largest ? r : v2
|
54
|
+
]
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'sqed_utils'
|
2
|
+
|
3
|
+
describe SqedUtils do
|
4
|
+
|
5
|
+
context '.corrected_frequency' do
|
6
|
+
|
7
|
+
specify '[1,2,3]' do
|
8
|
+
expect(SqedUtils.corrected_frequency([1,2,3])).to eq([1,2,3] )
|
9
|
+
end
|
10
|
+
|
11
|
+
specify '[1,2,3], max_width: 100' do
|
12
|
+
expect(SqedUtils.corrected_frequency([1,2,3], max_width: 100)).to eq([1,2,3] )
|
13
|
+
end
|
14
|
+
|
15
|
+
specify '[90,100,1000], max_width: 2000' do
|
16
|
+
expect(SqedUtils.corrected_frequency([90,100,1000], max_width: 2000)).to eq([90, 100, 105] )
|
17
|
+
end
|
18
|
+
|
19
|
+
specify '[90,100,1000], max_width: 2000)' do
|
20
|
+
expect(SqedUtils.corrected_frequency([90,100,1000], max_width: 2000)).to eq([90, 100, 105] )
|
21
|
+
end
|
22
|
+
|
23
|
+
specify '[90,1000,1010], max_width: 2000)' do
|
24
|
+
expect(SqedUtils.corrected_frequency([90,1000,1010], max_width: 2000)).to eq([995, 1000, 1010] )
|
25
|
+
end
|
26
|
+
|
27
|
+
specify '[10, 12, 20], max_width: 2000' do
|
28
|
+
expect(SqedUtils.corrected_frequency([10, 12, 20], max_width: 2000)).to eq([10, 12, 20] )
|
29
|
+
end
|
30
|
+
|
31
|
+
specify '[10, 12, 20], max_width: 100)' do
|
32
|
+
expect(SqedUtils.corrected_frequency([10, 12, 20], max_width: 100)).to eq([10, 12, 13] )
|
33
|
+
end
|
34
|
+
|
35
|
+
specify '[10, 12, 20], max_width: 100, width_factor: 5)' do
|
36
|
+
expect(SqedUtils.corrected_frequency([1, 3, 10], max_width: 100, width_factor: 5)).to eq([0, 3, 4] )
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'handling lep stage images' do
|
4
|
+
|
5
|
+
let(:image) { ImageHelpers.lep_stage }
|
6
|
+
let(:sqed) do
|
7
|
+
Sqed.new(
|
8
|
+
image: image,
|
9
|
+
pattern: :lep_stage,
|
10
|
+
boundary_color: :red,
|
11
|
+
has_border: false )
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:m) do
|
15
|
+
{ 0 => :curator_metadata,
|
16
|
+
1 => :collecting_event_labels,
|
17
|
+
2 => :image_registration,
|
18
|
+
3 => :identifier,
|
19
|
+
4 => :other_labels,
|
20
|
+
5 => :determination_labels,
|
21
|
+
6 => :specimen
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'parses' do
|
26
|
+
specify 'new() without errors' do
|
27
|
+
expect(sqed).to be_truthy
|
28
|
+
end
|
29
|
+
|
30
|
+
specify 'get result without errors' do
|
31
|
+
expect(sqed.result).to be_truthy
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'trickier boundaries - without thumbnail' do
|
36
|
+
let(:s) { Sqed.new(image: ImageHelpers.lep_stage, use_thumbnail: false, pattern: :lep_stage, boundary_color: :red, has_border: false ) }
|
37
|
+
|
38
|
+
specify 'boundaries are reasonable' do
|
39
|
+
s.result
|
40
|
+
c = s.boundaries.coordinates
|
41
|
+
c.each do |section, values|
|
42
|
+
c[section].each_with_index do |v, i|
|
43
|
+
msg = "section #{section}, index #{i} has a bad value '#{v}'"
|
44
|
+
expect(v > -1).to be_truthy, msg
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'trickier boundaries - with_thumbnail' do
|
51
|
+
let(:s) { Sqed.new(image: ImageHelpers.lep_stage, use_thumbnail: true, pattern: :lep_stage, boundary_color: :red, has_border: false ) }
|
52
|
+
|
53
|
+
specify 'boundaries are reasonable' do
|
54
|
+
s.result
|
55
|
+
c = s.boundaries.coordinates
|
56
|
+
c.each do |section, values|
|
57
|
+
c[section].each_with_index do |v, i|
|
58
|
+
msg = "section #{section}, index #{i} has a bad value '#{v}'"
|
59
|
+
expect(v > -1).to be_truthy, msg
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
Binary file
|
data/sqed.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Sqed::VERSION
|
9
9
|
spec.authors = ["Matt Yoder", "Rich Flood"]
|
10
10
|
spec.email = ["diapriid@gmail.com"]
|
11
|
-
spec.summary = %q{Specimens Quickly
|
11
|
+
spec.summary = %q{Specimens Quickly extracted and Digitized, or just "squid". A ruby gem for image based specimen accessioning.}
|
12
12
|
spec.description = %q{A utility gem to aid in the processing of images taken in the process of digitizing natural history collections.}
|
13
13
|
spec.homepage = "http://github.com/SpeciesFileGroup/sqed"
|
14
14
|
spec.license = "NCSA"
|
@@ -18,17 +18,17 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency 'rake', '~> 12.
|
21
|
+
spec.add_dependency 'rake', '~> 12.3'
|
22
22
|
spec.add_dependency 'rmagick', '~> 2.16'
|
23
|
-
spec.add_dependency 'rtesseract', '~> 2.
|
23
|
+
spec.add_dependency 'rtesseract', '~> 2.2.0'
|
24
24
|
|
25
25
|
# A qrcode reader, too many problems with compiling, dependencies
|
26
26
|
# spec.add_dependency 'zxing_cpp', '~> 0.1.0'
|
27
27
|
|
28
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
28
|
+
spec.add_development_dependency 'rspec', '~> 3.8'
|
29
29
|
spec.add_development_dependency 'bundler', '~> 1.5'
|
30
30
|
# spec.add_development_dependency 'did_you_mean', '~> 0.9'
|
31
|
-
spec.add_development_dependency 'byebug', '~>
|
31
|
+
spec.add_development_dependency 'byebug', '~> 10.0.0'
|
32
32
|
spec.add_development_dependency 'awesome_print', '~> 1.8'
|
33
33
|
end
|
34
34
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sqed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Yoder
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-09-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '12.
|
20
|
+
version: '12.3'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '12.
|
27
|
+
version: '12.3'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rmagick
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -45,28 +45,28 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 2.
|
48
|
+
version: 2.2.0
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 2.
|
55
|
+
version: 2.2.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: rspec
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '3.
|
62
|
+
version: '3.8'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '3.
|
69
|
+
version: '3.8'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: bundler
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,14 +87,14 @@ dependencies:
|
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: 10.0.0
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: 10.0.0
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: awesome_print
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- lib/sqed/result.rb
|
140
140
|
- lib/sqed/version.rb
|
141
141
|
- lib/sqed_config.rb
|
142
|
+
- lib/sqed_utils.rb
|
142
143
|
- spec/lib/sqed/boundaries_spec.rb
|
143
144
|
- spec/lib/sqed/boundary_finder/color_line_finder_spec.rb
|
144
145
|
- spec/lib/sqed/boundary_finder/cross_finder_spec.rb
|
@@ -150,6 +151,8 @@ files:
|
|
150
151
|
- spec/lib/sqed/parser_spec.rb
|
151
152
|
- spec/lib/sqed/result_spec.rb
|
152
153
|
- spec/lib/sqed_spec.rb
|
154
|
+
- spec/lib/sqed_utils_spec.rb
|
155
|
+
- spec/lib/stage_handling/lep_stage_spec.rb
|
153
156
|
- spec/lib/stage_handling/seven_slot_spec.rb
|
154
157
|
- spec/spec_helper.rb
|
155
158
|
- spec/support/files/barcode_images/code_128_barcode.png
|
@@ -175,6 +178,7 @@ files:
|
|
175
178
|
- spec/support/files/stage_images/inhs_7_slot.jpg
|
176
179
|
- spec/support/files/stage_images/inhs_7_slot2.jpg
|
177
180
|
- spec/support/files/stage_images/inhs_four_thirds.jpg
|
181
|
+
- spec/support/files/stage_images/lep_stage.jpg
|
178
182
|
- spec/support/files/test0.jpg
|
179
183
|
- spec/support/files/test1.jpg
|
180
184
|
- spec/support/files/test2.jpg
|
@@ -206,8 +210,8 @@ rubyforge_project:
|
|
206
210
|
rubygems_version: 2.6.14
|
207
211
|
signing_key:
|
208
212
|
specification_version: 4
|
209
|
-
summary: Specimens Quickly
|
210
|
-
image
|
213
|
+
summary: Specimens Quickly extracted and Digitized, or just "squid". A ruby gem for
|
214
|
+
image based specimen accessioning.
|
211
215
|
test_files:
|
212
216
|
- spec/lib/sqed/boundaries_spec.rb
|
213
217
|
- spec/lib/sqed/boundary_finder/color_line_finder_spec.rb
|
@@ -220,6 +224,8 @@ test_files:
|
|
220
224
|
- spec/lib/sqed/parser_spec.rb
|
221
225
|
- spec/lib/sqed/result_spec.rb
|
222
226
|
- spec/lib/sqed_spec.rb
|
227
|
+
- spec/lib/sqed_utils_spec.rb
|
228
|
+
- spec/lib/stage_handling/lep_stage_spec.rb
|
223
229
|
- spec/lib/stage_handling/seven_slot_spec.rb
|
224
230
|
- spec/spec_helper.rb
|
225
231
|
- spec/support/files/barcode_images/code_128_barcode.png
|
@@ -245,6 +251,7 @@ test_files:
|
|
245
251
|
- spec/support/files/stage_images/inhs_7_slot.jpg
|
246
252
|
- spec/support/files/stage_images/inhs_7_slot2.jpg
|
247
253
|
- spec/support/files/stage_images/inhs_four_thirds.jpg
|
254
|
+
- spec/support/files/stage_images/lep_stage.jpg
|
248
255
|
- spec/support/files/test0.jpg
|
249
256
|
- spec/support/files/test1.jpg
|
250
257
|
- spec/support/files/test2.jpg
|