読者です 読者をやめる 読者になる 読者になる

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