NAME
OCR::PerfectCR - Perfect OCR (if you have perfect input).
SYNOPSIS
use OCR::PerfectCR;
use GD;
my $recognizer = OCR::PerfectCR->new;
$recognizer->load_charmap_file("charmap");
my $image = GD::Image->new("example.png") or die "Can't open example.png: $!";
my $string = join '', map {$_->{str}} $recognizer->recognize($image);
$recognizer->save_charmap_file("charmap");
DESCRIPTION
OCR::PerfectCR is a fast, highly accurate "optical" character recognition engine requiring minimal training. How does it manage this, despite being written in pure perl? By ignoring most of the problems. OCR::PerfectCR requires that your input is in perfect shape -- that it hasn't gone into the real world and been scanned, that each image represent one line of text, and nothing else, and most difficultly, that the font have a fairly wide spacing. This makes it very useful for converting image-based subtitle formats to text, and probably not much else. However, it is very good at doing that.
OCR::PerfectCR's knowledge about a particular font is encapsulated in a "charmap" file, which maps md5 sums of the canonical representation of a character (the first 32 characters of the line) to a string (the 34th and onwards chars, to newline).
Most methods will die on error, rather then trying to recover and return undef.
$recognizer->load_charmap_file("charmap")
Loads a charmap file into memory.
$recognizer->save_charmap_file("charmap")
Saves the charmap to a file. Charmap files are always saved and loaded in utf8.
$recognizer->recognize($image) (recognise is an alias for this)
Takes the image (a GD::Image object), and tries to convert it into text. In list context, returns a list of hashrefs, each having a str
key, whose value is the string in the charmap for that image. There may also be a color
(note the spelling) key, with a value between 0 and 360, representing the color of the text in degrees on the color wheel, or undef
meaning grey. The color
being missing implies that there is nothing there but background -- that is, that it's whitespace. For non-whitespace characters, there is a key md5
, which gives the md5 sum of the character in canonical form -- that is, it's charmap entry. Other keys are purposefully not documented -- if you find them useful, please let me know by filing an RT request.
Characters not in the charmap will have their str set to "\x{FFFD}" eq "\N{REPLACEMENT CHARACTER}"
, and will be added to the charmap. They will also be saved as png files named md5.png in the current directory, so that they a human can look at them and ID them.
OCR::PerfectCR->new();
Just a boring constructor. No parameters.
BUGS
Please report bugs on http://rt.cpan.org/. If the bug /might possibly/ be because of your input file, please include it with the bug report.
AUTHOR & LICENSE
Copyright 2005 James Mastros, james@mastros.biz, JMASTROS, theorbtwo. (Those are all the same person.)
May be used and copied under the same terms as perl
itself.
Thanks, castaway, for being you, and diotalevi for a detailed review.