TesseractでOCRをしようとしたら見事に失敗した
どうしてもOCRを使う用事があったのだが、Adobeとか持ってないので、フリーのTesseractでやったれ!と思い、Tesseractでやろうとした。
とりあえず、インストールは簡単。macportで入れるだけ。
ただ、Tesseractはpdfは読んでくれず、入力はTiffでなければならない。
なので、ImageMagickもMacportから。
そして、ImageMagickでのコマンドは
$ convert (source.pdf) (target.tif)
とめちゃくちゃ簡単。
最後にTesseractでOCRするだけ....
$ tesseract promi.tif prom.pdf -l eng
Tesseract Open Source OCR Engine v3.01 with Leptonica
Error in pixReadFromTiffStream: can't handle bpp > 32
Error in pixReadStreamTiff: pix not read
Error in pixReadStream: tiff: no pix returned
Error in pixRead: pix not read
あれれー。
どうやら、Tesseractの仕様で入力はTifでしかも白黒の二値画像でないといけないらしい。
多くの解説サイトではGimpをコマンドラインから利用して、シェルスクリプトを作っているが、それはLinuxだからできること....
現状ではMac上のコマンドラインで直接Gimpを呼び出すことはできない....
XQuartzを呼び出してからGimpを....そんなことできるんだろうか....?
参考までに
http://d.hatena.ne.jp/sconvict/20100618/1276796329
http://d.hatena.ne.jp/sconvict/20100618/1276796329
http://fransdejonge.com/2012/04/ocr-text-in-pdf-with-tesseract/
と、思ったらMac NativeのGimpが公開されていて、とうとうNativeで使えるようになった。(これは別の意味でうれしい)
けど、日本語環境だといろいろ問題があって起動すらしないので、
http://aritosato.wordpress.com/2012/09/02/x11-%E3%81%AA%E3%81%97-gimp-for-mac-%E3%82%92%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%92%B0%E5%A2%83%E3%81%A7%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF/
を見なくてはいけない。
あとはGimpでコマンドを書けばいいらしいのだが..どうやってやるんだろう...
2012/12/31 追記
グレースケール変換だけならマック標準のpreview.appで簡単にできる。
書き出しする時に、quartzフィルタに手を加えたらいいだけだ。
けど、するとまた別の問題が起きる。
こうすると、アルファチャンネル付きの32-bit画像が生成されてしまう。
しかし、tesseractでは24-bit画像、つまりアルファチャンネル付き画像を認識することができない。
Tesseract Open Source OCR Engine v3.01 with Leptonica
Error in pixReadFromTiffStream: can't handle bpp > 32
Error in pixReadStreamTiff: pix not read
Error in pixReadStream: tiff: no pix returned
Error in pixRead: pix not read
というメッセージは、実はそのことを意味していたのだった。
さて、ではどうするか?
初めから24-bitの二値画像に変換すればよいのだが...現状ではgimpも使えない(pdfを開くプラグインにエラーがある)
なので、preview.appで二値にしたあと、アルファを削除するのが妥当ではないだろうか。
まだ、やってないけど、参考までに
http://www.cyanworks.net/gconvAlpha.html