Skip to main content

日本語版 | English

Python PyTorch CUDA OS Document PyPI Downloads Web Demo

🌐 インストール不要でブラウザから試せます → YomiToku Studio 推論はすべてブラウザ内(WebAssembly / WebGPU)で実行され、画像はどこにも送信されません。まずは手元の画像で精度を確かめてみてください。

🌟 概要

YomiToku は日本語に特化した AI 文章画像解析エンジン(Document AI)です。画像内の文字の全文 OCR およびレイアウト解析機能を有しており、画像内の文字情報や図表を認識、抽出、変換します。

  • 🤖 日本語データセットで学習した 4 種類(文字位置の検知、文字列認識、レイアウト解析、表の構造認識)の AI モデルを搭載しています。4 種類のモデルはすべて独自に学習されたモデルで日本語文書に対して、高精度に推論可能です。
  • 🇯🇵 各モデルは日本語の文書画像に特化して学習されており、7000 文字を超える日本語文字の認識をサポート、手書き文字、縦書きなど日本語特有のレイアウト構造の文書画像の解析も可能です。(日本語以外にも英語の文書に対しても対応しています)。
  • 📈 レイアウト解析、表の構造解析, 読み順推定機能により、文書画像のレイアウトの意味的構造を壊さずに情報を抽出することが可能です。
  • 📄 多様な出力形式をサポートしています。html やマークダウン、json、csv のいずれかのフォーマットに変換可能です。また、文書内に含まれる図表、画像の抽出の出力も可能です。文書画像をサーチャブルPDFに変換する処理もサポートしています。
  • ⚡ GPU 環境で高速に動作し、効率的に文書の文字起こし解析が可能です。また、VRAM も 8GB 以内で動作し、ハイエンドな GPU を用意する必要はありません。軽量モデルを用いれば CPU でも高速に推論が可能です。

🖼️ デモ

インストール前に、ブラウザ版 YomiToku Studio で手元の画像を試せます(画像は外部送信されません)。

gallery.mdにも複数種類の画像の検証結果を掲載しています。

入力画像 OCR の結果
レイアウト解析の結果 エクスポート
(HTML で出力したものをスクショ)

Markdown でエクスポートした結果は関してはリポジトリ内のstatic/out/in_demo_p1.mdを参照

  • 赤枠 : 図、画像等の位置
  • 緑枠 : 表領域全体の位置
  • ピンク枠 : 表のセル構造(セル上の文字は [行番号, 列番号] (rowspan x colspan)を表します)
  • 青枠 : 段落、テキストグループ領域
  • 赤矢印 : 読み順推定の結果

画像の出典:「令和 6 年版情報通信白書 3 章 2 節 AI の進化に伴い発展するテクノロジー」:(総務省) を加工して作成

📣 リリース情報

  • 2026 年 7 月 30 日 YomiToku v0.14.0 Table Semantic Parser(表の意味構造解析: Key-Value・グリッド抽出と yomitoku_table コマンド)を正式リリース
  • 2026 年 7 月 15 日 軽量モデル(--lite)が手書き文字の読み取りに対応し、1 行あたりの最大文字列長を 100 文字に拡張
  • 2025 年 11 月 5 日 YomiToku v0.10.1 CPU推論向けに最適化したGPU Free OCRモデルのサポート
  • 2025 年 4 月 4 日 YomiToku v0.8.0 手書き文字認識のサポート
  • 2024 年 11 月 26 日 YomiToku v0.5.1 (beta) を公開

💡 インストールの方法

pip install yomitoku
  • PyTorch はご自身の CUDA のバージョンにあったものをインストールしてください。デフォルトでは CUDA12.4 以上に対応したものがインストールされます。
  • PyTorch は 2.5 以上のバージョンに対応しています。その関係で CUDA11.8 以上のバージョンが必要になります。対応できない場合は、リポジトリ内の Dockerfile を利用してください。

🚀 実行方法

通常モデルでの推論

yomitoku ${path_data} -f md -o results -v --figure

軽量モデルでの推論

--liteオプションを使用してください。

yomitoku ${path_data} -f md --lite -d cpu -o results -v --figure

Python API から軽量モードを利用する

CLI の --lite オプションに相当する軽量モードは、configs でテキスト認識モデルに parseq-tiny-dynw-v4 を指定し、dynamic_widthbatch_bucketing を有効化することで Python API からも利用できます。CPU 環境ではテキスト検出を ONNX 推論にすると、さらに高速化できます。

import cv2
from yomitoku import DocumentAnalyzer

if __name__ == "__main__":
    configs = {
        "ocr": {
            "text_recognizer": {
                "model_name": "parseq-tiny-dynw-v4",  # 動的幅対応の軽量モデル
                "dynamic_width": True,                 # 切り出し画像を実際の幅で処理
                "batch_bucketing": True,               # 幅の近い画像をまとめてバッチ化
                "device": "cpu",
            },
            "text_detector": {
                "device": "cpu",
                "infer_onnx": True,                    # CPU ではテキスト検出を ONNX 化すると高速
            },
        },
    }

    analyzer = DocumentAnalyzer(configs=configs, device="cpu")

    img = cv2.imread("sample.jpg")
    results, ocr_vis, layout_vis = analyzer(img)
    results.to_json("output.json")

OCR モジュール単体で利用する場合も、同じオプションを text_recognizer に渡します。

import cv2
from yomitoku import OCR

if __name__ == "__main__":
    configs = {
        "text_recognizer": {
            "model_name": "parseq-tiny-dynw-v4",
            "dynamic_width": True,
            "batch_bucketing": True,
        },
    }

    ocr = OCR(configs=configs, device="cpu")

    img = cv2.imread("sample.jpg")
    results, ocr_vis = ocr(img)

[!NOTE] parseq-tiny-dynw-v4 は動的幅バッチング推論を前提に学習されたモデルです。dynamic_width=True(および batch_bucketing=True)と組み合わせて使用してください。ONNX 推論(infer_onnx=True)は入力サイズが固定されるため、dynamic_width は自動的に無効化されます。

コマンドライン引数一覧

引数名 説明
${path_data} 解析対象の画像が含まれたディレクトリか画像ファイルのパスを直接指定します。ディレクトリを対象とした場合はサブディレクトリ内の画像も含めて処理を実行します。
--format(-f) 出力形式のファイルフォーマットを指定します。(json, csv, html, md, pdf(searchable-pdf) をサポート)
--outdir(-o) 出力先のディレクトリ名を指定します。存在しない場合は新規で作成されます。
--vis(-v) 解析結果を可視化した画像を出力します。
--lite(-l) 軽量モデルで推論を実行します。通常より高速に推論できますが、若干、精度が低下する可能性があります。
--device(-d) モデルを実行するためのデバイスを指定します。gpu が利用できない場合は cpu で推論が実行されます。(デフォルト: cuda)
--ignore_line_break 画像の改行位置を無視して、段落内の文章を連結して返します。(デフォルト:画像通りの改行位置で改行します。)
--figure_letter 検出した図表に含まれる文字も出力ファイルにエクスポートします。
--figure 検出した図、画像を出力ファイルにエクスポートします。
--encoding エクスポートする出力ファイルの文字エンコーディングを指定します。サポートされていない文字コードが含まれる場合は、その文字を無視します。(utf-8, utf-8-sig, shift-jis, enc-jp, cp932)
--combine PDFを入力に与えたときに、複数ページが含まれる場合に、それらの予測結果を一つのファイルに統合してエクスポートします。
--ignore_meta 文章のheader, footerなどの文字情報を出力ファイルに含めません。
--ignore_ruby ふりがな(ルビ)テキストを出力から除外します。
--ruby_threshold ルビ判定の閾値を指定します(デフォルト: 0.5)。--ignore_ruby と併用します。

その他のオプションに関してはヘルプを参照してください。

yomitoku --help

NOTE

  • 通常モデルでは GPU での実行を推奨します。CPU を用いての推論向けに最適化されておらず、処理時間が長くなります。
  • 軽量モデルでは CPU でも高速に推論できます。
  • YomiToku は文書 OCR 向けに最適化されており、情景 OCR(看板など紙以外にプリントされた文字の読み取り)向けには最適化されていません。
  • AI-OCR の識別精度を高めるために、入力画像の解像度が重要です。低解像度画像では識別精度が低下します。最低でも画像の短辺を 720px 以上の画像で推論することをお勧めします。

📊 Table Semantic Parser(表の意味構造解析)

Table Semantic Parserは、帳票画像やPDFから表を検出し、セルの役割(ヘッダー/値)や Key-Value(項目名→値)グリッド(行列データ) といった意味構造を自動で推定する機能です。yomitoku_table コマンドで、ドキュメント全体の解析結果をページ単位の構造化JSONとして出力できます。

yomitoku_table ${path_data} -o results -v

デフォルトの出力は、Key-Value・グリッドのテキストに由来セルのIDと座標を埋め込んだ構造化JSONです。段落(paragraphs)も含まれます。

オプション 説明
--simple 座標などのメタ情報を持たない、テキストのみの構造化JSONを出力します。
--raw 正規化スキーマ(TableSemanticParserSchema)のまま出力します(テンプレート往復用)。
--lite 軽量モデルで実行します(CPU向け)。
--grid_only / --kv_only グリッドのみ / Key-Valueのみを解析します。

その他のオプション(モデル・Configの個別指定、テンプレート適用、ページ指定など)はTable Semantic Parser CLIのドキュメントを参照してください。Python APIの詳細はTable Semantic Parserのドキュメントを参照してください。

gallery_table_semantic_parser.mdに複数種類の帳票に対する解析結果の可視化を掲載しています。

※ 区切り罫線が存在する帳票のみをサポートしています。

📋 Extractor(構造化データ抽出)

YomiToku Extractorは、帳票画像やPDFからYAMLスキーマに基づいて構造化データを抽出する機能です。OCR・レイアウト解析の結果から、指定したフィールドの値を自動で抽出しJSONとして出力します。

抽出方式

コマンド 方式 特徴
yomitoku_extract ルールベース LLM不要。KV検索・グリッド照合・正規表現で高速に抽出
yomitoku_extract_with_llm LLMベース vLLM等のLLMサーバーを利用してより柔軟に抽出
  • ルールベース: 定型帳票(申請書、報告書、伝票など)に適しています。抽出対象の位置やテキストパターンが決まっている場合に高速かつ高精度に抽出できます。
  • LLMベース: 非定型帳票(名刺、レシート、請求書など)に適しています。レイアウトや値のパターンが不定の場合でも、文脈を理解して柔軟に抽出できます。

インストール

pip install yomitoku[extract]

スキーマ定義例

fields:
  - name: phone_number
    description: 電話番号
    type: string
    normalize: phone_jp

  - name: invoice_number
    regex: 'T\d{13}'
    type: string

  - name: order_items
    structure: table
    columns:
      - name: product
        description: 商品名
      - name: price
        description: 金額
        normalize: numeric

実行例

# ルールベース抽出
yomitoku_extract input.jpg -s schema.yaml -o results -v

# LLMベース抽出(vLLMサーバー使用)
yomitoku_extract_with_llm input.jpg -s schema.yaml -m Qwen/Qwen3-8B-Instruct

詳細はExtractor ドキュメントを参照してください。

📝 ドキュメント

パッケージの詳細はドキュメントを確認してください。

LICENSE

本リポジトリ内のソースコードおよび本プロジェクトに関連する HuggingFace Hub 上のモデルの重みファイルは、CC BY-NC-SA 4.0 ライセンスの下で提供されています。
非商用での個人利用・研究目的での利用は自由に行っていただけます。

YomiToku © 2024 by Kotaro Kinoshita is licensed under CC BY-NC-SA 4.0.
To view a copy of this license, visit: https://creativecommons.org/licenses/by-nc-sa/4.0/

商用化/非商用の判断は以下のガイドラインに従い、判断いたします。


商用利用について

YomiToku を商用環境でご利用いただく場合、以下の方法で 製品版の商用ライセンス を提供しています。
手書き認識の精度向上、画像の自動向き補正、レイアウト解析の強化など、製品版のみで利用可能な追加機能 を多数搭載しています。

オンプレミス環境・ローカル PC での商用利用

オンプレミス環境やローカル PC での商用利用をご希望の場合は、専用の オンプレ向け商用ライセンス をご用意しています。
詳細は以下よりお問い合わせください。

クラウド上での商用利用(AWS Marketplace)

YomiToku の商用版は AWS Marketplace でも提供しています。
すべての解析処理は お客様の AWS 環境内で完結 し、外部ネットワークや第三者サーバーへの送信は一切発生しません。
機密文書・社内資料・個人情報を扱うワークロードでも安心してご利用いただけます。

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yomitoku-0.14.0.tar.gz (72.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yomitoku-0.14.0-py3-none-any.whl (8.2 MB view details)

Uploaded Python 3

File details

Details for the file yomitoku-0.14.0.tar.gz.

File metadata

  • Download URL: yomitoku-0.14.0.tar.gz
  • Upload date:
  • Size: 72.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for yomitoku-0.14.0.tar.gz
Algorithm Hash digest
SHA256 25f718740e6048a24c880b0853a7997d048f6aae10349074cf63b22df1005994
MD5 b09390503ae735d02c13e46d00ce080f
BLAKE2b-256 235872be531dd719ce5e258afca220e9d149b22f9700122ea8996492721a34bc

See more details on using hashes here.

File details

Details for the file yomitoku-0.14.0-py3-none-any.whl.

File metadata

  • Download URL: yomitoku-0.14.0-py3-none-any.whl
  • Upload date:
  • Size: 8.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for yomitoku-0.14.0-py3-none-any.whl
Algorithm Hash digest
SHA256 53fda18a8fa81963085b192d4683f427a85a9e0d7bded1227ff2b2634519acd8
MD5 e09cd3c077fec439f9020de0f1c8626c
BLAKE2b-256 070feb4e1720cfe01fc8ca8aca9c4da0ff77032806c5894e243049d8f0cb59bd

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.14.0 This release

2 files

0.13.1

2 files

0.13.0

2 files

0.12.0

2 files

0.11.2

2 files

0.11.0

2 files

0.10.3

2 files

0.10.2

2 files

0.10.1

2 files

0.9.5

2 files

0.9.4

2 files

0.9.3

2 files

0.9.1

2 files

0.9.0

2 files

0.8.1

2 files

0.8.0

2 files

0.7.4

2 files

0.7.3

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.0

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page