もふもふ技術部

IT技術系mofmofメディア

Tesseractでサクッと日本語OCRを試してみる

TesseractはPythonからオープンソースで使えるOCRエンジンで、テッセラクトと読むらしい。とりあえずインストールしたらサクッとOCRを試せるみたいなのでやってみる。

こちらの記事を参考にした。

Tesseract+PyOCRで簡易OCRを試してみる - Qiita

とりあえずOCRをしてみる

まずはインストールする。brewで一発。

$ brew install tesseract

デフォルトでは日本語対応していないので、日本語の学習データを手動で入れる。

データは三種類のリポジトリが用意されている。

  • tessdata_bestは最も精度が高いデータ
  • tessdata_fastはたぶん最も速度が速いデータ
  • tessdataは通常のデータ

Data Files · tesseract-ocr/tesseract Wiki · GitHub

ひとまずtessdataで試してみることにする。

GitHub - tesseract-ocr/tessdata

GitHubリポジトリ内のjpn.traineddataをダウンロードする。

学習データ置き場を確認する。ここで合ってるぽい。4.1.0の部分はtesseractのバージョンが入るので各自の環境で異なります。

ls /usr/local/Cellar/tesseract/4.1.0/share/tessdata

configs          eng.traineddata  osd.traineddata  pdf.ttf          snum.traineddata tessconfigs

学習データを移動します。

$ mv ~/Downloads/jpn.traineddata /usr/local/Cellar/tesseract/4.1.0/share/tessdata

この画像をOCRしてみます。

$ tesseract text.png result
Tesseract Open Source OCR Engine v4.1.0 with Leptonica
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 175

ふむ。日本語が有効になっていないようだ。

$ cat result.txt
Type Belk CHS Db LNB 123.
BUDABS, RHRUVKLVE RH

オプションが必要みたい。

$ tesseract text.png result -l jpn                                                                                                                                  Tesseract Open Source OCR Engine v4.1.0 with Leptonica
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 175

ふーむ。とんでもないポンコツ具合である。これだと使いものにならなそう。

$ cat result.txt
Type 我 華 は 殖 で あ る か も し れ な い ⑫③。
あ い う え お S、&⑧ 楽 し い 楽 し い 夏 会 み

日本語のOCR精度を上げる

色々調べてみるとTesseract4からはLSTMになって精度が上がっているらしい。

だがしかし、すでに4系が入っていた。

$ tesseract -v
tesseract 4.1.0
 leptonica-1.78.0
  libgif 5.1.4 : libjpeg 9c : libpng 1.6.37 : libtiff 4.0.10 : zlib 1.2.11 : libwebp 1.0.3 : libopenjp2 2.3.1
 Found AVX2
 Found AVX
 Found SSE

そういえば、学習データには精度が高い版があったはず。そっちを試してみる。同様にリポジトリからjpn.traineddataをダウンロードしてくる。

tessdata_best

ファイルを移動する。

$ mv ~/Downloads/jpn.traineddata /usr/local/Cellar/tesseract/4.1.0/share/tessdata

OCRしてみる。

~/Desktop ❯❯❯ tesseract text.png result -l jpn                                                                                                                           ✘ 1
Tesseract Open Source OCR Engine v4.1.0 with Leptonica
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 175

だいぶ改善した。我輩の「輩」以外は正しく認識されている(このスペースどうにかなんねえかな)。

$ cat result.txt
Type 我 斉 は 猫 で ある か も し れ な い 123。
あい うえ お $、&& 楽 し い 楽 し い 夏 休み

ついでに、jpn_vert.traineddataというのも見つけたのでよくわからんが試してみる。

同様にファイルを移動しておく(コマンド割愛)。

$ tesseract text.png result -l jpn_vert
Tesseract Open Source OCR Engine v4.1.0 with Leptonica
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 175

なんじゃこりゃあああ。

$ cat result.txt
っoo洪映再庶わっWeyジせてさや
きいSuい>トおe 9の湯漁てS光謀

ちょっとだけ検索してみたが、jpn_vert.traineddataの用途はわからないままだった。

まとめ

サクッとOCRができる点が良かった。精度もまあ用途によっては使えるのではないだろうか。

あと学習はLSTMなのでFine Tuning(転移学習)ができる。ので、固有の学習データを追加で学習してあげれば、うまいこと使えるのではないだろうか。

Tesseract 4.1にLSTMを使って日本語を再学習させる - Qiita