Tesseractで画像やPDFをテキスト化する
この記事は Holmes Advent Calendar 2019 - Qiita 10日目の記事です
Tesseract(テッセラクト)を試してみようと思います
TesseractはGoogleがOSS開発している光学文字認識のエンジン(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
画像を読み込んでみる
画像(横書き)
読み込み結果
文字間に謎のスペースが入っていますが、いい感じ
続いて縦書き
画像(縦書き)
読み込み結果
うーーん、いろいろ試してみたけどうまいこと読めませんでした。。
PDFを読み込んでみる
PDF(横書き) https://github.com/chichi1091/java-ocr-exmaple/blob/master/src/main/resources/pdf/sample.pdf
読み込み結果
画像とほぼ同レベルで読み取れました
半角数値が丸数字になるのは日本語認識ファイルのせいかと思われます
PDF(縦書き) https://github.com/chichi1091/java-ocr-exmaple/blob/master/src/main/resources/pdf/sample2.pdf
読み込み結果
画像と同様にやっぱダメですね。。
まとめ
横書きに関しては結構精度高く読み込めているように思います
ただ、縦書きに関しては全くダメですね。。。
日本語認識ファイルがよくないのか縦書き認識用Tesseractがあるのか今回では解析することはできませんでしたので今後の課題です
手書き文字は今回試していませんが、LSTMを使って手書き文字を学習させれば利用方法が高まりそうです
今後の課題ですね