tesseractコマンドの使い方(Tesseract OCR 4.x)

オープンソースのOCRエンジン、Tesseract OCR付属のtesseractコマンドについて解説します。

目次#

Tesseract OCRとは#

オープンソースの文字認識(OCR)エンジンです。基本的に文字認識機能を提供するライブラリであって一般の方が想像するようなOCRソフトウェアではありません。

基本的にユーザー側でプログラムを作成して使うことを想定していますが、コマンドラインのツールとしてtesseractコマンドが提供されています。

前提条件#

最新の安定版はバージョン3.05.02ですが、このバージョンは日本語の認識率に問題があることで知られています。そのため、この記事ではバージョン4.0系のベータ版を対象とします。

  • Ubuntu 18.04.1
  • Tesseract OCR 4.0.beta.1

インストール#

Ubuntu 18.04 LTSを対象にします。コンパイル済みのパッケージが提供されているのでこれを利用します。Tesseract本体と別に認識させたい言語ごとにtraineddataという拡張子のデータファイルが必要です。

$ sudo apt install tesseract-ocr

標準では英語用の言語別の辞書データしかインストールされません。例えば日本語の場合は以下のように追加でインストールします。

$ tesseract-ocr-jpn tesseract-ocr-jpn-vert

tesseract-ocr-jpn-vertは縦書き用のデータです。

データファイルについて#

バージョンごとに対応したファイルを使用する必要があります。

Ubunt 18.04では/usr/share/tesseract-ocr/4.00/tessdata/に配置されています。

バージョン4.0向けのデータとしては下記の3種類のリポジトリがあります。

データファイルの詳細については公式リポジトリのWikiサイトにあるData Filesというページを参照して下さい。

Ubuntu 18.04のパッケージに含まれているのはtessdata_fastリポジトリにあるファイルです。

必要に応じてGitHubのリポジトリから入手します。git cloneする際は--depth 1をセットすることでダウンロードする容量を削減できます。

バージョン4.0系から書字系(script)別のデータファイルも提供されるようになっていますがこの記事では詳細は割愛します。

また、データファイルの入手にはダウンロード用のPythonスクリプトを使用するともできます。

GitHub - zdenop/tessdata_downloader: Tesseract tessdata downloader from GitHub repositories

Data Files · tesseract-ocr/tesseract Wiki · GitHub

データファイルの格納先の変更#

環境変数TESSDATA_PREFIX、または--tessdata-dirで指定することも可能です。

注意:バージョン3系ではtessdataディレクトリの親ディレクトリ。一方、バージョン4系では*.traineddataファイルのあるディレクトリを指定。

データファイルの格納先ディレクトリには設定ファイルも保存されています。

lsコマンドでデフォルトの格納先ディレクトリを表示してみます。

$ ls /usr/share/tesseract-ocr/4.00/tessdata/
Japanese.traineddata Latin.traineddata eng.traineddata jpn_vert.traineddata pdf.ttf
Japanese_vert.traineddata configs jpn.traineddata osd.traineddata tessconfigs

優先順位は--tessdata-dirオプション、環境変数TESSDATA_PREFIX、デフォルトのディレクトリの順です。

オプションが指定されるか、環境変数が設定されている場合はデフォルトのディレクトリは参照されません。

基本的な使い方#

入力画像の形式はLeptonicaという画像処理ライブラリが対応している画像形式(JPEG, png, tiff, webp, jepg2000, bmp, pnm, gif)。

$ tesseract image outputbase [-l lang] [--psm pagesegmode] [--oem ocr engine mode] [configfile...]
  • image: 画像ファイル(もしくはstdinを指定すると標準入力)
  • outpubtbase: 拡張子を除いた出力ファイル名(またはstdoutを指定すると標準出力)
  • -l lang: 各言語のデータファイルの拡張子を除いた部分(例: eng
  • --psm: ページセグメンテーションモードを指定する整数
  • --oem: OCRエンジンのモード(0, 1, 2, 3、デフォルトは3)
  • configfile: コントロールパラメーターを記載したファイル

-lオプションを省略した場合はengが使用されます。

実行例
$ tesseract sample.jpg output -l jpn

上記の例では、sample.jpgファイルの読み込み、output.txtに認識結果を出力します。

また、マルチページのTIFFファイルを扱うこともできます。

※ pnm形式はpbm、pgm、ppmの三種類の総称。

出力形式#

デフォルトのテキスト形式の他、HTMLをベースにしたhOCR、タブ区切りテキスト、PDFで出力可能です。

tesseractコマンドの末尾に各出力形式のconfigファイルの名称を指定します。

configファイルはデータファイルと同じ場所を参照します。

実行時のカレントディレクトリに配置したconfigファイルを指定することも可能です。

テキスト形式#

実行例
$ tesseract sample.jpg output -l jpn txt

hOCR (HTML)#

実行例
$ tesseract sample.jpg output -l jpn hocr

TSV(タブ区切りテキスト)#

実行例
$ tesseract sample.jpg output -l jpn tsv

出力はoutput.tsv。英単語は単語単位、日本語の文字はN-gram区切りになります。

取得できる情報は以下のとおり。

level, page_num, block_num, par_num, line_num, word_num, left, top, width, height, conf, text

PDF形式#

実行例
$ tesseract sample.jpg output -l jpn pdf

画像の上に透明なテキストが追加された形式になります。画像は圧縮されてPDFに埋め込まれます。

画像なしの、透明なテキストのみのPDFを作ることもできます。

画像の圧縮率を調整したい場合に有用です。

実行例
$ tesseract sample.jpg output -l jpn  -c textonly_pdf=1 pdf

透明なテキストのみのPDFが生成されます。

一手間かかりますが、qpdfコマンドなどを使用して画像を埋め込むことで背景画像の画質をコントロールできます。

参考: -c textonly_pdf=1

オプションの詳細と高度な使い方#

パラメーターによる挙動の制御#

コントロールパラメーターを-cオプションまたは設定ファイルに記載することで挙動を変更できます。

設定可能なパラメーターおよびデフォルト値を下記のコマンドで表示できます。

$ tesseract --print-parameters

下記のWikiも参照して下さい。

ControlParams · tesseract-ocr/tesseract Wiki · GitHub

存在しないパラメーターをセットしようとした場合、下記のようなメッセージが表示されます。処理は続行される点に注意が必要です。

Could not set option: include_page_breaks=1

コロンの右側は指定しようとしたパラメーターによって変化します。

複数言語モード#

+で区切ることで-lオプションに複数の言語名を指定できます。

$ tesseract test.png  stdout -l eng+jpn   --psm 1

指定する順序で認識結果に影響を与える場合があります。

$ tesseract test.png  stdout -l jpn+eng

日本語主体で英単語を含む場合はjpn+engの方がベターです。engを優先すると分かち書きされてしまう点に注意して下さい。

複数ファイルの一括処理#

前述のとおり、画像ファイルのリストを記述したファイルを引数に与えることで一括処理が可能です。出力ファイルは単一のファイルで、ファイルごとの認識結果の区切りに改ページ文字(^L)が挿入されます。

この挙動を変更するには-c page_separator=オプションを使用します。

ページ区切りに何も挿入しない場合の例を示します。

$ tesseract -c page_separator=''  image_list.txt output

なお、従来のinclude_page_breaksというパラメータは廃止されています。

有効な言語の一覧(データファイルのリスト)#

--list-langsオプションを指定すると現在使用可能な言語の一覧を表示します。

$ tesseract --list-langs
List of available languages (7):
Japanese
eng
Japanese_vert
Latin
jpn_vert
osd
jpn

エンジンモードの切り替え#

従来の認識エンジン(Legacy engine)に加え、LSTMベースのニューラルネットワークによる認識エンジン(LSTM engine)が採用されています。

ただし、従来の認識エンジンを使用するには古い形式の各言語別のデータを含んだデータファイルが必要になります。つまり、tessdataリポジトリのデータファイルを用意する必要があります。

従来の認識エンジンを使用する場合は--oem 0、新しい認識エンジンは--oem 1です。両方を組み合わせる場合は--oem 2

指定しない場合はデータファイルに合わせて利用可能なエンジンが使用されます(--oem 3、実際は新しい認識が優先)。

以下、ヘルプメッセージからの抜粋。

  • 0 Legacy エンジンのみ
  • 1 Neural nets LSTM エンジンのみ
  • 2 Legacy + LSTM の両方を使用
  • 3 Default, 利用可能なエンジンを使用

ページセグメンテーションモード (PSM)#

画像のレイアウト解析のためのオプションです。
ページセグメンテーションモード(PSM)を整数で指定することによりレイアウト解析処理の挙動をコントロールできます。

バージョン3.05以降では--psmのようにハイフンが2つ必要です。

--psmオプションは以下のように指定します。

$ tesseract sample.png stdout -l jpn --psm 6

指定可能なオプションのリストです。

  • 0 文字方向および書字系の検出 (Orientation and script detection: OSD) のみ
  • 1 自動ページセグメンテーション(OSDありでOCR).
  • 2 自動ページセグメンテーション(OSDなし)
  • 3 完全自動ページセグメンテーション(OSDなし) (Default)
  • 4 単一カラムの様々なサイズのテキストとみなす
  • 5 垂直方向に整列した単一カラムの均一ブロックテキストとみなす
  • 6 単一カラムの均一ブロックテキストとみなす
  • 7 画像を単一行のテキストとして扱う
  • 8 画像を単語1つのみ含まれるものとして扱う
  • 9 画像を円で囲まれた単語1つのみを含むものとして扱う
  • 10 画像を1文字のだけが含まれるものとして扱う
  • 11 Sparse text: 不特定の順序でできるだけ多くのテキストを探す
  • 12 Sparse text: OSDあり
  • 13 Raw line: 内部の処理をバイパスしつつ画像内にテキストが1行だけあるものとして扱う

--psm 0および--psm 2ではOCR処理は実行されません。

認識対象の画像によりますが、--psm 6--psm 4を指定することで認識結果が改善する場合があります。

特に画像内に含まれるテキストが1行のみの場合、--psm 7が有効です。

方向と言語の判定#

OSDモードの使用例です。文字の方向やページの回転、書字系(書字体系や用字系とも)の情報を表示します。

$ tesseract test.png stdout -l osd --psm 0
Warning. Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 189
Page number: 0
Orientation in degrees: 0
Rotate: 0
Orientation confidence: 2.76
Script: Japanese
Script confidence: 1.10

osd.traineddataというデータファイルが必要です。また、Tesseract 4.0系ではOSD処理は旧式のエンジンで処理されています。

情報表示系のオプション#

以下、バージョン情報などの表示オプションを紹介します。

バージョンの表示#

$ tesseract --version
tesseract 4.0.0-beta.1
leptonica-1.75.3
libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 1.5.2) : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.3.0

Found AVX
Found SSE

省略形は-vです。

モード別詳細#

OCRエンジンモードの一覧表示。

$ tesseract --help-oem
OCR Engine modes: (see https://github.com/tesseract-ocr/tesseract/wiki#linux)
0 Legacy engine only.
1 Neural nets LSTM engine only.
2 Legacy + LSTM engines.
3 Default, based on what is available.

ページセグメンテーションモードの一覧表示。

$ tesseract --help-psm
Page segmentation modes:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line,
bypassing hacks that are Tesseract-specific.

ヘルプ表示#

下記のコマンドでヘルプメッセージを表示します。

$ tesseract --help

より詳細なヘルプメッセージの表示。

$ tesseract --help-extra

その他#

警告メッセージについて#

tesseractコマンドの実行時に、下記のメッセージが表示されますが、これは内部で使用している画像処理ライブラリ(Leptonica)の警告メッセージで無視して問題ないです。

Warning. Invalid resolution 0 dpi. Using 70 instead.

[Clarification request/bug?] “Warning. Invalid resolution 0 dpi. Using 70 instead.” · Issue #649 · tesseract-ocr/tesseract

参考URL#