Believe you can

If you can dream it, you can do it.

Tesseractで画像やPDFをテキスト化する

この記事は Holmes Advent Calendar 2019 - Qiita 10日目の記事です

Tesseract(テッセラクト)を試してみようと思います
TesseractはGoogleOSS開発している光学文字認識のエンジン(OCR)です
(LINE DEV DAY 2019で頂いたLINE BRAIN OCR先行クーポンを試すつもりだったが、期限切れだったというのはナイショ^^;)

環境

Tesseractをインストールします

$ brew install tesseract
$ brew install tesseract-lang

プログラム

Tess4J - JNA wrapper for Tesseractを利用させていただきます
Maven、Gradleを利用していればMvnRepositoryから、利用していない場合はTess4J download | SourceForge.netからダウンロードしてください

続いて日本語認識ファイルをダウンロードします
GitHub - tesseract-ocr/tessdataから以下の2つのファイルをダウンロードしてください

  • jpn.traineddata
  • jpn_vert.traineddata

jpn.traineddata は横書き、jpn_vert.traineddata は縦書き用らしいです

あとはTess4jで対象ファイルを読み込めばOKです
めっちゃ簡単ですね!

ITesseract instance = new Tesseract();
final String tessdataPath = "src/main/resources/tessdata";
instance.setDatapath(Paths.get(tessdataPath).toAbsolutePath().toString());
instance.setLanguage("jpn");        // 横書き
// instance.setLanguage("jpn_vert");   // 縦書き

ソース一式はGitHubに置いてありますのでご参考ください
github.com

画像を読み込んでみる

  • 画像(横書き) f:id:chichi1091:20191209212957p:plain

  • 読み込み結果 f:id:chichi1091:20191209213530p:plain

文字間に謎のスペースが入っていますが、いい感じ
続いて縦書き

  • 画像(縦書き) f:id:chichi1091:20191209213717p:plain

  • 読み込み結果 f:id:chichi1091:20191209213840p:plain

うーーん、いろいろ試してみたけどうまいこと読めませんでした。。

PDFを読み込んでみる

画像とほぼ同レベルで読み取れました
半角数値が丸数字になるのは日本語認識ファイルのせいかと思われます

画像と同様にやっぱダメですね。。

まとめ

横書きに関しては結構精度高く読み込めているように思います
ただ、縦書きに関しては全くダメですね。。。
日本語認識ファイルがよくないのか縦書き認識用Tesseractがあるのか今回では解析することはできませんでしたので今後の課題です
手書き文字は今回試していませんが、LSTMを使って手書き文字を学習させれば利用方法が高まりそうです
今後の課題ですね