class Tesseract::Engine

Attributes

confidence[R]
unlv[R]
config[R]

Public Class Methods

new(path = nil, language = :eng, mode = :DEFAULT, variables = {}, config = []) { |self| ... } click to toggle source
# File lib/tesseract/engine.rb, line 37
def initialize (path = nil, language = :eng, mode = :DEFAULT, variables = {}, config = [], &block) # :yields: self
        @api = API.new

        @initializing = true

        @init      = block
        @path      = path
        @language  = language
        @mode      = mode
        @variables = variables
        @config    = config
        @rectangle = []

        yield self if block_given?

        @initializing = false

        _init
end

Public Instance Methods

blacklist() click to toggle source
# File lib/tesseract/engine.rb, line 108
def blacklist
        get('tessedit_char_blacklist').chars.to_a
end
blacklist=(value) click to toggle source
# File lib/tesseract/engine.rb, line 112
def blacklist= (value)
        set('tessedit_char_blacklist', value.respond_to?(:to_a) ? value.to_a.join : value.to_s)
end
get(name) click to toggle source
# File lib/tesseract/engine.rb, line 92
def get (name)
        @api.get_variable(name.to_s) || @variables[name]
end
hocr() click to toggle source
# File lib/tesseract/engine.rb, line 190
def hocr
        hocr_at
end
hocr_at(x = nil, y = nil, width = nil, height = nil, page = nil) click to toggle source
# File lib/tesseract/engine.rb, line 186
def hocr_at (x = nil, y = nil, width = nil, height = nil, page = nil)
        hocr_for(nil, x, y, width, height, page)
end
hocr_for(image = nil, x = nil, y = nil, width = nil, height = nil, page = nil) click to toggle source
# File lib/tesseract/engine.rb, line 177
def hocr_for (image = nil, x = nil, y = nil, width = nil, height = nil, page = nil)
        _setup(image, x, y, width, height)

        @api.get_hocr(page || 0)
end
image=(image) click to toggle source
# File lib/tesseract/engine.rb, line 134
def image= (image)
        @image = image
end
input=(name) click to toggle source
# File lib/tesseract/engine.rb, line 78
def input= (name)
        @api.set_input_name(name)
end
load_config(*config) click to toggle source
# File lib/tesseract/engine.rb, line 61
def load_config (*config)
        @config.concat config.flatten.compact.uniq

        unless @initializing
                @config.each {|conf|
                        @api.read_config_file(conf)
                }
        end
end
output=(name) click to toggle source
# File lib/tesseract/engine.rb, line 82
def output= (name)
        @api.set_output_name(name)
end
page_segmentation_mode() click to toggle source
# File lib/tesseract/engine.rb, line 124
def page_segmentation_mode
        @api.get_page_seg_mode
end
page_segmentation_mode=(value) click to toggle source
# File lib/tesseract/engine.rb, line 128
def page_segmentation_mode= (value)
        @psm = C.for_enum(value)

        @api.set_page_seg_mode @psm
end
process(image, page = nil) click to toggle source
# File lib/tesseract/engine.rb, line 240
def process (image, page = nil)
        if page
                @api.process_page(API.image_for(image), page)
        else
                raise ArgumentError, 'the path does not exist' unless File.exists?(image)

                @api.process_pages(image)
        end
end
select(x = nil, y = nil, width = nil, height = nil) click to toggle source
# File lib/tesseract/engine.rb, line 141
def select (x = nil, y = nil, width = nil, height = nil)
        @rectangle = [x, y, width, height]
end
set(name, value) click to toggle source
# File lib/tesseract/engine.rb, line 86
def set (name, value)
        @variables[name] = value

        @api.set_variable(name.to_s, value.to_s)
end
text() click to toggle source
# File lib/tesseract/engine.rb, line 170
def text
        text_at
end
text_at(x = nil, y = nil, width = nil, height = nil) click to toggle source
# File lib/tesseract/engine.rb, line 166
def text_at (x = nil, y = nil, width = nil, height = nil)
        text_for(nil, x, y, width, height)
end
text_for(image = nil, x = nil, y = nil, width = nil, height = nil) click to toggle source
# File lib/tesseract/engine.rb, line 148
def text_for (image = nil, x = nil, y = nil, width = nil, height = nil)
        _setup(image, x, y, width, height)

        @api.get_text.tap {|text|
                text.instance_exec(@api) {|api|
                        @unlv       = api.get_unlv
                        @confidence = api.mean_text_confidence

                        class << self
                                attr_reader :unlv, :confidence
                        end
                }
        }
end
version() click to toggle source
# File lib/tesseract/engine.rb, line 57
def version
        @api.version
end
whitelist() click to toggle source
# File lib/tesseract/engine.rb, line 116
def whitelist
        get('tessedit_char_whitelist').chars.to_a
end
whitelist=(value) click to toggle source
# File lib/tesseract/engine.rb, line 120
def whitelist= (value)
        set('tessedit_char_whitelist', value.respond_to?(:to_a) ? value.to_a.join : value.to_s)
end
with() { |self| ... } click to toggle source
# File lib/tesseract/engine.rb, line 71
def with (&block) # :yields: self
        self.class.new(@path, @language, @mode, @variables.clone, @config.clone) {|e|
                @init.call(e) if @init
                block.call(e) if block
        }
end

Protected Instance Methods

_init() click to toggle source
# File lib/tesseract/engine.rb, line 251
def _init
        @api.end

        @api.init(@path, API.to_language_code(@language), @mode)

        @variables.each {|name, value|
                @api.set_variable(name.to_s, value.to_s)
        }

        @config.each {|conf|
                @api.read_config_file(conf)
        }

        @api.set_page_seg_mode @psm if @psm
end
_iterator() click to toggle source
# File lib/tesseract/engine.rb, line 298
def _iterator
        _recognize

        Iterator.new(@api.get_iterator)
end
_recognize() click to toggle source
# File lib/tesseract/engine.rb, line 292
def _recognize
        _setup

        @api.get_text
end
_setup(image = nil, x = nil, y = nil, width = nil, height = nil) click to toggle source
# File lib/tesseract/engine.rb, line 267
def _setup (image = nil, x = nil, y = nil, width = nil, height = nil)
        image ||= @image or raise ArgumentError, 'you have to set an image first'
        image   = API.image_for(image)

        if !width && x
                width = image.width - x
        end

        if !height && y
                height = image.height - y
        end

        x      ||= @rectangle[0] || 0
        y      ||= @rectangle[1] || 0
        width  ||= @rectangle[2] || image.width
        height ||= @rectangle[3] || image.height

        if (x + width) > image.width || (y + height) > image.height
                raise IndexError, 'image access out of boundaries'
        end

        @api.set_image(image)
        @api.set_rectangle(x, y, width, height)
end