###背景
画像ファイル(帳票データのスキャン)から、Tesseract(テッセラクト)を用いて、テキストデータをサクッと抽出できたので、備忘録として、整理した。
- Tesseract(テッセラクト)は、日本語にも対応したOCRエンジン
- オープンソースでライセンス(関連記事1.)は「Apache License 2.0」ということで、商用利用も可能
- Tesseract 4 からは、RNN (Recurrent Neural Network) を拡張したLSTM(Long short-term memory)をベースとしたOCRエンジン(AI-OCR)も搭載されており、これを利用することで、抽出精度も期待できる(と思う)
- サポート言語は、『tesseract/doc/tesseract.1.asc』 から数えたところ、117個存在した(2020/7/25時点)
###1.導入
- 最初に、『tesseract-ocr/tesseract』 を参照
- その中で、Window環境においては、参照先からリンクされている Tesseract at UB Mannheim の older versions から、最新(v5)の安定版用(tesseract-ocr-w64-setup-v5.0.0.20190623.exe)のインストーラーをダウンロード
- その後の作業は、『Tesseract OCR をWindowsにインストールする方法(関連記事2.』)を参考に実施
###2.実行
- 実行においては、テストデータとして、【エクセル・マクロ】VBA+OCRで画像内のテキストを抽出するで紹介されている、テスト画像データを活用
- 実行に先立って、実行用に『PythonでOCRを実行する方法(関連記事3.)』を参考に、pythonコードを作成
- pythonからtesseractを利用するには、PyOCRパッケージが必要
- このパッケージを利用することで、よりテキストの抽出精度が向上(ゴミ削除)が可能(のようである)
- 実行結果を以下に記載
C:\Users\xxx\work>python ocr_card.py test_data_3.png
画像上に記載されている文字列をプログラムで解析し、テキストだけを文字列として取得することが可能です!今回は、間料です友に 偽え、それをりの若六は見ふめる、をんな文字認識方法を紹介しだいと思います。
画像上に記載されている文字列を
プログラムで解析し、テキストだ
けを文字列として取得することが
可能です!
今回は、間料です友に偽え、それ
をりの若六は見ふめる、をんな文
字認識方法を紹介しだいと思いま
す。
- さらに、『【Pyocr+TesseractOCR】競馬新聞の活字化;精度向上♬(関連記事4.)』を参考に、画像データのサイズを拡大
- この結果、少なくとも空白行が除去されていた
C:\Users\xxx\work>python ocr_card.py test_data_3_mod.png
画像上に記載されている文字列をプログラムで解析し、テキストだけを文字列として取得することが可能です!今回は、和科料て考醤 に偽え、それをりの若病は見人ふめる、才んな文字認識方法を紹介しだいと思います。
画像上に記載されている文字列を
プログラムで解析し、テキストだ
けを文字列として取得することが
可能です!
今回は、和科料て考醤に偽え、それ
をりの若病は見人ふめる、才んな文
字認識方法を紹介しだいと思いま
す。
- その他、Tesseract の理解には、『八谷大岳の覚え書きブログ(関連記事5.)』が参考になる
- また、PDFファイルから画像データを抽出して保存(変換)するには、『PythonでPDFを画像ファイル(JPEG、PNG)に変換する方法(関連記事6.)』 が参考になる
###3.考察
- 明朝フォント、ゴシックフォントにおいては、正しく画像内のテキストが抽出できている
- その他フォントでは、誤抽出が目立っている
- このことから、他の日本語フォントでは、おそらく学習データがなくトレーニングされていないと考えられる
⇒ したがって、画像原本内で利用されているフォントを学習させることで、誤抽出の削減が期待できる - また、画像を拡大することで、最初の実行結果である空白行(誤抽出)の削除に繋がっている
⇒ したがって、画像データを少しでも拡大することで、より誤抽出の削減に期待できる
###4.精度向上
では、どうやって精度を上げていくか?
・独自に学習データを作成して学習させる
素人的に考えられる方法としては、次のとおり。しかし、こういったことができるのか、ツール(今回は、Tesseract(テッセラクト))を調べる必要がある。
(1) 手書きの場合 ⇒ 画像原本内の手書き文字の特徴(クセ)を反映した学習データを準備し学習させる。
・『Tesseract 4.1にLSTMを使って手書き文字を再学習させる(関連記事7.)』
・『【23個掲載】OCR(光学式文字認識)・手書き文字認識データセットまとめ(関連記事8.)』
(2) 画像原本内で使われているフォントを学習データとして用意して、学習させる
・すぐにでもできる方法
『[【SikuliX】OCRの日本語読み取り精度を上げる3つの方法] (https://valmore.work/3way-increase-ocr-accuracy/)(関連記事9.)』に記載されている、次の3つを試してみることで精度向上が期待できる(と思われる)
(1)適切な文字サイズに画像を拡大して読み取る
(2)できるだけ高解像度の画像を用意する
(3)ブラックリスト、ホワイトリストを設定する
##関連記事
1.OSSのライセンスを理解する(「使用」と「利用」の違い、知っていますか?)
2.Tesseract OCR をWindowsにインストールする方法
3.PythonでOCRを実行する方法
4.【Pyocr+TesseractOCR】競馬新聞の活字化;精度向上♬
5.八谷大岳の覚え書きブログ
6.PythonでPDFを画像ファイル(JPEG、PNG)に変換する方法
7.Tesseract 4.1にLSTMを使って手書き文字を再学習させる
8.【23個掲載】OCR(光学式文字認識)・手書き文字認識データセットまとめ
9.[【SikuliX】OCRの日本語読み取り精度を上げる3つの方法] (https://valmore.work/3way-increase-ocr-accuracy/)
10.Documentation of Tesseract OCR
11.tesseract-ocr/tesseract
12.PythonとTesseract OCRで文字認識
13.Tesseract 4.1にLSTMを使って日本語を再学習させる
14.甲骨文字で書かれた文章をOCRで読み取れるようにしてみる
15.文字認識エンジンTesseract OCRで学習
16.jTessBoxEditorでTesseractの学習データを作成する
17.Tesseract+PyOCRで簡易OCRを試してみる
18.PyOCRでTesseractを使う
19.罫線の無い 10 行 10 列の等間隔整列した文字の画像を大きくリサイズして ocr してみる(Python + Tesseract)
20.tesseractコマンドの使い方(Tesseract OCR 4.x)
21.tesseract のオプション PSM をいじってみた
22.Pythonで書くTesseract 4の基本的な使い方。APIとCLIからOCRを実行する方法