rocrad 0.1.3 → 0.1.4

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
@@ -0,0 +1,20 @@
1
+ class Rocrad
2
+ class Binary < Rocrad
3
+
4
+ def initialize(src="", filename="")
5
+ @filename=filename
6
+ super(src)
7
+ end
8
+
9
+ private
10
+
11
+ def build_source(src)
12
+ src_path = Pathname.new(Dir::tmpdir).join("#{@uid.generate}_#{@filename}")
13
+ src_file = File.new(src_path.to_s, File::CREAT|File::TRUNC|File::RDWR, 0644)
14
+ src_file.write(src)
15
+ src_file.close
16
+ Pathname.new(src_path)
17
+ end
18
+
19
+ end
20
+ end
data/lib/rocrad/errors.rb CHANGED
@@ -1,10 +1,6 @@
1
1
  class Rocrad
2
- class ConversionError < StandardError;
3
- end
4
2
  class ImageNotSelectedError < StandardError;
5
3
  end
6
- class TempFilesNotRemovedError < StandardError;
7
- end
8
4
  class UnsupportedFileTypeError < StandardError;
9
5
  end
10
6
  end
data/lib/rocrad/mixed.rb CHANGED
@@ -24,15 +24,14 @@ class Rocrad
24
24
  private
25
25
 
26
26
  #Convert parts of image to string
27
- def convert
27
+ def ocr!
28
28
  @txt = ""
29
29
  @areas.each do |area|
30
30
  image = Rocrad.new(@src.to_s)
31
31
  image.crop!(area[:x].to_i, area[:y].to_i, area[:w].to_i, area[:h].to_i)
32
32
  @txt << image.to_s
33
33
  end
34
- rescue
35
- raise Rocrad::ConversionError
34
+ @txt
36
35
  end
37
36
 
38
37
  end
data/lib/rocrad.rb CHANGED
@@ -6,6 +6,7 @@ require "RMagick"
6
6
 
7
7
  require "rocrad/errors"
8
8
  require "rocrad/mixed"
9
+ require "rocrad/binary"
9
10
 
10
11
  class Rocrad
11
12
 
@@ -14,33 +15,31 @@ class Rocrad
14
15
 
15
16
  def initialize(src="")
16
17
  @uid = UUID.new
17
- @src = get_source src
18
+ @src = build_source src
18
19
  @txt = ""
19
20
  @tmp = nil
20
21
  end
21
22
 
22
23
  def src=(value="")
23
24
  @txt = ""
24
- @src = get_source value
25
+ @src = build_source value
25
26
  end
26
27
 
27
- #Output value
28
- def to_s
29
- return @txt if @txt != ""
28
+ def ocr!
30
29
  if @src.instance_of? Pathname and @src.file?
31
- convert
30
+ ocr_via_path
32
31
  @txt
33
32
  elsif @src.instance_of? URI::HTTP
34
- convert_via_http
33
+ ocr_via_http
35
34
  @txt
36
35
  else
37
36
  raise ImageNotSelectedError
38
37
  end
39
38
  end
40
39
 
41
- #Remove spaces and break-lines
42
- def to_s_without_spaces
43
- to_s.gsub(" ", "").gsub("\n", "").gsub("\r", "")
40
+ #Output value
41
+ def to_s
42
+ @txt != "" ? @txt : ocr!
44
43
  end
45
44
 
46
45
  #Crop image to convert
@@ -55,23 +54,24 @@ class Rocrad
55
54
 
56
55
  private
57
56
 
57
+ #Linux console clear
58
58
  def cco
59
- "2>/dev/null" if File.exist?("/dev/null") #Linux console clear
59
+ File.exist?("/dev/null") ? "2>/dev/null" : ""
60
60
  end
61
61
 
62
- def convert_via_http
62
+ def ocr_via_http
63
63
  tmp_path = Pathname.new(Dir::tmpdir).join("#{@uid.generate}_#{Pathname.new(@src.request_uri).basename}")
64
64
  tmp_file = File.new(tmp_path.to_s, File::CREAT|File::TRUNC|File::RDWR, 0644)
65
65
  tmp_file.write(Net::HTTP.get(@src))
66
66
  tmp_file.close
67
67
  uri = @src
68
68
  @src = tmp_path
69
- convert
69
+ ocr_via_path
70
70
  @src = uri
71
71
  remove_file([tmp_path])
72
72
  end
73
73
 
74
- def get_source(src)
74
+ def build_source(src)
75
75
  case (uri = URI.parse(src)).class.to_s
76
76
  when "URI::HTTP" then
77
77
  uri
@@ -91,9 +91,6 @@ class Rocrad
91
91
  system "rm -f #{file} #{cco}"
92
92
  end
93
93
  end
94
- true
95
- rescue
96
- raise TempFilesNotRemovedError
97
94
  end
98
95
 
99
96
  #Convert image to pnm
@@ -116,18 +113,14 @@ class Rocrad
116
113
  end
117
114
 
118
115
  #Convert image to string
119
- def convert
116
+ def ocr_via_path
120
117
  src = @tmp ? @tmp : @src
121
118
  txt = Pathname.new(Dir::tmpdir).join("#{@uid.generate}_#{src.sub(src.extname, ".txt").basename}")
122
119
  pnm = image_to_pnm
123
- begin
124
- `ocrad #{pnm} -l -F utf8 -o #{txt} #{cco}`
125
- @txt = File.read(txt)
126
- @tmp ? remove_file([pnm, txt, @tmp]) : remove_file([pnm, txt])
127
- @tmp = nil
128
- rescue
129
- raise ConversionError
130
- end
120
+ `ocrad #{pnm} -l -F utf8 -o #{txt} #{cco}`
121
+ @txt = File.read(txt)
122
+ @tmp ? remove_file([pnm, txt, @tmp]) : remove_file([pnm, txt])
123
+ @tmp = nil
131
124
  end
132
125
 
133
126
  end
data/rocrad.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rocrad}
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ludwig Bratke"]
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  "Rakefile",
27
27
  "VERSION",
28
28
  "lib/rocrad.rb",
29
+ "lib/rocrad/binary.rb",
29
30
  "lib/rocrad/errors.rb",
30
31
  "lib/rocrad/mixed.rb",
31
32
  "rocrad.gemspec",
@@ -37,6 +38,7 @@ Gem::Specification.new do |s|
37
38
  "test/images/test.png",
38
39
  "test/images/test.tif",
39
40
  "test/images/test1.tif",
41
+ "test/test_binary.rb",
40
42
  "test/test_mixed.rb",
41
43
  "test/test_rocrad.rb"
42
44
  ]
@@ -0,0 +1,21 @@
1
+ begin
2
+ require "helper"
3
+ rescue LoadError
4
+ require File.dirname(__FILE__) + '/helper'
5
+ end
6
+
7
+ class TestBinary < Test::Unit::TestCase
8
+
9
+ def setup
10
+ @path = Pathname.new(__FILE__.gsub("test_binary.rb", "")).expand_path
11
+ @jpg = @path.join("images", "test.jpg").to_s
12
+ f = File.open(@jpg.to_s, "r")
13
+ @chars = f.chars.to_a
14
+ f.close
15
+ @txt_jpg = ["3", "R", "8", "Z".downcase].*""
16
+ end
17
+
18
+ def test_binary
19
+ assert_equal @txt_jpg, Rocrad::Binary.new(@chars, "foo.jpg").to_s.gsub(/[ \n\r]/,"")
20
+ end
21
+ end
data/test/test_mixed.rb CHANGED
@@ -1,5 +1,8 @@
1
- require 'helper'
2
- require 'pathname'
1
+ begin
2
+ require "helper"
3
+ rescue LoadError
4
+ require File.dirname(__FILE__) + '/helper'
5
+ end
3
6
 
4
7
  class TestMixed < Test::Unit::TestCase
5
8
 
@@ -21,7 +24,7 @@ class TestMixed < Test::Unit::TestCase
21
24
  image.add_area(218, 22, 24, 28) # position of z
22
25
  image.add_area(248, 24, 22, 22) # position of z
23
26
  end
24
- assert_equal @txt_tif, mix_block.to_s_without_spaces
27
+ assert_equal @txt_tif, mix_block.to_s.gsub(/[ \n\r]/, "")
25
28
 
26
29
  mix_block = Rocrad::Mixed.new(@tif, {:areas => [
27
30
  {:x => 28, :y=>19, :w=>25, :h=>25}, #position of 4
@@ -29,7 +32,7 @@ class TestMixed < Test::Unit::TestCase
29
32
  {:x => 218, :y=>22, :w=>24, :h=>28}, # position of z
30
33
  {:x => 248, :y=>24, :w=>22, :h=>22} # position of z
31
34
  ]})
32
- assert_equal @txt_tif, mix_block.to_s_without_spaces
35
+ assert_equal @txt_tif, mix_block.to_s.gsub(/[ \n\r]/, "")
33
36
  end
34
37
 
35
38
  def test_show_areas
@@ -76,15 +79,15 @@ class TestMixed < Test::Unit::TestCase
76
79
  {:x=>218, :h=>28, :w=>24, :y=>22},
77
80
  {:x=>248, :h=>22, :w=>22, :y=>24}]
78
81
  assert_equal(areas, mix_block.areas)
79
- assert_equal @txt_tif[1..3], mix_block.to_s_without_spaces
82
+ assert_equal @txt_tif[1..3], mix_block.to_s.gsub(/[ \n\r]/, "")
80
83
 
81
84
  mix_block.areas = []
82
85
  assert_equal([], mix_block.areas)
83
- assert_equal "", mix_block.to_s_without_spaces
86
+ assert_equal "", mix_block.to_s.gsub(/[ \n\r]/, "")
84
87
 
85
88
  mix_block.areas = nil
86
- #assert_equal([], mix_block.areas)
87
- assert_equal "", mix_block.to_s_without_spaces
89
+ assert_equal([], mix_block.areas)
90
+ assert_equal "", mix_block.to_s.gsub(/[ \n\r]/, "")
88
91
  end
89
92
 
90
93
  end
data/test/test_rocrad.rb CHANGED
@@ -12,20 +12,20 @@ class TestRocrad < Test::Unit::TestCase
12
12
  f = File.open(@jpg.to_s, "r")
13
13
  @chars = f.chars.to_a
14
14
  f.close
15
- @txt_jpg = ["3", "R", "8", "Z".downcase].to_s
15
+ @txt_jpg = ["3", "R", "8", "Z".downcase].*""
16
16
  @txt_tif = "43ZZ".downcase
17
- @txt_png = ["H", "W", "9", "W".downcase].to_s
18
- @txt_bmp = ["Z".downcase, "L", "A", "6"].to_s
17
+ @txt_png = ["H", "W", "9", "W".downcase].*""
18
+ @txt_bmp = ["Z".downcase, "L", "A", "6"].*""
19
19
  end
20
20
 
21
21
  def test_convert_via_http
22
22
  Net::HTTP.expects(:get).returns(@chars)
23
- assert_equal @txt_jpg, Rocrad.new("http://localhost:3000/uploads/picture/data/4dd21bfd828bf81bdd00000d/nzp_img_17_4_2011_8_55_29.jpg").to_s_without_spaces
23
+ assert_equal @txt_jpg, Rocrad.new("http://localhost:3000/uploads/picture/data/4dd21bfd828bf81bdd00000d/nzp_img_17_4_2011_8_55_29.jpg").to_s.gsub(/[ \n\r]/, "")
24
24
  end
25
25
 
26
26
  def test_convert_via_http_raise_exception
27
27
  assert_raise Errno::ECONNREFUSED do
28
- Rocrad.new("http://localhost:3000/uploads/picture/data/4dd21bfd828bf81bdd00000d/nzp_img_17_4_2011_8_55_29.jpg").to_s_without_spaces
28
+ Rocrad.new("http://localhost:3000/uploads/picture/data/4dd21bfd828bf81bdd00000d/nzp_img_17_4_2011_8_55_29.jpg").to_s.gsub(/[ \n\r]/, "")
29
29
  end
30
30
  end
31
31
 
@@ -36,40 +36,40 @@ class TestRocrad < Test::Unit::TestCase
36
36
  end
37
37
 
38
38
  def test_translate_image_to_text
39
- assert_equal @txt_jpg, Rocrad.new(@jpg).to_s_without_spaces
40
- assert_equal @txt_tif, Rocrad.new(@path.join("images", "test.tif").to_s).to_s_without_spaces
39
+ assert_equal @txt_jpg, Rocrad.new(@jpg).to_s.gsub(/[ \n\r]/, "")
40
+ assert_equal @txt_tif, Rocrad.new(@path.join("images", "test.tif").to_s).to_s.gsub(/[ \n\r]/, "")
41
41
  end
42
42
 
43
43
  def test_unsupported_file_type_error
44
44
  assert_raise Rocrad::UnsupportedFileTypeError do
45
- Rocrad.new(@path.join("images", "test.foo").to_s).to_s_without_spaces
45
+ Rocrad.new(@path.join("images", "test.foo").to_s).to_s.gsub(/[ \n\r]/, "")
46
46
  end
47
47
  end
48
48
 
49
49
  def test_image_not_selected_error
50
50
  assert_raise Rocrad::ImageNotSelectedError do
51
- Rocrad.new(@path.join("images", "test.noo").to_s).to_s_without_spaces
51
+ Rocrad.new(@path.join("images", "test.noo").to_s).to_s.gsub(/[ \n\r]/, "")
52
52
  end
53
53
  end
54
54
 
55
55
  def test_translate_images_png_jpg
56
- assert_equal @txt_png, Rocrad.new(@path.join("images", "test.png").to_s).to_s_without_spaces
57
- assert_equal @txt_jpg, Rocrad.new(@path.join("images", "test.jpg").to_s).to_s_without_spaces
56
+ assert_equal @txt_png, Rocrad.new(@path.join("images", "test.png").to_s).to_s.gsub(/[ \n\r]/, "")
57
+ assert_equal @txt_jpg, Rocrad.new(@path.join("images", "test.jpg").to_s).to_s.gsub(/[ \n\r]/, "")
58
58
  end
59
59
 
60
60
  def test_translate_images_bmp
61
- assert_equal @txt_bmp, Rocrad.new(@path.join("images", "test.bmp").to_s).to_s_without_spaces
61
+ assert_equal @txt_bmp, Rocrad.new(@path.join("images", "test.bmp").to_s).to_s.gsub(/[ \n\r]/, "")
62
62
  end
63
63
 
64
64
  def test_translate_test1_tif
65
- assert_equal "V2V4".downcase, Rocrad.new(@path.join("images", "test1.tif").to_s).to_s_without_spaces
65
+ assert_equal "V2V4".downcase, Rocrad.new(@path.join("images", "test1.tif").to_s).to_s.gsub(/[ \n\r]/, "")
66
66
  end
67
67
 
68
68
  def test_change_the_image
69
69
  image = Rocrad.new(@jpg)
70
- assert_equal @txt_jpg, image.to_s_without_spaces
70
+ assert_equal @txt_jpg, image.to_s.gsub(/[ \n\r]/, "")
71
71
  image.src = @path.join("images", "test.tif").to_s
72
- assert_equal @txt_tif, image.to_s_without_spaces
72
+ assert_equal @txt_tif, image.to_s.gsub(/[ \n\r]/, "")
73
73
  end
74
74
 
75
75
  def test_unique_uid
@@ -79,19 +79,19 @@ class TestRocrad < Test::Unit::TestCase
79
79
 
80
80
  def test_should_crop_image_tif
81
81
  tif = @path.join("images", "test.tif").to_s
82
- assert_equal "4", Rocrad.new(tif).crop!(140, 10, 36, 40).to_s_without_spaces
83
- assert_equal "3", Rocrad.new(tif).crop!(180, 10, 36, 40).to_s_without_spaces
84
- assert_equal "Z".downcase, Rocrad.new(tif).crop!(200, 10, 36, 40).to_s_without_spaces
85
- assert_equal "Z".downcase, Rocrad.new(tif).crop!(220, 10, 30, 40).to_s_without_spaces
82
+ assert_equal "4", Rocrad.new(tif).crop!(140, 10, 36, 40).to_s.gsub(/[ \n\r]/, "")
83
+ assert_equal "3", Rocrad.new(tif).crop!(180, 10, 36, 40).to_s.gsub(/[ \n\r]/, "")
84
+ assert_equal "Z".downcase, Rocrad.new(tif).crop!(200, 10, 36, 40).to_s.gsub(/[ \n\r]/, "")
85
+ assert_equal "Z".downcase, Rocrad.new(tif).crop!(220, 10, 30, 40).to_s.gsub(/[ \n\r]/, "")
86
86
  end
87
87
 
88
88
  def test_should_crop_image_tif_same_instance
89
89
  tif = @path.join("images", "test.tif").to_s
90
90
  instance = Rocrad.new(tif)
91
- assert_equal "4", instance.crop!(140, 10, 36, 40).to_s_without_spaces
92
- assert_equal "3", instance.crop!(180, 10, 36, 40).to_s_without_spaces
93
- assert_equal "Z".downcase, instance.crop!(200, 10, 36, 40).to_s_without_spaces
94
- assert_equal "Z".downcase, instance.crop!(220, 10, 30, 40).to_s_without_spaces
91
+ assert_equal "4", instance.crop!(140, 10, 36, 40).to_s.gsub(/[ \n\r]/, "")
92
+ assert_equal "3", instance.crop!(180, 10, 36, 40).to_s.gsub(/[ \n\r]/, "")
93
+ assert_equal "Z".downcase, instance.crop!(200, 10, 36, 40).to_s.gsub(/[ \n\r]/, "")
94
+ assert_equal "Z".downcase, instance.crop!(220, 10, 30, 40).to_s.gsub(/[ \n\r]/, "")
95
95
  end
96
96
 
97
97
  def test_attr_reader_while_cropping
@@ -99,7 +99,7 @@ class TestRocrad < Test::Unit::TestCase
99
99
  rocrad = Rocrad.new(tif).crop!(140, 10, 36, 40)
100
100
  assert_equal "", rocrad.txt
101
101
  assert rocrad.tmp.instance_of? Pathname
102
- assert_equal "4", rocrad.to_s_without_spaces
102
+ assert_equal "4", rocrad.to_s.gsub(/[ \n\r]/, "")
103
103
  assert rocrad.txt.include?("4")
104
104
  assert_nil rocrad.tmp
105
105
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocrad
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
9
+ - 4
10
+ version: 0.1.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ludwig Bratke
@@ -165,6 +165,7 @@ files:
165
165
  - Rakefile
166
166
  - VERSION
167
167
  - lib/rocrad.rb
168
+ - lib/rocrad/binary.rb
168
169
  - lib/rocrad/errors.rb
169
170
  - lib/rocrad/mixed.rb
170
171
  - rocrad.gemspec
@@ -176,6 +177,7 @@ files:
176
177
  - test/images/test.png
177
178
  - test/images/test.tif
178
179
  - test/images/test1.tif
180
+ - test/test_binary.rb
179
181
  - test/test_mixed.rb
180
182
  - test/test_rocrad.rb
181
183
  has_rdoc: true