メインコンテンツまでスキップ

イントロダクション

現在の光学文字認識(OCR)分野の研究では、モデルの正確性はデータセットの品質と多様性に依存しています。

ここでは、現行研究が直面しているいくつかの課題を列挙します:

  1. データ量の不足:現存するデータセットの規模は限られており、あらゆるシナリオやサンプルを網羅することができません。
  2. クラスの不均衡:特定のクラスのサンプルが極端に少なく、長尾分布の問題が深刻です。
  3. 多様性の欠如:既存のデータセットのサンプルは単一的で、現実世界の多様な状況を反映していません。
  4. 合成データと実データの差異:合成データセットは、実際のアプリケーションシナリオにおけるデータと差異があります。

さらに、数十から数百程度のラテン文字に比べ、漢字の数はまさに災難といえます。(おい!もっとリスペクトしろ!

中国語 OCR の研究では、上記の課題に加え、さらに多くの独自の難題が派生します:

  1. 文字の多様性と数の多さ

    漢字には数千の常用字と、十万近い難読字が含まれ、その分布も非常に不均衡です。

    ヒント

    十万近い?本当かよ?

    この数字は Wikipedia Unicode 拡張漢字 のデータに基づいています。現在、約九万以上の漢字が存在し、その数は増え続けています。

  2. 複雑な文字形構造と文脈依存

    漢字は多数の筆画で構成され、筆画の形状や配置は多様です。類似する漢字は文脈に依存しないと区別がつかないことも多いです。

    ヒント

    例:(口、囗)、(日、曰)、(木、朩) など。

  3. 書体の違い

    書体による課題は単一の文字に限らず、各文字が無数の異なるフォントスタイルに派生する可能性があります。漢字の膨大な基数を考えると、異なるフォントや書体が認識の難しさをさらに増加させます。

    calligraphy

  4. 縦書きテキストと中英混在

    中国語では縦書きテキストが頻繁に見られ、特に伝統文化に関連するシナリオで多く見られます。また、西洋文化の影響により、テキスト内の中英混在も一般的で、これらが文字認識に追加の課題をもたらしています。

    vertical

  5. ラベル付けリソースの不足

    これがおそらく最も困難な部分です。アルファベットのように数十種類の文字しかないわけではなく、漢字の数が多すぎて、高品質なデータセットにラベル付けをするのは非常に時間とコストがかかります。

    ヒント

    素材を見つける問題はさておき、見つかったとしても、ラベル付けする人がその難読字を認識できないことが多いです。

目標

したがって、本プロジェクトの目標は上記の問題を解決することです……

まあ、すみません、これらの問題は大きすぎるので、少なくとも一部を解決することを目指します。

合成データを用いて、多様な中国語テキスト画像を大量に生成し、データ量不足、クラスの不均衡、多様性の欠如などの問題に対応します。このため、いくつかの既存のテキスト合成ツールを参考にしました。

備考

詳細は:関連リソース をご覧ください。

それらの設計方法から多くのインスピレーションを得て、ゼロから新しいテキスト画像生成ツールを作成することにしました。

私たちの生成モジュールは、事前定義された文字コード表に基づくのではなく、フォント(正確には Pillow 実装)に基づいています。つまり、任意のフォントを使用して文字画像を生成でき、文字方向、整列方法、文字の長さ、文字の色、背景色などの設定に対応しています。

フォントが見つかれば、そのフォントで画像を生成できます。

設計理念

設計段階では「関数指向設計」か「オブジェクト指向設計」のどちらを採用するかを検討しました。

最終的に後者を選択しましたが、理由はシンプルで、どちらを選んでも使いにくいと感じるからです。(???)

実際には、多くの選択可能なパラメータがユーザーに混乱をもたらします。オブジェクト指向設計は、これらのパラメータをより良く整理することができるため、このアプローチを選びました。さらに、以下の図のようなダッシュボードを設計し、車を運転するように現在の設定を把握し、調整できるようにしました。

dashboard

最後に

このプロジェクトでは、次の機能を実現しました:

  1. ダッシュボード:現在の設定の把握と調整。
  2. 画像生成:多様なテキスト画像の生成。
  3. 出力整列:4 種類の整列方法をサポート。
  4. 出力方向:水平と垂直の 2 種類の出力方向をサポート。
  5. 文字の圧縮:文字圧縮機能をサポート。
  6. 出力サイズの標準化:画像出力の標準化されたサイズをサポート。
  7. ランダムフォント:フォントのランダム選択をサポート。
  8. ランダムテキスト:ランダムな文字の選択をサポート。
  9. ランダム文字長:ランダムな文字の長さをサポート。
  10. ランダム文字色:ランダムな文字色の選択をサポート。
  11. ランダム背景色:ランダムな背景色の選択をサポート。
  12. ランダム文字方向:ランダムな文字方向の選択をサポート。
  13. ランダム整列方法:ランダムな整列方法の選択をサポート。
  14. ランダム最小文字長:最小文字長の指定をサポート。
  15. ランダム最大文字長:最大文字長の指定をサポート。

その他のご要望がございましたら、下記にコメントをお寄せください。

ご縁があれば、ご要望に応じた新機能を追加いたします。