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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d47942c64d4e9dfee4eefdb864de8b537aad0166
4
- data.tar.gz: e6a282b0b85f83615315c291bf2cbf66fe26b15c
3
+ metadata.gz: 047c0529db7c52677c9ece993cbfbb76aad0e475
4
+ data.tar.gz: d700a6fffb703f94bcb1b5e0c3250b16b9b65894
5
5
  SHA512:
6
- metadata.gz: e53e4bbc42260cd2723eaa4ef917a2f8b1c99b8947bb3af3675beeffcee07ad6567c753a601a38b82e0ae86d27e103bd6b06de06d8517d38394b228dc606c64b
7
- data.tar.gz: 861e69ad4e87e8e7261f3020f4d9aef5c1ce1a2bf3962dae1ac4eef898ac5ddf27f85d3a53c3a448e04bd401305be79c5a014a0f5f9b099ea9f8fb94b1f23261
6
+ metadata.gz: c45f312e2c5d42706104997a101b9aa5bcc25b37ddd774260b337e16d5426f17bf75614fd17b662c8444beecdd5c79e9d7520060b98a665f90a61f830aeec599
7
+ data.tar.gz: 0c14d57039134180aa3f9f85d80e24fe3d4863eb4a1e6116e2f6bfd08d4e18ad8d031f7de7d0cf3cd87625db2f4f7bb27edfc034cee1b1c0962c3ca64a67cf0b
@@ -4,6 +4,7 @@ recent_ruby = RUBY_VERSION >= '2.4.1'
4
4
  raise 'IMPORTANT: sqed gem requires ruby >= 2.4.1' unless recent_ruby
5
5
 
6
6
  require 'rmagick'
7
+ require 'sqed_utils'
7
8
 
8
9
  # Instances take the following
9
10
  # 1) An :image @image
@@ -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
- # No specs for this yet
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 = corrected_frequency(Sqed::BoundaryFinder.color_boundary_finder(image: right_top_image, boundary_color: boundary_color), 1.8, right_top_image.columns) # vertical line b/w 1 & 2, use "corrected_frequency" to account for color bleed from previous crop
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(Sqed::BoundaryFinder.color_boundary_finder(image: right_bottom_image, scan: :columns, sample_subdivision_size: 2, boundary_color: boundary_color), 1.8, right_bottom_image.rows) # horizontal line b/w (5,3) & 4, use "corrected_frequency" to account for color bleed from previous crop
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
 
@@ -1,3 +1,3 @@
1
1
  class Sqed
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '0.4.2'.freeze
3
3
  end
@@ -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
 
@@ -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
@@ -35,6 +35,10 @@ module ImageHelpers
35
35
  get_image 'stage_images/inhs_7_slot.jpg'
36
36
  end
37
37
 
38
+ def lep_stage
39
+ get_image 'stage_images/lep_stage.jpg'
40
+ end
41
+
38
42
  def inhs_stage_7_slot2
39
43
  get_image 'stage_images/inhs_7_slot2.jpg'
40
44
  end
@@ -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 Extracted and Digitized, or just "squid". A ruby gem for image related specimen accessioning.}
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.0'
21
+ spec.add_dependency 'rake', '~> 12.3'
22
22
  spec.add_dependency 'rmagick', '~> 2.16'
23
- spec.add_dependency 'rtesseract', '~> 2.1.0'
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.6'
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', '~> 9.0.6'
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.1
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-03-23 00:00:00.000000000 Z
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.0'
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.0'
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.1.0
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.1.0
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.6'
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.6'
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: 9.0.6
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: 9.0.6
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 Extracted and Digitized, or just "squid". A ruby gem for
210
- image related specimen accessioning.
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