TECHSCORE BLOG

マーケティングSaaS を提供するシナジーマーケティングのエンジニアブログです。

日本語対応 OCR モデルの比較

アイキャット画像

はじめに

私は書籍を全文検索するために、OCRでテキスト化を行なっています。

コストの面から、個人利用無料のYomiTokuというローカルOCRを使っていますが、どの程度の精度なのか知るために、簡単に他のOCRモデルと比較してみました。

TL;DR(3行まとめ)

  • 強いノイズあり → Google Cloud Vision一択(唯一実用レベル)
  • 通常の文書 → Azure or YomiToku(最高精度・高速・低コスト)
  • OpenAI系 → 今回の日本語OCRでは全般的に不適

比較対象モデル

OCR専用でないものも含めて、以下のモデルを比較対象としました。

OCR 対象データ

読み取られるべき文章が、正確にわからなければ精度を評価できません。 そこで、AI でテキストを生成し、さらに画像化したものをOCR対象としました。

また、画質の影響も知りたかったので、それぞれの画像化テキストにノイズも追加してみました。

テキスト

経験的に、旧字などは精度が低い印象をもっています。 そういった使用される文字の影響を考えて、以下の7種類の日本語テキストソースを用意しました。

ソース名 文体など
neko-bunretsu.txt 普通の小説
neko-rakka.txt 普通の小説
neko-gaku.txt 哲学っぽい
neko-iri.txt 旧字・難読語・饒舌体
neko-tsumi.txt 旧字・難読語
neko-moji.txt 黒田夏子風
neko-stalker.txt 舞城王太郎風

全て、AIに簡単に特徴を説明して生成させた架空の小説テキストです。 (ソース名にテキストファイル全文をリンクしています)

ノイズ

以下の5種類のノイズを画像に追加しました。

ノイズ名 説明 サンプル
none 無加工
gaussian 低画質っぽいノイズ
speckle 斑点ノイズ
salt-pepper 黒い点が加えられる
poisson 人間でもかなり読みにくいノイズ

評価指標

CER(Character Error Rate)を主な評価指標としました。 レーベンシュタイン距離の各操作の回数を、文字数で割ることで、算出します。 低いほど良い性能を示します。

CER = (置換 + 挿入 + 削除) / 文字数

0であれば、完全一致となります。

なお、レイアウトなどはモデルによって扱いが異なり、今回の興味の範囲にないので、空白や改行を無視して計算しています。

平均 CER 順でのモデル比較(全ノイズ・全ソース)

  • google: 0.0547(median 0.0545)。全ノイズで安定して最良。Poissonでも0.0946に踏みとどまる。
  • azure: 0.2145(median 0.0108)。Poisson以外は0.018前後と最高だが、Poissonは全件CER=1.0で全滅。
  • yomitoku-cuda / cpu: 0.2161(median 0.021)。azureと同様にPoissonで壊滅(~0.99)。GPUとCPUの精度は同じだがGPUの方が速い。
  • tesseract: 0.346(median 0.204)。Poissonでほぼ1.0。非Poissonは0.18程度。
  • openai-*: mini 0.42、4o-mini 0.86、gpt-5 0.93、nano 0.99と精度が低く、今回の条件では不適。

モデル別平均CER比較

ノイズの影響

  • Poissonが突出して難しく、平均CER 0.877。azure / yomitoku / tesseract / openaiはほぼ全滅。GoogleだけPoissonでも0.04〜0.14程度で踏みとどまる。
  • Poissonを除外するとazure 0.0181、yomitoku 0.0229、google 0.0447と、azure/yomitokuが最良。
  • 他のノイズ(none/gaussian/speckle/salt-pepper)はモデル順位をほぼ変えず、影響は小さい。

ノイズ別平均 CER(全モデル・全ソース)

ノイズ別平均CER

Poisson 有無でのモデル比較

Poisson有無での比較

ソースの影響

  • 難易度差はあるがPoissonほど極端ではない。平均CER: neko-rakka 0.397(最易)〜 neko-tsumi 0.564(最難)。
  • Poissonの失敗がソースに関係なく起きているため、ソース差よりノイズ種の影響が支配的。

ソース別平均CER

速度

速度: azure や、ローカルの tesseract、yomitoku-cuda が速く、OpenAI系は10〜40sと遅い。

処理時間

価格

  • 価格感: 最安はopenai-gpt-5-nano(0.00072)だが精度が低い。実用域で考えるとAzure/Googleが約0.001前後で安く、OpenAI系(4o-mini/5/5-mini)は0.004〜0.006と高め。yomitoku / tesseractはローカルなので電気代だけとなり、最安の可能性が高い。
  • 価格は実際に処理された入出力トークン数に基づいて算出。
モデル 平均価格 (USD)
openai-gpt-5-nano-2025-08-07 0.00072
azure 0.00100
google 0.00150
openai-gpt-4o-mini-2024-07-18 0.00404
openai-gpt-5-mini-2025-08-07 0.00523
openai-gpt-5 0.00603

※ yomitoku / tesseractはローカル実行のため価格を算出していません。

実行環境

  • DDR5 96GB
  • AMD Ryzen 9 7900X3D
  • AMD Radeon RX 7900 XTX (VRAM 24GB)

まとめ

今まで利用してきた経験上もYomiTokuは十分な精度が出ている感じていましたが、今回の結果からも十分使っていけることがわかりました。

  • 強いノイズがある/想定される: Google一択(唯一実用CER)。他モデルは前処理(ノイズ除去)を入れない限り不可。
  • ノイズが少ない前提: AzureまたはYomiToku(高速で価格が安くCER最低)。Googleはやや遅いが安定志向で選択肢。
  • OpenAI系は今回の日本語OCRでは全般的に不適。

今後

今回はできませんでしたが、傾いた文書、手書き、実際の紙などでも試してみたいと思っています。

おまけ

鯵坂誠也のプロフィール画像
鯵坂誠也

フルスタック調エンジニア。猫を愛し、`npm i -g` を憎む。

シナジーマーケティング株式会社では一緒に働く仲間を募集しています。