synthonly-ja-str-6m-202611:合成データだけで学習した日本語文字列認識モデル

日本語の文字列画像(1 行の切り出し)を読む、約 600 万パラメータの文字認識モデルです。

  • 学習データは合成だけです。 実際の撮影画像や実際の手書きは学習に使っていません。

  • 読める対象: 看板、レシート、紙面などの印刷文字と、手書き文字です。横書きも縦書きも読めます。

  • JaWildText の test での結果: 次のとおり、実データで学習した NDLOCR-Lite を上回りました。

    対象 このモデル NDLOCR-Lite
    board+receipt の合算 81.0% 70.6%
    手書き行(CER) **32.7%**(12.4) 30.0%(15.9)
  • 速度: CPU 1 スレッドで 1 行あたり約 19 ms です。

概要

項目 内容
タスク 文字列認識(切り出した 1 行の画像 → 文字列)。日本語とラテン文字、横書きと縦書き
パラメータ数 6.00M
速度 CPU 1 スレッド、バッチ 1、前処理込みで 1 行あたり約 19 ms(Apple M シリーズ)

使い方

pip install torch numpy opencv-python-headless safetensors
python synthonly_infer/recognize.py --model . crop1.jpg crop2.png
import sys
sys.path.insert(0, "synthonly_infer")
from recognize import Recognizer

rec = Recognizer(".", device="cpu")      # または "cuda"
print(rec(["crop.jpg"]))                 # パス、エンコード済み画像のバイト列、RGB uint8 配列のいずれか
  • synthonly_infer/ には、推論に必要な最小限のコードだけを入れてあります。上記のパッケージ以外に依存はありません。
  • 入力は 1 行分の切り出し画像にしてください。このモデルは文字の検出をしません。
  • 出力できるのは、charset.txt にある 7,090 文字です。最大 50 文字まで出力します。
  • 出力は次の正規形で、空白は含みません。
    • NFKC 正規化のうえ、空白を除きます。
    • ダッシュ類は -、波ダッシュ類は ~、中点類は ・、曲がった引用符は ' / " にそろえます。
    • 分離した濁点・半濁点は合成します。

学習

データ

学習データはすべて合成です。

  • 印刷文字:
    • 1,910 個のフォントファイル(OFL / Apache / IPA)で描画しています。
    • 看板、レシート、値札、紙面、LED、7 セグなどのさまざまな場面のテンプレートを使っています。
  • 手書き文字:
    • 漢字のストロークデータを、書き手ごとの癖のモデルで変形して合成しています。
    • 筆記具は、ボールペン、鉛筆、サインペン、マーカー、タブレットのペンを模しています。
    • 紙はノートの罫線や方眼です。
  • 手書きの撮影条件: 白地に極細のデジタルインクで書いた行や、ノートを撮影した写真のように暗め・ぼけ気味・暖色に仕上げた行も含みます。
  • 文の出所: 青空文庫、Tatoeba、辞書・統計データ由来の固有名詞、価格・日付などのテンプレート、英単語などです。

JaWildText は評価にだけ使い、学習には使っていません。

評価

評価の方法(JaWildText)

  • 評価データは JaWildText(Apache-2.0)の test です。行はポリゴンから補正して切り出しました。
  • 分割は、board / receipt では画像のハッシュ単位、手書きでは書き手単位です。
  • 正解率は、上記の正規化後の完全一致(行単位)です。
  • 95% 信頼区間は、board / receipt では画像単位、手書きでは書き手単位、英語では行単位のブートストラップで求めました。

JaWildText の結果

test セット 行数 正解率 1−NED CER
board 21,671 76.18 [74.12, 78.16] 90.94 8.09
receipt 36,098 83.94 [83.26, 84.61] 94.44 10.16
board+receipt(合算) 57,769 81.03 [80.13, 81.93] 93.13 9.20
手書き 4,087 32.66 [30.65, 34.70] 88.66 12.42

英語ベンチマーク

英語ベンチマークは、大文字小文字を区別しない英数字 36 文字での正解率です(PARSeq の評価方法)。

IIIT5k SVT IC13 (1015) IC15 (2077) SVTP CUTE80 合算(7,672 行)
90.60 84.39 90.34 67.40 71.32 81.25 81.79

ほかのモデルとの比較

同じ test の切り出し画像で比べました。

モデル パラメータ数 学習データ board+receipt 手書き 正解率 / CER 英語(合算)
このモデル 6.0M 合成、2,200 万サンプル 81.03 32.66 / 12.4 81.79
NDLOCR-Lite 8.8–9.8M 実データ 70.57 30.02 / 15.9 67.70
  • NDLOCR-Lite: バックスラッシュとして出力される ¥ は、¥ に戻して評価しています。

制限事項

  • 1 行のみ。 入力は切り出した 1 行の画像にしてください。50 文字を超える行は出力できません。極端に長い画像は幅 768 px に縮められます。
  • 向き。 文字が約 45° 以上傾いた画像や、上下が逆の画像は誤読します。自動で回転するのは縦長の画像だけで、反時計回りに 90° 回します。
  • 手書き。 印刷文字に比べると、まだ大きく劣ります。とくに苦手なのは次のものです。
    • 崩し字や乱れた字;
    • 手書きのラテン文字、ギリシャ文字、数式。
  • 英語。 英語専用のモデルには及びません。学習データに占める英語は約 7% です。
  • 文字集合。 7,090 文字にない文字は出力できません。JIS 第 2 水準を超える漢字や絵文字がこれに当たります。

ライセンス

このリポジトリ(重みと同梱コード)は CC BY 4.0(Creative Commons Attribution 4.0 International)で提供します。

  • 利用、改変、再配布は、商用を含めて自由です。
  • 配布や公開の際は、出典としてこのリポジトリを表示してください。

合成データの元にした素材

素材 用途 ライセンス 表示
フォント 1,910 ファイル(OFL-1.1:1,864、Apache-2.0:44、IPA:2) 文字の描画 SIL OFL 1.1 / Apache-2.0 / IPA フォントライセンス フォントで描画した画像はフォントによる成果物で、OFL の条件は及びません
KanjiVG(r20260714) 手書き文字の合成 CC BY-SA 3.0 Copyright (C) 2009-2026 Ulrich Apel, https://kanjivg.tagaini.net/
Poly Haven、ambientCG のテクスチャ 背景 CC0-1.0 —
PD12M の写真 背景 CC0-1.0 / Public Domain Mark —
青空文庫のパブリックドメイン作品(globis-university/aozorabunko-clean 経由) 文 CC BY 4.0(作品自体はパブリックドメイン) 青空文庫(aozora.gr.jp)、globis-university/aozorabunko-clean
Tatoeba(日本語・英語の文、英単語の頻度) 文、英単語 CC BY 2.0 FR Tatoeba(tatoeba.org)の投稿者
dwyl/english-words 英単語 Unlicense —
SudachiDict(small+core。UniDic、NEologd の一部を含む) 人名、地名、名詞、カタカナ語 Apache-2.0(UniDic 部分は BSD-3-Clause) Works Applications、UniDic コンソーシアム、NEologd
国土数値情報(鉄道データ)N02 2024 駅名、路線名、事業者名 CC BY 4.0 「国土数値情報(鉄道データ)」(国土交通省)を加工して作成
国税庁法人番号公表サイト 会社名、市区町村名、町名 公共データ利用規約 第1.0版(PDL 1.0) 出典:国税庁法人番号公表サイト(国税庁)を加工して作成
レシートの語彙、テンプレート、記号 文のテンプレート 本プロジェクトで作成 —

ファイル

ファイル 内容
model.safetensors モデルの重み(fp32)
config.json 推論に使う設定
charset.txt 出力の 7,090 文字を ID 順に並べたもの(ID は行番号、0 は系列の終わり)
synthonly_infer/ 推論用の最小限のコード(recognize.py ほか)
Downloads last month
24
Safetensors
Model size
6M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support