ruby_marks 0.2.9 → 0.3.0

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.
@@ -7,7 +7,7 @@ module RubyMarks
7
7
  :default_mark_width, :default_mark_height, :scan_timeout,
8
8
  :default_mark_width_tolerance, :default_mark_height_tolerance,
9
9
  :default_distance_between_marks, :default_expected_lines,
10
- :default_block_width_tolerance, :default_block_height_tolerance
10
+ :default_block_width_tolerance, :default_block_height_tolerance, :scan_mode
11
11
 
12
12
 
13
13
  def initialize(recognizer)
@@ -135,8 +135,12 @@ module RubyMarks
135
135
  block = find_block_marks(file_str, group_center[:x], group_center[:y], group)
136
136
  if block
137
137
  group.coordinates = {x1: block[:x1], x2: block[:x2], y1: block[:y1], y2: block[:y2]}
138
-
139
- marks_blocks = find_marks(original_file_str, group)
138
+
139
+ if @config.scan_mode == :grid
140
+ marks_blocks = find_marks_grid(group)
141
+ else
142
+ marks_blocks = find_marks(original_file_str, group)
143
+ end
140
144
  marks_blocks.sort!{ |a,b| a[:y1] <=> b[:y1] }
141
145
  mark_ant = nil
142
146
  marks_blocks.each do |mark|
@@ -294,6 +298,26 @@ module RubyMarks
294
298
  end
295
299
  end
296
300
 
301
+ def find_marks_grid(group)
302
+ block = group.coordinates
303
+ blocks = []
304
+ blocks.tap do |blocks|
305
+ block_width = RubyMarks::ImageUtils.calc_width(block[:x1], block[:x2])
306
+ block_height = RubyMarks::ImageUtils.calc_height(block[:y1], block[:y2])
307
+ lines = @config.default_expected_lines
308
+ columns = @config.default_marks_options.size
309
+ distance_lin = block_height / lines
310
+ distance_col = block_width / columns
311
+ lines.times do |lin|
312
+ columns.times do |col|
313
+ blocks << { :x1 => block[:x1] + (col * distance_col),
314
+ :y1 => block[:y1] + (lin * distance_lin),
315
+ :x2 => block[:x1] + (col * distance_col) + distance_col,
316
+ :y2 => block[:y1] + (lin * distance_lin) + distance_col }
317
+ end
318
+ end
319
+ end
320
+ end
297
321
 
298
322
  def find_marks(image, group)
299
323
  block = group.coordinates
@@ -1,3 +1,3 @@
1
1
  module RubyMarks
2
- VERSION = "0.2.9".freeze
2
+ VERSION = "0.3.0".freeze
3
3
  end
@@ -0,0 +1,97 @@
1
+ require "test_helper"
2
+
3
+ class RubyMarks::RecognizerGridTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @file = 'assets/sheet_demo_grid.png'
7
+ @recognizer = RubyMarks::Recognizer.new
8
+ @positions = {}
9
+ @positions[:marked_position] = {x: 161, y: 794}
10
+ @positions[:unmarked_position] = {x: 161, y: 994}
11
+
12
+ @recognizer.configure do |config|
13
+
14
+ config.scan_mode = :grid
15
+ config.default_expected_lines = 5
16
+ config.intensity_percentual = 25
17
+
18
+ config.define_group :um do |group|
19
+ group.expected_coordinates = {x1: 100, y1: 200, x2: 250, y2: 350}
20
+ end
21
+
22
+ config.define_group :dois do |group|
23
+ group.expected_coordinates = {x1: 350, y1: 200, x2: 500, y2: 350}
24
+ end
25
+
26
+ config.define_group :tres do |group|
27
+ group.expected_coordinates = {x1: 570, y1: 200, x2: 720, y2: 350}
28
+ end
29
+
30
+ config.define_group :quatro do |group|
31
+ group.expected_coordinates = {x1: 790, y1: 200, x2: 940, y2: 350}
32
+ end
33
+
34
+ config.define_group :cinco do |group|
35
+ group.expected_coordinates = {x1: 1010, y1: 200, x2: 1160, y2: 350}
36
+ end
37
+ end
38
+
39
+ @recognizer.file = @file
40
+
41
+ end
42
+
43
+ def test_should_return_the_recognizer_with_all_marks_flagged
44
+ flagged_recognizer = @recognizer.flag_all_marks
45
+ assert_equal Magick::Image, flagged_recognizer.class
46
+
47
+ temp_filename = "sheet_demo_grid2.png"
48
+ File.delete(temp_filename) if File.exist?(temp_filename)
49
+ flagged_recognizer.write(temp_filename)
50
+ end
51
+
52
+ def test_should_scan_the_recognizer_and_get_a_hash_of_marked_marks
53
+ expected_hash = {
54
+ um: {
55
+ 1 => ['B'],
56
+ 2 => ['B'],
57
+ 3 => ['A'],
58
+ 4 => ['B'],
59
+ 5 => ['A']
60
+ },
61
+ dois: {
62
+ 1 => ['D'],
63
+ 2 => ['A'],
64
+ 3 => ['C'],
65
+ 4 => ['A'],
66
+ 5 => ['D']
67
+ },
68
+ tres: {
69
+ 1 => ['B'],
70
+ 2 => ['A'],
71
+ 3 => ['A'],
72
+ 4 => ['A'],
73
+ 5 => ['B']
74
+ },
75
+ quatro: {
76
+ 1 => ['B'],
77
+ 2 => ['C'],
78
+ 3 => ['A'],
79
+ 4 => ['C'],
80
+ 5 => ['E']
81
+ },
82
+ cinco: {
83
+ 1 => ['A'],
84
+ 2 => ['B'],
85
+ 3 => ['A'],
86
+ 4 => ['A'],
87
+ 5 => ['C']
88
+ }
89
+ }
90
+ result = @recognizer.scan
91
+ result.each_pair do |group, lines|
92
+ lines.delete_if { |line, value| value.empty? }
93
+ end
94
+ result.delete_if { |group, lines| lines.empty? }
95
+ assert_equal expected_hash, result
96
+ end
97
+ end
@@ -10,6 +10,7 @@ class RubyMarks::RecognizerTest < Test::Unit::TestCase
10
10
  @positions[:unmarked_position] = {x: 161, y: 994}
11
11
 
12
12
  @recognizer.configure do |config|
13
+ config.scan_mode = :grid
13
14
  config.define_group :first do |group|
14
15
  group.expected_coordinates = {x1: 145, y1: 780, x2: 270, y2: 1290}
15
16
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_marks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -37,19 +37,20 @@ extensions: []
37
37
  extra_rdoc_files: []
38
38
  files:
39
39
  - README.md
40
- - lib/ruby_marks/config.rb
41
- - lib/ruby_marks/group.rb
42
- - lib/ruby_marks/image_utils.rb
43
- - lib/ruby_marks/mark.rb
44
- - lib/ruby_marks/recognizer.rb
45
- - lib/ruby_marks/support.rb
40
+ - lib/ruby_marks.rb
46
41
  - lib/ruby_marks/version.rb
42
+ - lib/ruby_marks/support.rb
43
+ - lib/ruby_marks/mark.rb
44
+ - lib/ruby_marks/group.rb
47
45
  - lib/ruby_marks/watcher.rb
48
- - lib/ruby_marks.rb
49
- - test/ruby_marks/image_utils_test.rb
46
+ - lib/ruby_marks/recognizer.rb
47
+ - lib/ruby_marks/config.rb
48
+ - lib/ruby_marks/image_utils.rb
49
+ - test/test_helper.rb
50
50
  - test/ruby_marks/recognizer_test.rb
51
+ - test/ruby_marks/recognizer_grid_test.rb
51
52
  - test/ruby_marks/watcher_test.rb
52
- - test/test_helper.rb
53
+ - test/ruby_marks/image_utils_test.rb
53
54
  homepage: https://github.com/andrerpbts/ruby_marks.git
54
55
  licenses:
55
56
  - MIT
@@ -77,12 +78,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
78
  version: '0'
78
79
  requirements: []
79
80
  rubyforge_project: ruby_marks
80
- rubygems_version: 1.8.24
81
+ rubygems_version: 1.8.25
81
82
  signing_key:
82
83
  specification_version: 3
83
84
  summary: A simple OMR tool
84
85
  test_files:
85
- - test/ruby_marks/image_utils_test.rb
86
+ - test/test_helper.rb
86
87
  - test/ruby_marks/recognizer_test.rb
88
+ - test/ruby_marks/recognizer_grid_test.rb
87
89
  - test/ruby_marks/watcher_test.rb
88
- - test/test_helper.rb
90
+ - test/ruby_marks/image_utils_test.rb