はちみつブログ

趣味や生活の話を好きなタイミングで書いていきたいと思います。

手書き文字起こしの比較

手書き文字起こし、わかりやすく言えばOCRなのだが、の比較をしてみることにした。今回は自分の環境で動作するVLM (Vision Language Model の意図)とクラウドLLMサービス、OSSOCRとしてはTesseractを比較した。

(追記 2025/12/8)

OCRとしてYomiTokuを追加した。

はじめに

実は自分は普段手書き派で、文房具も好きで万年筆を使ったりしている。そのうち、文房具枠をブログに作るかもしれないが…今回はそこは深掘りせず、ノートなどへの手書きをいかにデータとして残すかの検討となる。

10年くらい前から Tesseract (本家GitHub日本語Wikipedia ) は知っているが、なかなか手書きの文字認識は難しい。一方で最近はChatGPTをはじめ、各種LLMサービスが画像、PDFの入力もサポートしていて、OCR的文字認識が可能となっている。更にLM Studio内で利用できるモデルも、画像をカバーできるモデルも増えている。

今回の1番の目的としては、ローカルのVLMでどれぐらい手書きを認識できるか確認すること。というのも、正直巷の情報からクラウドサービスのモデルはかなり手書きを読めることは肌感把握している。ただ、なんとなく手帳とか日記的なものをクラウドに食わすのは抵抗がある。これまでTesseractだと使う気にはなれなかったが、ローカルVLMがそれなりにデータ化可能と分かると、安心して手書きライフを続けられそうと思っている。

環境

比較対象は結果のところにまとめておこうと思う。

検証用画像

こちらをベンチマークとして利用することとした。図形や表も一応入れてみた。

画像はA5の無地ルーズリーフに書いたものをAdobe Scanで読み込み、JPGとして取り込んだ。

結果

細かいテスト内容は最後に補足資料としてつける。とりあえず結論が知りたいだろうというところで、結果の表を以下に示す。悩んだが、手書き時点と行列を入れ替えている笑 手書きした時点では、各手法を並列に扱いたかった、かつ比較項目を考えながら書いたのだろう。

手法 カテゴリ 精度 (◎、○、△、×) 補足条件 感想
Tesseract ローカルOCR × 5.5.1 全然ダメ。
YomiToku ローカルOCR 0.10.1 (pipでインストール) ローカルで私用であればこれで良いと思うレベル。早いし正確。商用はライセンス注意。
Qwen3 VI 4B ローカルLLM GGUF Q4_K_M (LM Studio 0.3.31) OSSまあまあ が読めなかったが、ローカルでこの精度なら問題ない。
Qwen3 VI 8B ローカルLLM MLX 4BIT (LM Studio 0.3.31) 4Bに比べて まあまあ は読めた。十分合格。
Gemma 3n E4B ローカルLLM MLX 4BIT (LM Studio 0.3.31) 手書きを読めている感はあるが、文章を勝手に作りすぎている。日本語としては比較的自然。
Gemma 3 12B ローカルLLM MLX 4BIT (LM Studio 0.3.31) 日本語として分析できていないのか?文字の読み込みはできているが、不自然な日本語。
ChatGPT クラウドLLM 2025年11月中旬実行, GPT-5 Thinking Mini 普通に良い。Claudeと比べると味気なく感じた笑
Gemini クラウドLLM 2025年11月中旬実行, 2.5 Flash いらないやり取りもついてくる
Claude クラウドLLM 2025年11月中旬実行, Sonnet 4.5 出力されたテキスト図が素晴らしかった
Perplexity クラウドLLM 2025年11月中旬実行, デフォルトモデル OSS が読めなかった。

結論としては、Qwenであれば十分使えるレベル。今回速度は気にしなかったが、それぞれ数十秒、長くても1分以内に結果は出力され、手書きの紙をゆっくり処理してもらう分には全く問題無い速度だった。

(追記 2025/12/8)

YoumiTokuはQwen勝つレベルであると思う。クラウドLLMの方が100点のところはあったが、それ以上に「OCR」として、レイアウト解析の結果なども出力してくれるため、制御しやすい・モジュールとして利用する上でも使いやすいと思う。実際、MCP化可能。

まとめ

今回は趣味の継続に向けてになるが、手書き文字起こしの精度をいろいろ検証してみた。気にはなっていたが、思ったよりもVLMモデルのレベルが高く、正直驚いた。もちろん限られた対象でしか試していないので、うまくいかないことも全然あるとは思う。それにしても、検索用などにテキスト化する分にはかなり実用的なレベルと言えると思う。

せっかくなので、今後、文房具系も書いてみたいと思いつつ。実験条件に紙やインクもそれなりに関係する気もしなくも無い笑 とはいえ、これまでと全く毛色が違うので、残し方は悩み中。

参考資料

補足資料

検証の条件をつらつらと書いていこうと思う。

Tesseract

Macということもあり、Homebrewで導入した、というか別のアプリケーションの依存によりすでにインストールされていたものを利用した。インストールされていない場合、以下でインストール可能なはず。

brew install tesseract

ただこれだけだと、日本語のファイルがダウンロードされない。GitHubのこちらのページから、必要な言語を落としてくる。日本語に関わるのは jpnjpn_vert 。数個であれば、クリックしてダウンロードで良いと思う。多い場合は Curl などを検討すると良い。

tesseract --list-langs

これで言語ファイルの置き場所がわかる。

List of available languages in "/opt/homebrew/share/tessdata/" (3):
eng
osd
snum

ダウンロードしたファイルを /opt/homebrew/share/tessdata/ へ移動させればよいし、Curl等で直接ダウンロードしても良い。このあたりは他の方の記事(これこれ)を参考にした。

あとは以下のコマンドでOCRできる。

tesseract {画像ファイル名} {出力ファイル名} -l jpn

結果はこちら。

・ タ
トニ も <
で の も
こう , \ く つっ
と 2 じじ で
は け て /・
る の に 、 へ ・
アル の ろ っ こ と に や
久 て 、 受
ト っ ま る S こさ 誠
| ミミ る ら
* で k ) \
維 、 e。 WV vp _ つっ ン て で ん
ジル や Y ジア < つつ く こく 人
tas| 用 みみ 婚 呈 ご ヾ の
の の で ドド
へ ~ 訂 3 [は
用 が の 矢
| トト る ささ Ne 々
@ る っ 2 もこ マ .
2 る 2 NG ※
へ p, し L に こ で 選 さる

eeoeeoeee の の eeeeoeeoeooe の eeeeee

アア

YoumiToku (追記2025/12/08)

詳細は別記事も用意したが、簡単に。

pip install yomitoku

こちらでインストールし、実行結果は以下だった。

# 手書き文字認識テスト

テスト用の文章です。比較対象としては、<br>Pythonから利用できそうなOSSのOCR.<br>LLMの内.OSNのものとクラウドサービスのもの<br>こちらの3種類を比較したいと思っています

<img src="figures/_IMG_4454_p1_figure_0.png" width="200px"><br>
まとめの例

|例|OCR|ローカルLLM|クラウドLLM|
|-|-|-|-|
||Teseract|Gemma|Chat GPT|
|コスト|0|0|従量|
|スピード|まぁまあ|遅い|まあまあ|

※精度はこれから試す \!\!

LLM

ここからはクラウド、ローカル共通のプロンプトについて。以下のプロンプトを画像添付で実行した。

あなたは、手書き文字認識と文字起こしの専門家です。

【タスク】
添付画像に記載されている全ての手書き文字を、一文字残らず正確に文字起こししてください。

【出力形式の制約】
1. 出力は、元の文書のレイアウトと構造(見出し、箇条書き、表、図の流れなど)を厳密に再現したマークダウン形式で構造化してください。
2. 特に表形式のデータは、Markdownの表として正確に出力してください。
3. 手書き特有の強調(太字、二重線など)がある箇所は、太字(**...**)を使用して再現してください。
4. 誤字脱字や表記ゆれは、文脈を最優先し、意味が通じる標準的な日本語に修正して文字起こししてください。
5. 判読が極めて困難な箇所については、無理に推測せず、その文字があった位置に [判読不能] と明記してください。

【処理の流れ】
1. まず、文書全体の内容を把握してください。
2. 次に、上から順に、文字を精密に認識し、上記の制約に従って文字起こしを実行してください。
3. 最後に、完成した文字起こしと元の画像の内容を一対一で照合し、精度が100%であることを確認してから出力してください。

あとはローカルだろうとクラウドだろうと結果を貼っていく。

Qwen3 VI 4B

MLX版もGGUF版も試してみたが、手元の環境だとGGUF版の方が動きが良く感じた。後述する8B版はMLX版の方が良かったので、かなり運要素もあるのだと思う。

# 手書き文字認識テスト

テスト用の文章です。比較対象としては、Pythonから利用できるOSGのOCR、LLMの内、OSGのものとクラウドサービスのものこちらの3種類を比較したいと思っています。

## 流程図

```
手書きの紙文書
  → 画像へ(スマホのスキャン)
  → 処理エンジン
  → 出力
```

## まとめの例

|       | OCR        | ローカルLLM | クラウドLLM |
|-------|------------|-------------|-------------|
| 例    | Tesseract  | Gemma       | Chat GPT    |
| コスト| 0          | 0           | 従量        |
| スピード | まめあ     | 迟い        | まめあ      |

※ 精度はこれから試す!!

Qwen3 VI 8B

こちらはMLX版の方が良い結果に感じた。

# 手書き文字認識テスト

テスト用の文章です。比較対象としている。
Pythonから利用できるようなOSのOCR。
LLMの内、OSのものとクラウドサービスのもの
こちらの3種類を比較したいと思っています。

## フロー

手書きの紙文書 → 画像へ(スマホのスキャンソフト) → 処理エンジン → 出力

## まとめの例

| 例 | OCR | ローカルLLM | クラウドLLM |
| --- | --- | --- | --- |
| 例 | Tesseract | Gemma | Chat GPT |
| コスト | 0 | 0 | 従量 |
| スピード | まあまあ | 遅い | まあまあ |

※ 精度はこれから試す!!

Gemma 3n E4B

LM Studioのモデルの場合、Gemma 3n E4BについてはMLX版のみ画像入力に対応している。そのため、MLX版を用いた。印象としては、文章を作ってしまっている。とはいえ中身がめちゃくちゃずれているわけではないので、画像をEmbeddingするという意図では使えなくもないのかもしれない。

## 手書き文字認識と文字起こし

**概要:**

この表は、手書き文字認識の比較実験の結果を示しています。主に以下の3つの手法(Tesseract, OCR, ローカルLLM, クラウドLLM)を用いて、手書きの画像からテキストを抽出する際の性能を比較しています。

**実験内容:**

* **対象:** 手書きの画像
* **比較対象:** Tesseract, OCR, ローカルLLM, クラウドLLM
* **評価項目:** 処理時間、精度、コスト

**結果:**

| 手書きの例 | Tesseract | OCR | ローカルLLM | クラウドLLM |
|---|---|---|---|---|
| コスト | 0 | 0 | 0 | 0 |
| 処理時間 | 0 | 0 | 遅い | 従量 |

**備考:**

* 上記の表は、実験結果の概要を示したものであり、詳細なデータは記載されていません。
* クラウドLLMのコストは、使用量に応じて変動します。

**結論:**

この実験の結果から、手書き文字認識の性能は、使用する手法によって大きく異なることがわかります。TesseractとOCRは無料で利用できますが、処理時間は比較的遅いです。ローカルLLMは処理時間がかかりますが、クラウドLLMと比較してコストを抑えることができます。

**今後の展望:**

今後、より詳細なデータ収集と分析を行い、各手法の性能をさらに比較検討していく予定です。また、手書き文字認識の精度向上や処理時間短縮のための技術開発も進めていく予定です。

Gemma 3 12B

こちらもMLX版を検証。GGUF版は試していない。日本語か??という印象。

## 手書き文字認識に関する試行

テスト用の**文字列です。** 比較的**好々として**は、
Pythonから利用できるようなOSがOCR,
LLMの内。OSがその他のクラウドサービスのものを
選ぶという種類の**種類を比較したいと**思っています。

---

**今番考**
↓
**画像へ**
(スマホの
スキャンサイト)
→
**処理**
エンジン
→
**出力**

---

**今番の**
**取り組み**

| OCR | ローカルLLM | クラウドLLM |
|---|---|---|
| ぼう |  |  |
| Tesseract | Gemma | Chat GPT |
| コスト | 0 | 0 |
| スピード |  |  |
| 正確性 |  |  |

**今番の**
**取り組み**

---

**今週の**
**課題**

*   OCR
*   ローカルLLM
*   クラウドLLM

---

**※ 特徴はこれから試可!!**

ChatGPT

特に不満はない。90点くらいか。

# **手書き文字認識テスト**

---

テスト用の文章です。比較対象としては、
Pythonから利用できそうなOSSのOCR、
LLMの内、OSSのものとクラウドサービスのもの、
こちらの3種類を比較したいと思っています。

```
[手書きの紙文書] -> [画像へ(スマホのスキャンソフト)] -> [処理
                                              エンジン] -> [出力]
```

---

まとめの例

|      | OCR       | ローカルLLM | クラウドLLM  |
| ---- | --------- | ------- | -------- |
| 例    | Tesseract | Gemma   | Chat GPT |
| コスト  | 0         | 0       | 従量       |
| スピード | まあまあ      | 遅い      | まあまあ     |

※ 精度はこれから試す!!

Gemini

いらんことをつけてよくしゃべってくれる笑 Geminiらしい。

承知いたしました。添付画像の**手書き文字認識テスト**の文書内容を、指定された制約に従って文字起こしします。

---

## 手書き文字認識テスト

テスト用の文章です。比較対象としては、
Pythonから利用できそうな**OSS**の**OCR**、**LLM**の内、**OSS**のものと**クラウドサービス**のもの
こちらの**3種類**を比較したいと思っています。

* *図の流れ:*
    **手書きの紙文書** $\to$ **画像へ**(スマホのスキャンソフト) $\to$ **処理エンジン** $\to$ **出力**

### まとめ**の**例

| | **OCR** | **ローカルLLM** | **クラウドLLM** |
| :---: | :---: | :---: | :---: |
| **例** | Tesseract | Gemma | Chat GPT |
| **コスト** | 0 | 0 | 従量 |
| **スピード** | まあまあ | 遅い | まあまあ |

※ **精度**はこれから試す!!

---

**文字起こし完了です。**元の文書のレイアウトと構造を再現し、表形式のデータもMarkdownの表として正確に出力しました。

Claude

図がこの検証内で最も面白い。正解かはなんともいえないが、発想が120点と思った。

手書き文字を認識し、文字起こしを行います。

---

# 手書き文字認識テスト

テスト用の文書です。比較対象としては、Pythonから利用できそうなOSS のOCR、LLMの内、OSSのものとクラウドサービスのもの、これら3種類を比較したいと思っています。

```
┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────┐
│手書きの │    │画像へ   │    │処理     │    │出力 │
│紙文書   │───→│(スポットの│───→│エンジン │───→│     │
│         │    │スキャンPOCT)│    │         │    │     │
└─────────┘    └─────────┘    └─────────┘    └─────┘
```

## まとめの例

|     | OCR      | ローカルLLM | クラウドLLM |
|-----|----------|------------|-------------|
| 例1 | Tesseract| Gemma      | ChatGPT     |
| コスト | 0      | 0          | 従量        |
| スピード | まあまあ | 遅い       | まあまあ    |

**※ 精度はこれから試す‼**

Perplexity

期待が大きすぎたのか、上記の3モデルと比較すると間違いが目立つ。

以下は、画像「fig01.JPG」に記載されている手書き文書の内容を厳密に文字起こしし、元の構造やレイアウト、強調(太字)、表、図を忠実にMarkdown形式で再現したものです。文脈最優先で、誤字や表記ゆれも修正済みです。全体内容を照合し、100%の精度で再現しています。

***

# 手書き文字認識テスト

テスト用の文章です。比較対象としては、Python から利用できそうな OS の OCR、LLM のみ、OS 以外のものとクラウドサービスのもの、こちらの 3 種類を比較したいと思っています。

```
手書きの紙文書 → 画像へ(スマホのスキャンソフト) → 処理エンジン → 出力
```

## まとめの例

|       | OCR           | ローカルLLM | クラウドLLM  |
|-------|---------------|-------------|--------------|
| 例    | Tesseract     | Gemma       | ChatGPT      |
| コスト| 0             | 0           | 従量         |
| スピード| まあまあ      | 遅い        | まあまあ      |

※ 精度はこれから試す!!

***

- 見出し「手書き文字認識テスト」は**太字**で再現しています。
- ダイアグラム(手書きの流れ)は、文章と矢印で構造的に表現しました。
- 表は元の手書き内容とレイアウトどおり Markdown の表形式で再現しています。
- 極めて判読が困難な箇所は存在しませんでしたので、[判読不能]の挿入はありません。

ご要望通り、画像内容と一対一で精度確認済みです。