マニュアルAI活用:第2回 画像化文書の解析にTesseractを試す

ドキュメントの新版・旧版の一対の画像から差異を見つけるために使えそうな手段を探してみると、アプローチの仕方は下記のカテゴリに分けられそうです。

  1. OCR (Optical Character Recognition)
    • 画像内の文字列を検出してテキストデータに変換したうえで差分を取る
  2. 特徴点マッチング
    • 画像の中の特徴点(局所的に似たパターン)の配置で新旧を対応付ける
  3. 画像位置合わせ (Image Registration)
    • 新版・旧版で一致する画像パターンの平行移動・拡大縮小・回転等を特定する
  4. 物体検知 (Object Detection)
    • 画像上で検知対象の特定と位置決めを同時に行えるよう機械学習による物体検知を行う

以下ではこの1〜4について,検証結果を記述していくことにします。なお,この1〜4以外にも変化点検出のアプローチがありますが、傷検知のように限定された変化にしか対応できないので、今回は取り上げないことにします。

OCRの試用

文字列の差分抽出ツールならば使い勝手の良いものが既にあります。文章画像の新旧対照ならば、文字列データへの変換さえできれば課題はほぼ解決したようなものです。

ということで、日本語文章画像に対して無償のEasyOCRとTesseractを試してみました。

  • EasyOCR は、日本語文章画像から「節」相当の構造を切り出そうとするようです。また、改行が入ると節の途中でも分断されます。行構造を把握するにはちょっと後処理が面倒そう。誤認識は少ないが、無視できるほどとまでは言えませんでした。また、GPUが使えないと入力画像によっては処理時間がかさむことがありそう。今回は”GPUなしでも使える”という要件があるため、これはマイナスポイントと考えました。
  • Tesseractは、書籍や記事のように章立て・組版された文書を前提として文字列検出を行います。文章内容としての「節」には目もくれず、ページ→ブロック(カラム)→段落→行といった組版を特徴付ける矩形の階層として文書の構造を特定します。説明文などの新旧対照を画像ベースで行うにはこちらの方が使いやすそうと考えました。

Tesseractの用途について

Tesseractの文字列認識は英語のように単語の分かち書きが明白な文書との相性が良いようです。日本語は見た目上ほぼ分かち書きをしないので、文字列認識もしばしば間違うようです。よって、信頼できない文字列データは、新旧対照には使いにくいということになります。

しかし、Tesseractによる行構造の特定は信頼性が高いようです。文章の編集は複数行にまたがるシフトを生じるため、そのような行構造の情報を必要とする処理のためにTesseractは活用できそうです。

Tesseractによる行構造の特定結果

この記事の執筆者

人工生命・集団知性の応用研究からデータサイエンスに鞍替え、現在はフリーランサーとして主にPython上でPoC構築を請け負う。最近パワーリフティングにはまっている。