Skip to content

Latest commit

 

History

History
42 lines (30 loc) · 2.46 KB

idea.md

File metadata and controls

42 lines (30 loc) · 2.46 KB

アプローチ

行抽出

前提知識として, 現在の Google Cloud Vision (GCV) の OCR をユーザーとして利用する上での注意点を大雑把に整理する. GCV は, 文章を含む画像の適当な部分集合を, 文章ブロックやパラグラフ等の構造化された単位に分解した上で, その中の文字と位置情報を数文字単位で返す.

この文字認識の精度は, 日本語の場合でも実用可能なレベルで高い. 他方で, この文章構造の分解の仕方は, 元の文書のそれを正確に反映するとは限らない. 実際, GCV の解析した通りにセンテンスを出力してみると元々の文章の順番が狂うということがしばしば起こる. たとえば, 次のような本の目次の場合, Preface 等とページ番号が別ブロックとして, したがって, 別パラグラフとして認識されるため, OCR 結果を素朴に並べるとページ番号が別行に移されてしまう.

(Input image)
Table of Contents
Preface                     iii
Chapter I Introduction      1
(Output text)
Table of Contents
Preface
Chapter I Introduction
iii
1

意図した結果を得るには, 入力した文章の視覚的配置に応じて, 適切に出力文字の再順序化を施す必要がある.

このレポジトリのスクリプトは, 入力した文章が, 横書きの一段組であるという前提を置いて, 出力文字の再順序化を行う. GCV の解析したブロック情報やパラグラフ等の構造を無視して, 各文字の位置情報から各行を定義する. 次いで, 行同士および各行内の文字の順番を整えることで, 横書き一段組の場合の文章の配置を復元する.

スペース調整

一行を構成する文字を確定できたとしても, 各行内の文字を素朴に結合すると, 全く空白文字を含まない行が出来上がってしまう.

1.1Introduction1

適切な位置に適量の空白文字が入るようにしたい. 空白文字の位置については, 各文字が水平方向に一定以上離れたところに空白を入れるようにした. この「一定以上」を定める閾値は以下の2パターンの小さい方を使う. これらの値は行ごとに定義される.

  • 行を囲む外接四角形を定義し, その高さの一定比
  • 行内の文字間隔を計算し, IQR の意味で上方外れ値を定める境界値