mork 0.1.3 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/mork.gemspec CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |s|
18
18
  s.require_paths = ["lib"]
19
19
 
20
20
  # dependencies:
21
- s.add_dependency 'narray', '~> 0.6'
22
- s.add_dependency 'rmagick', '~> 2.13'
23
- s.add_runtime_dependency 'prawn', '~> 1.3', '>= 1.3.0'
21
+ s.add_dependency 'narray', '~> 0.6'
22
+ s.add_dependency 'mini_magick', '~> 3.8'
23
+ s.add_dependency 'prawn', '~> 1.3'
24
24
  s.add_development_dependency 'rake', '~> 10.3'
25
25
  s.add_development_dependency 'rspec', '~> 3.1'
26
26
  s.add_development_dependency 'guard', '~> 2.6'
@@ -2,73 +2,76 @@ require 'spec_helper'
2
2
 
3
3
  module Mork
4
4
  describe GridOMR do
5
- let(:grom) { GridOMR.new 1601, 2281, 'spec/samples/layout.yml' }
5
+ before(:each) do
6
+ @grom = GridOMR.new 'spec/samples/layout.yml'
7
+ @grom.set_page_size 1601, 2281
8
+ end
6
9
 
7
10
  describe '#choice_cell_area' do
8
11
  it 'returns the coordinates of the first choice cell' do
9
- grom.choice_cell_area(0,0).should == {x: 63, y: 436, w: 51, h: 41}
12
+ @grom.choice_cell_area(0,0).should == {x: 63, y: 436, w: 51, h: 41}
10
13
  end
11
14
 
12
15
  it 'returns the coordinates of the last choice cell' do
13
- grom.choice_cell_area(119,4).should == {x: 1411, y: 2108, w: 51, h: 41}
16
+ @grom.choice_cell_area(119,4).should == {x: 1411, y: 2108, w: 51, h: 41}
14
17
  end
15
18
  end
16
19
 
17
20
  describe '#barcode_bit_area' do
18
21
  # it 'returns the coordinates of the first barcode bit area' do
19
- # grom.barcode_bit_area(0).should == {x: 160, y: 2260, w: 25, h: 21}
22
+ # @grom.barcode_bit_area(0).should == {x: 160, y: 2260, w: 25, h: 21}
20
23
  # end
21
24
  #
22
25
  # it 'returns the coordinates of the last barcode bit area' do
23
- # grom.barcode_bit_area(39).should == {x: 1475, y: 2260, w: 25, h: 21}
26
+ # @grom.barcode_bit_area(39).should == {x: 1475, y: 2260, w: 25, h: 21}
24
27
  # end
25
28
  #
26
29
  # it 'fails if an invalid barcode bit is requested' do
27
- # lambda { grom.barcode_bit_area(40) }.should raise_error
30
+ # lambda { @grom.barcode_bit_area(40) }.should raise_error
28
31
  # end
29
32
  end
30
33
 
31
34
  describe '#rm_search_area' do
32
35
  context 'on the first iteration' do
33
36
  it 'returns an {:x, :y, :w, :h} hash of coordinates in pixels for the :tl reg_mark corner' do
34
- c = grom.rm_search_area :tl, 0
37
+ c = @grom.rm_search_area :tl, 0
35
38
  c.should == {x: 15, y: 15, w: 91, h: 92}
36
39
  end
37
40
 
38
41
  it 'returns an {:x, :y, :w, :h} hash of coordinates in pixels for the :tr reg_mark corner' do
39
- c = grom.rm_search_area :tr, 0
42
+ c = @grom.rm_search_area :tr, 0
40
43
  c.should == { x: 1494, y: 15, w: 91, h: 92 }
41
44
  end
42
45
 
43
46
  it 'returns an {:x, :y, :w, :h} hash of coordinates in pixels for the :br reg_mark corner' do
44
- c = grom.rm_search_area :br, 0
47
+ c = @grom.rm_search_area :br, 0
45
48
  c.should == { x: 1494, y: 2173, w: 91, h: 92 }
46
49
  end
47
50
 
48
51
  it 'returns an {:x, :y, :w, :h} hash of coordinates in pixels for the :bl reg_mark corner' do
49
- c = grom.rm_search_area :bl, 0
52
+ c = @grom.rm_search_area :bl, 0
50
53
  c.should == { x: 15, y: 2173, w: 91, h: 92 }
51
54
  end
52
55
  end
53
56
 
54
57
  context 'on the third iteration' do
55
58
  it 'returns an {:x, :y, :w, :h} hash of coordinates in pixels for the :tl reg_mark corner' do
56
- c = grom.rm_search_area :tl, 2
59
+ c = @grom.rm_search_area :tl, 2
57
60
  c.should == { x: 15, y: 15, w: 130, h: 131 }
58
61
  end
59
62
 
60
63
  it 'returns an {:x, :y, :w, :h} hash of coordinates in pixels for the :tr reg_mark corner' do
61
- c = grom.rm_search_area :tr, 2
64
+ c = @grom.rm_search_area :tr, 2
62
65
  c.should == { x: 1456, y: 15, w: 130, h: 131 }
63
66
  end
64
67
 
65
68
  it 'returns an {:x, :y, :w, :h} hash of coordinates in pixels for the :br reg_mark corner' do
66
- c = grom.rm_search_area :br, 2
69
+ c = @grom.rm_search_area :br, 2
67
70
  c.should == { x: 1456, y: 2135, w: 130, h: 131 }
68
71
  end
69
72
 
70
73
  it 'returns an {:x, :y, :w, :h} hash of coordinates in pixels for the :bl reg_mark corner' do
71
- c = grom.rm_search_area :bl, 2
74
+ c = @grom.rm_search_area :bl, 2
72
75
  c.should == { x: 15, y: 2135, w: 130, h: 131 }
73
76
  end
74
77
  end
@@ -76,46 +79,46 @@ module Mork
76
79
 
77
80
  describe '#rm_edgy_x' do
78
81
  it 'returns the minimum acceptable number of pixels from the regmark center to the edge of the rm_search_area' do
79
- grom.rm_edgy_x.should == 24
82
+ @grom.rm_edgy_x.should == 24
80
83
  end
81
84
  it 'returns an integer' do
82
- grom.rm_edgy_x.should be_a Fixnum
85
+ @grom.rm_edgy_x.should be_a Fixnum
83
86
  end
84
87
  end
85
88
 
86
89
  describe '#rm_edgy_y' do
87
90
  it 'returns the minimum acceptable number of pixels from the regmark center to the edge of the rm_search_area' do
88
- grom.rm_edgy_y.should == 24
91
+ @grom.rm_edgy_y.should == 24
89
92
  end
90
93
  it 'returns an integer' do
91
- grom.rm_edgy_y.should be_a Fixnum
94
+ @grom.rm_edgy_y.should be_a Fixnum
92
95
  end
93
96
  end
94
97
 
95
98
  describe '#rm_max_search_area_side' do
96
99
  it 'returns the maximum extent of the regmark search area, 1/4 of the raw image horizontal pixels' do
97
- grom.rm_max_search_area_side.should == 400
100
+ @grom.rm_max_search_area_side.should == 400
98
101
  end
99
102
  it 'returns an integer' do
100
- grom.rm_max_search_area_side.should be_a Fixnum
103
+ @grom.rm_max_search_area_side.should be_a Fixnum
101
104
  end
102
105
  end
103
106
 
104
107
  describe '#max_choices_per_question' do
105
108
  it 'returns the maximum number of choice cells per question' do
106
- grom.max_choices_per_question.should == 5
109
+ @grom.max_choices_per_question.should == 5
107
110
  end
108
111
  end
109
112
 
110
113
  describe '#paper_white_area' do
111
114
  it 'returns the coordinates of the white area used for barcode calibration' do
112
- grom.paper_white_area.should == {x: 93, y: 2260, w: 25, h: 21}
115
+ @grom.paper_white_area.should == {x: 93, y: 2260, w: 25, h: 21}
113
116
  end
114
117
  end
115
118
 
116
119
  describe '#ink_black_area' do
117
120
  it 'returns the coordinates of the barcode calibration bar' do
118
- grom.ink_black_area.should == {x: 126, y: 2260, w: 25, h: 21}
121
+ @grom.ink_black_area.should == {x: 126, y: 2260, w: 25, h: 21}
119
122
  end
120
123
  end
121
124
  end
@@ -1,37 +1,37 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Mork
4
- describe MimageList do
5
- before(:all) do
6
- tpg = sample_img(:two_pages)
7
- @mlist = MimageList.new(tpg.filename)
8
- end
9
-
10
- describe ".new" do
11
- it "should raise an error unless called with a string" do
12
- lambda {
13
- MimageList.new(666)
14
- }.should raise_error
15
- end
16
- end
17
-
18
- describe "[]" do
19
- it "should return the 1st mimage in the stack" do
20
- @mlist[0].should be_a(Mimage)
21
- end
22
-
23
- it "should return the last mimage in the stack" do
24
- @mlist[1].should be_a(Mimage)
25
- end
26
- end
27
-
28
- describe "each" do
29
- it "should loop over all images" do
30
- @mlist.each do |m|
31
- puts m.inspect
32
- m.should be_a(Mimage)
33
- end
34
- end
35
- end
36
- end
4
+ # describe MimageList do
5
+ # before(:all) do
6
+ # tpg = sample_img(:two_pages)
7
+ # @mlist = MimageList.new(tpg.filename)
8
+ # end
9
+ #
10
+ # describe ".new" do
11
+ # it "should raise an error unless called with a string" do
12
+ # lambda {
13
+ # MimageList.new(666)
14
+ # }.should raise_error
15
+ # end
16
+ # end
17
+ #
18
+ # describe "[]" do
19
+ # it "should return the 1st mimage in the stack" do
20
+ # @mlist[0].should be_a(Mimage)
21
+ # end
22
+ #
23
+ # it "should return the last mimage in the stack" do
24
+ # @mlist[1].should be_a(Mimage)
25
+ # end
26
+ # end
27
+ #
28
+ # describe "each" do
29
+ # it "should loop over all images" do
30
+ # @mlist.each do |m|
31
+ # puts m.inspect
32
+ # m.should be_a(Mimage)
33
+ # end
34
+ # end
35
+ # end
36
+ # end
37
37
  end
@@ -2,46 +2,47 @@ require 'spec_helper'
2
2
 
3
3
  module Mork
4
4
  describe Mimage do
5
- let(:smp) { sample_img(:sample01) }
6
- let(:mim) { Mimage.new(smp.filename) }
5
+ let(:sgi) { sample_img 'sample-gray' }
6
+ let(:sg) { Mimage.new sgi.filename, GridOMR.new(sgi.grid_file) }
7
7
 
8
- describe ".new" do
9
- it "should create a Mimage from a string pointing to an existing bitmap file" do
10
- mim.should be_a(Mimage)
8
+ describe 'basics' do
9
+ it 'returns the width' do
10
+ expect(sg.width).to eq sgi.width
11
11
  end
12
- it "should create a Mimage from an existing Magick::ImageList object" do
13
- i = Magick::ImageList.new smp.filename
14
- Mimage.new(i).should be_a(Mimage)
12
+
13
+ it 'returns the height' do
14
+ expect(sg.height).to eq sgi.height
15
15
  end
16
- it "should create a Mimage from an existing Magick::Image object" do
17
- i = Magick::ImageList.new smp.filename
18
- Mimage.new(i.first).should be_a(Mimage)
16
+
17
+ it 'returns the pixels as an array' do
18
+ expect(sg.send :raw_pixels).to be_a NPatch
19
19
  end
20
- it "should raise an error if called with a fixnum" do
21
- lambda { Mimage.new 1 }.should raise_error
20
+
21
+ it 'returns the correct number of pixels' do
22
+ expect(sg.send(:raw_pixels).length).to eq sgi.width * sgi.height
22
23
  end
23
- end
24
-
25
- describe "#crop" do
26
- it "should return a Mimage" do
27
- mim.crop({x: 0, y: 0, w: 10, h: 10}).should be_a(Mimage)
28
- end
29
- it "should return a Mimage of the correct width" do
30
- i = mim.crop({x: 0, y: 0, w: 20, h: 10})
31
- i.width.should == 20
24
+
25
+ it 'returns the stretched array' do
26
+ expect(sg.send(:reg_pixels).length).to eq sgi.width * sgi.height
32
27
  end
33
- it "should return a Mimage of the correct height" do
34
- i = mim.crop({x: 0, y: 0, w: 10, h: 10})
35
- i.height.should == 10
28
+
29
+ it 'raises an error if the file is not found' do
30
+ expect { Mimage.new 'non_existing_file' }.to raise_error
36
31
  end
37
32
  end
38
-
39
- describe "#crop!" do
40
- it "should reduce the Mimage to the correct width" do
41
- mim.crop!({x: 0, y: 0, w: 20, h: 10}).width.should == 20
42
- end
43
- it "should reduce the Mimage to the correct height" do
44
- mim.crop!({x: 0, y: 0, w: 20, h: 10}).height.should == 10
33
+
34
+ describe 'inspecting' do
35
+ it 'writes out average whiteness of choice cells' do
36
+ qz = sample_img 'silvia'
37
+ s = Mimage.new qz.filename, GridOMR.new(qz.grid_file)
38
+ File.open('spec/out/choices.txt', 'w') do |f|
39
+ 120.times do |q|
40
+ t = (0..4).collect do |c|
41
+ s.send(:shade_of, q, c).round
42
+ end
43
+ f.puts "#{q+1}: #{t.join(' ')}"
44
+ end
45
+ end
45
46
  end
46
47
  end
47
48
  end
@@ -2,26 +2,49 @@ require 'spec_helper'
2
2
 
3
3
  module Mork
4
4
  describe NPatch do
5
- let(:rgm) { sample_img(:reg_mark) }
6
- let(:mim) { Mimage.new(rgm.filename) }
5
+ let(:rm) { NPatch.new 'spec/samples/rm01.jpeg', 134, 104 }
7
6
 
8
7
  describe ".new" do
9
8
  it "should create an NPatch" do
10
- NPatch.new(mim).should be_an(NPatch)
9
+ expect(rm).to be_an NPatch
11
10
  end
12
11
  end
13
12
 
14
- describe "#dark_centroid" do
15
- it "should return the correct X" do
16
- x, y = NPatch.new(mim).dark_centroid
17
- x.should == rgm.info["centroid_x"]
13
+ describe '#dark_centroid' do
14
+ it 'computes centers for rm01' do
15
+ np = NPatch.new 'spec/samples/rm01.jpeg', 134, 104
16
+ expect(np.dark_centroid).to eq [50, 60]
17
+ np = NPatch.new 'spec/samples/rm02.jpeg', 114, 117
18
+ expect(np.dark_centroid).to eq [69, 71]
19
+ np = NPatch.new 'spec/samples/rm03.jpeg', 124, 105
20
+ expect(np.dark_centroid).to eq [71, 61]
21
+ np = NPatch.new 'spec/samples/rm04.jpeg', 144, 117
22
+ expect(np.dark_centroid).to eq [84, 52]
23
+ np = NPatch.new 'spec/samples/rm05.jpeg', 144, 117
24
+ expect(np.dark_centroid).to eq [84, 52]
18
25
  end
19
-
20
- it "should return the correct Y" do
21
- x, y = NPatch.new(mim).dark_centroid
22
- y.should == rgm.info["centroid_y"]
26
+ end
27
+
28
+ describe '#average' do
29
+ it 'works' do
30
+ c = {x: 30, y: 35, w: 46, h: 46}
31
+ puts rm.average c
32
+ c = {x: 85, y: 10, w: 46, h: 46}
33
+ puts rm.average c
23
34
  end
24
35
  end
36
+
37
+ # describe "#dark_centroid" do
38
+ # it "should return the correct X" do
39
+ # x, y = NPatch.new(mim).dark_centroid
40
+ # x.should == rgm.info["centroid_x"]
41
+ # end
42
+ #
43
+ # it "should return the correct Y" do
44
+ # x, y = NPatch.new(mim).dark_centroid
45
+ # y.should == rgm.info["centroid_y"]
46
+ # end
47
+ # end
25
48
  end
26
49
  end
27
50
 
@@ -2,61 +2,58 @@ require 'spec_helper'
2
2
 
3
3
  module Mork
4
4
  describe SheetOMR do
5
+
5
6
  context 'highlighting' do
6
7
  # since these specs change the @crop, they must be run in isolation
7
8
  # with the SheetOMR rebuilt each time, even though it is time consuming!
8
- let(:sheet) { SheetOMR.new 'spec/samples/sample_gray.jpg', 'spec/samples/layout.yml' }
9
+ let(:shinfo) { sample_img 'sample-gray' }
10
+ let(:sheet) { SheetOMR.new shinfo.filename, shinfo.grid_file }
9
11
 
10
12
  it 'highlights the registration areas and frame' do
11
- sheet.highlight_reg_area
13
+ sheet.highlight_registration
12
14
  sheet.write_raw 'spec/out/reg_areas.jpg'
13
15
  end
14
16
 
15
- it 'should highlight all areas' do
16
- sheet.highlight_all
17
+ it 'highlights all choice cells' do
18
+ sheet.highlight_all_choices
17
19
  sheet.write 'spec/out/all_highlights.jpg'
18
20
  end
19
21
 
20
- it 'should highlight marked cells and outline correct responses' do
22
+ it 'highlights marked cells' do
21
23
  sheet.highlight_marked
22
- sheet.outline [[1],[1],[2],[2],[3,4],[],[0,1,2,3,4]]
23
24
  sheet.write 'spec/out/marked_highlights.jpg'
24
25
  end
26
+
27
+ it 'outlines some responses' do
28
+ sheet.outline [[1],[1],[2],[2],[3,4],[],[0,1,2,3,4], [],[1],[2],[2],[3,4],[],[0,1,2,3,4]]
29
+ sheet.write 'spec/out/outlines.jpg'
30
+ end
31
+
32
+ it 'highlights marked cells and outline correct responses', focus: true do
33
+ sheet.highlight_marked
34
+ sheet.outline [[1],[1],[2],[2],[3,4],[],[0,1,2,3,4], [],[1],[2],[2],[3,4],[],[0,1,2,3,4]]
35
+ sheet.write 'spec/out/marks_and_outs.jpg'
36
+ end
25
37
 
26
38
  it 'highlights marked cells of a problematic one' do
27
- s = SheetOMR.new 'spec/samples/qzc013.jpg'
39
+ si = sample_img 'silvia'
40
+ s = SheetOMR.new si.filename, si.grid_file
28
41
  s.highlight_marked
29
42
  s.write 'spec/out/problem.jpg'
30
43
  end
31
44
 
32
- it 'writes out average whiteness of choice cells' do
33
- s = SheetOMR.new 'spec/samples/qzc013.jpg'
34
- puts "Choice threshold: #{s.send :choice_threshold}"
35
- File.open('spec/out/choices.txt', 'w') do |f|
36
- 120.times do |q|
37
- t = (0..4).collect do |c|
38
- s.send(:shade_of, q, c).round
39
- end
40
- f.puts "#{q+1}: #{t.join(' ')}"
41
- end
42
- end
43
-
44
- mf = File.open('spec/out/marked.txt', 'w')
45
- uf = File.open('spec/out/unmarked.txt', 'w')
46
- 120.times do |q|
47
- 5.times do |c|
48
- shade = s.send(:shade_of, q, c)
49
- s.marked?(q,c) ? mf.puts(shade) : uf.puts(shade)
50
- end
51
- end
52
- mf.close
53
- uf.close
45
+ it 'highlights the barcode' do
46
+ si = sample_img 'sample-gray'
47
+ s = SheetOMR.new si.filename, si.grid_file
48
+ s.highlight_barcode
49
+ s.write 'spec/out/code_bits.jpg'
54
50
  end
55
51
  end
56
52
 
57
53
  context 'marking a nicely printed and scanned sheet' do
58
54
  before(:all) do
59
- @sheet = SheetOMR.new('spec/samples/sample_gray.jpg', 'spec/samples/layout.yml')
55
+ @shinfo = sample_img 'sample-gray'
56
+ @sheet = SheetOMR.new @shinfo.filename, @shinfo.grid_file
60
57
  end
61
58
 
62
59
  describe '#valid?' do
@@ -78,27 +75,16 @@ module Mork
78
75
  expect(@sheet.marked?(2,3)).to be_falsy
79
76
  end
80
77
 
81
- it 'writes out average whiteness of choice cells' do
78
+ it 'writes out markedness' do
82
79
  puts "Choice threshold: #{@sheet.send :choice_threshold}"
83
- File.open('spec/out/choices.txt', 'w') do |f|
84
- 120.times do |q|
85
- t = (0..4).collect do |c|
86
- @sheet.send(:shade_of, q, c).round
87
- end
88
- f.puts "#{q+1}: #{t.join(' ')}"
89
- end
90
- end
91
-
92
80
  mf = File.open('spec/out/marked.txt', 'w')
93
- uf = File.open('spec/out/unmarked.txt', 'w')
94
81
  120.times do |q|
95
- 5.times do |c|
96
- shade = @sheet.send(:shade_of, q, c)
97
- @sheet.marked?(q,c) ? mf.puts(shade) : uf.puts(shade)
82
+ x = 5.times.collect do |c|
83
+ @sheet.marked?(q,c) ? '1' : '0'
98
84
  end
85
+ mf.puts x.join(' ')
99
86
  end
100
87
  mf.close
101
- uf.close
102
88
  end
103
89
  end
104
90
 
@@ -139,25 +125,16 @@ module Mork
139
125
  s2 = SheetOMR.new('spec/samples/sample02.jpg')
140
126
  s2.barcode_string.should == barcode_string
141
127
  s2.barcode.should == 8608
142
- s2.highlight_barcode
143
- s2.write 'spec/out/code_bits.jpg'
144
128
  end
145
129
 
146
130
  it 'should read the 666 bit string' do
147
- s2 = SheetOMR.new('spec/samples/sheet666.jpg')
148
- s2.barcode.should == 666666666666
149
- s2.highlight_barcode
150
- s2.write 'spec/out/code_bits666.jpg'
131
+ sh = sample_img 'code666'
132
+ s2 = SheetOMR.new sh.filename, sh.grid_file
133
+ s2.barcode.should == sh.barcode_int
151
134
  end
152
135
  end
153
136
 
154
137
  end
155
-
156
- context 'a faded, b&w, distorted sheet' do
157
- it 'should return the correct barcode' do
158
- SheetOMR.new('spec/samples/sample03.jpg').barcode.should == 8608
159
- end
160
- end
161
138
 
162
139
  # context "multi-page pdf" do
163
140
  # before(:all) do
@@ -1,59 +1,59 @@
1
- registration:
2
- filename: spec/samples/registration.png
3
- pages: 1
4
- width: 2484
5
- height: 3512
6
- invalid_registration:
7
- filename: spec/samples/invalid_registration.png
8
- pages: 1
9
- width: 2484
10
- height: 3512
1
+ code666:
2
+ filename: spec/samples/sheet666.jpg
3
+ grid-file: spec/samples/layout.yml
4
+ barcode-int: 666666666666
5
+
6
+ silvia:
7
+ filename: spec/samples/qzc013.jpg
8
+ grid-file: spec/samples/layout.yml
9
+
10
+ sample-gray:
11
+ filename: spec/samples/sample_gray.jpg
12
+ grid-file: spec/samples/layout.yml
13
+ width: 1654
14
+ height: 2339
15
+
16
+
11
17
  sample01:
12
18
  filename: spec/samples/sample01.jpg
13
19
  pages: 1
14
20
  width: 2334
15
21
  height: 3291
16
22
 
17
- reg_marks: # registration marks
18
- tl_x: 92
19
- tl_y: 90
20
- tr_x: 2245
21
- tr_y: 97
22
- br_x: 2230
23
- br_y: 3217
24
- bl_x: 78
25
- bl_y: 3205
26
- q_boxes:
23
+ reg-marks: # registration marks
24
+ tl-x: 92
25
+ tl-y: 90
26
+ tr-x: 2245
27
+ tr-y: 97
28
+ br-x: 2230
29
+ br-y: 3217
30
+ bl-x: 78
31
+ bl-y: 3205
32
+ q-boxes:
27
33
  q001:
28
- tl_x: 175
29
- tl_y: 379
34
+ tl-x: 175
35
+ tl-y: 379
30
36
  q160:
31
- tl_x: 1818
32
- tl_y: 2974
33
- bw_faded_sample:
34
- filename: spec/samples/qzc006.jpg
35
- pages: 1
36
- width: 1196
37
- height: 1682
38
- code_int: 5512
37
+ tl-x: 1818
38
+ tl-y: 2974
39
39
 
40
- reg_mark:
40
+ reg-mark:
41
41
  filename: spec/samples/reg_mark.jpg
42
- centroid_x: 92
43
- centroid_y: 91
42
+ centroid-x: 92
43
+ centroid-y: 91
44
44
 
45
45
  small:
46
46
  filename: spec/samples/small.jpg
47
47
 
48
- code_sample:
48
+ code-sample:
49
49
  filename: spec/samples/code_sample.png
50
- code_string: "0000000000000000000000000000000000000000000000000001110001010001"
51
- code_int: 7249
50
+ code-string: "0000000000000000000000000000000000000000000000000001110001010001"
51
+ code-int: 7249
52
52
 
53
- code_zero:
53
+ code-zero:
54
54
  filename: spec/samples/code_zero.png
55
55
 
56
- two_pages:
56
+ two-pages:
57
57
  filename: spec/samples/two_pages.pdf
58
- code_int: 17382938642823887837
58
+ code-int: 17382938642823887837
59
59
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file