社会人研究者が色々頑張るブログ

pythonで画像処理やパターン認識をやっていきます

Tesseract(OCR)は行単位で処理した方が性能が良い?

確認したいこと

Tesseractは、OCRを行う際の動作モードを設定できます。
公式ドキュメントを参照すると、 この中でちょっと気になったのは、

番号 処理内容
6 画像をテキストブロック(横書き文章)として扱う
7 画像を1行のテキストとして扱う

という設定項目についてです。
普段は6を設定して複数の行からなる文書画像をドスンとOCRするのですが、 事前に行単位にトリミングをした後に7で読み込んだら性能があがるのでしょうか?

文章単位の読み取り 行単位の読み取り
f:id:nsr_9:20210815180437p:plain f:id:nsr_9:20210815180446p:plain

確認方法

スマホで撮影した文章画像を用いて実験しました。

使用した文書画像
f:id:nsr_9:20210815180956j:plain

文書単位の読み取りでは、tesseractのlayoutパラメタを6に設定し、上記の文書画像をそのまま与えました。
行単位の読み取りでは、手動で行を切り出した後に、layoutパラメタを7に設定し読み取りを行いました。

認識精度は、スペースをトリミングした後に、別途書き起こした正解文章に対するレーベンシュタイン距離を求めました。

結果

行単位で処理した方が読み取り精度が向上することが確認できました。

下の表にレーベンシュタイン距離を示します。
値が小さいほど読み取り精度が高いという指標になります。

文書単位の読み取り 行単位の読み取り
38 10

何らかの方法で自動的に行を切り出すことができれば、Tesseractに認識精度を大幅に向上させられる事が示唆されました。

正解文章

f:id:nsr_9:20210815183924p:plain

文書単位の読み取り結果

f:id:nsr_9:20210815184027p:plain

行単位の読み取り結果

f:id:nsr_9:20210815183945p:plain

文書単位で読み込むと何故か行の各行の冒頭に読み取りミスが頻発するように見えますね。
これの原因についても今後調べてみたいと思います。