スキップしてメイン コンテンツに移動

OCRの行の間から見る段落検出について その1

タスクと用語の整理

OCRを使って読み出した英文テキストについて、段落を検出する方法について検討します。同タスクを実現する方法はいくつか考えられますが、ここでは文字列間の空間的な距離を元に検出する方法について取り扱います。また、レイアウトはシンプルに縦方向にのみ存在するものとします(2段組などは考えない)。
まず用語の整理を行います。

空間的な距離

行送りと行間
文字列における各行間の距離について行送りと行間が挙げられる。Wordだと行間は上記の行送りに相当するし、それぞれを逆に定義しているものも存在する。
ここでは行送りと行間・文字送りと字間・文字サイズについて解説などいくつかのサイトを参考にし、行と行の距離を行送り、行の隙間(上側の行の下部から下側の行の上部まで)を行間とする。

タイポグラフィ的な用語の整理

Typography Line Terms

  • ベースライン(baseline):文字の下部に沿って引かれた仮想的な線
    • ミーンライン(mean line):x-height("xの高さ")の上部に沿って引かれた仮想的な線
    • アセンダ(ascender):文字におけるミーンラインより上側の部分
    • ディセンダ(descendr):文字におけるベースラインより下側の部分
    ここで理想的な行送りと行間は以下で求められる。
    • 行送り = ベースラインからベースラインまでの距離 
    • 行間 = 上側の行の最下端(ディセンダの部分)から下側の行の最上端(アセンダの部分)までの距離

    OCRで取得可能な値

    OCRでは認識した文字の矩形領域が取得できる。したがって、同一行のすべての文字の領域が持つ座標値の最小値、最大値から行全体の矩形領域が算出できる。
    n行目の最上端をTop_n、最下端をBottom_nとしたとき、行送りと行間は以下のように算出する。
    • 行送り ≒ |Top_n+1 - Top_n|
    • 行間 ≒ |Top_n+1 - Bottom_n|
    注意点は行送りにしても行間にしてもテキスト内容によって影響を受けること、行送りはベースラインが取得できないためTopで代替していること。
    理想的にはベースラインを基に行送りを算出する必要があるが、OCRではベースラインは取得できないため算出可能なTopもしくはBottomを使う必要がある。一方で同一フォントサイズであってもアセンダ・ディセンダの有無によってTopおよびBottomは変動するため、テキストの内容によっては理想的な行送りから遠くなってしまう。
    ちなみに行送りはToptoTopとBottomtoBottomの2パターンの算出が考えられるが、ディセンダを持つ文字よりもアセンダを持つ文字の方が多いためToptoTopの方が安定しているという推測のもとToptoTopを採用している。

    コメント

    このブログの人気の投稿

    KoeMill V.0.9.0.0 リリース

    KoeMillのV.0.9.0.0をリリース KoeMillは、音声認識による文字起こしを行うソフトウェアです。音声認識モデルにはWhisperが採用されており動画や音声から自動的に高品質な文字起こしができるため、煩雑な手作業を省くことができます。 オフラインで動作するため、ネットワークの遅延などによる遅れやプライバシーに関する懸念もありません。また、GPUを利用することで高速な処理を実現します。 ダウンロードページ

    CapCap V.0.9.2.7 リリース

    CapCapのV.0.9.2.7をリリース 主な変更内容 HTTP POST設定でヘッダの設定に対応 HTTP POST設定でJSONのオブジェクトおよび配列に対応 HTTP POST設定を大項目ごとに折りたためる機能に対応 サンプルプリセット(ChatGPT API)を追加 プリセット複製時に複製先の変更が複製元に及んでいた不具合を修正 HTTP POST設定 新たにリクエストヘッダを設定できるようになりました。これによりAuthorizationによる認証などヘッダが必要なAPIにも対応できるようになりました。合わせて、これまで設定することが出来なかったJSON ObjectおよびArrayについても設定できるようになりました。 ChatGPT APIについて サンプルプリセットを追加しました。HTTP POSTのヘッダおよびJSON ArrayとObjectに対応したため、その対応例となります。 継続的に使おうとすると費用が発生することになるので、無料枠が残っている間に遊んでもらえると幸いです。 DLページ: Home

    CapCap V0.9.2.5 リリース

    CapCapのV0.9.2.5をリリース 主な変更内容 段落検出機能を追加 字幕モードの名称を変更(Readability -> Text, Layout -> Item) 段落検出 テキストの行同士の距離をもとに段落を検出することが出来るようになりました。 段落の検出および段落間への空行挿入が行なえます。 これまではテキストをひと繋がりの文章として認識していましたが、段落ごとに分離されることで可読性の向上が見込めます。 文章に対して段落が多い場合や段落が2行からなる場合などには精度が落ちる傾向にあります。また実験的機能の側面があるため問題点等あればご報告いただけると助かります。 DLページ: Home