Book scanning

From Finninday
Jump to: navigation, search

We have a lot of old books that I would like to scan and index.

I'm inspired by the vibrant community that is forming around this website: http://www.diybookscanner.org/

The scanner-building project looks like fun, but I want to make sure the the results will be worthwhile before I plug in my soldering iron and circular saw.

So, first, some proof-of-concept work with the software components.

Software

  • I have a Canon Powershot S60, so I thought that it would be easy to put CHDK on it, but I was wrong. My camera is too old to be supported. Julie has a Canon SD30, which is supported.
  • It looks like Tesseract is the low-hanging fruit in the OCR field. I have been able to download, build, and run a test on it. Out of the box, it only understands TIFF. But it seems there are flavors of TIFF, and the ImageMagick "convert" created a TIFF that made Tesseract barf:
[rday@snapper tesseract-2.04]$ ccmain/tesseract image3.tif image3.txt
Tesseract Open Source OCR Engine
read_tif_image:Error:Illegal image format:Compression
ccmain/tesseract:Error:Read of file failed:image3.tif
Segmentation fault

Here is what "identify" says about the two working TIFFs that came with Tesseract and the one I generated that doesn't work:

[rday@snapper tesseract-2.04]$ identify *.tif
eurotext.tif TIFF 1024x800 1024x800+0+0 PseudoClass 2c 1e+02kb 
phototest.tif[1] TIFF 640x480 640x480+0+0 PseudoClass 2c 38kb 
image3.tif[2] TIFF 1701x2800 1701x2800+0+0 DirectClass 1.1mb 
  • The trick is to use no compression like so:
[rday@snapper tesseract-2.04]$ convert -compress none /home/rday/Documents/devel/Image\ \(3\).jpg image3.tif
  • the uncompressed test TIFF was 13.6MB

The OCR results were impressive even on a dirty scan that would probably be typical of the pages that I would encounter. I found four errors in the test page. That is encouraging enough to go ahead with a more ambitious test.

  • I followed the directions on the Tesseract page and recompiled after installing libtiff-devel. That gave Tesseract the ability to read a compressed tiff.
  • When testing with a compressed tiff, the file was 1.1MB in size and it took 1.7 seconds to convert it to text.
  • Post-processing of the image files can be done with Scan Tailor which is packaged for Ubuntu

I wasn't sure just how bad an idea it is to capture page images with my Canon S60 (5 mega pixel) just set on normal settings, generating jpgs (2000 x 2500 pixels). I converted them to tif and then tried to read them with tesseract and came up with gibberish. So now I know it is a very bad idea.

I also wrote this to string together the steps from jpg to text:

#!/usr/bin/perl -w

print "I found ". scalar(@ARGV). " parameters.\n";
foreach $argnum (0 .. $#ARGV) {
   my $in = $ARGV[$argnum];
        my $out = $in;
        $out =~ s/(jpg|JPG)$/tif/;
        print "convert $in to $out... ";
        $result = `convert $in $out`;
        print "scan $out... ";
        my $txt = $out;
        $txt =~ s/.tif$//;
        $result = `tesseract $out $txt`;
        print "\n";
}