今回のプロジェクトは、OCRとLLMを使って名刺を自動でデータの管理するシステムを作ってみました。変革したデータはGoogleスプレッドシートに保存します。手作業での入力を減らし、効率的に情報を管理できます。
人手で入力する必要がありません。大量の名刺も効率的に処理可能にする。時間帯でトリガーを設定し常に動いてるシステム。
OCRとLLMを組み合わせることで、正規表現より正確にJSON形式で抽出できます。
漏洩や不適切な取り扱いされないように外部APIを利用しなずローカルでデータを処理します。
CPUだけのVPSでも動作可能です。ローカルモデルを使うことで、クラウドAPIの使用料もかかりません。必要なのはサーバー料金のみです。
日本語の名刺を対応するためOCRとLLMが日本語対応できるモデルを使用しています。

Googleドライブのフォルダに保存された名刺の画像をシステムが自動で読み込みます。
PaddleOCRを使って、名刺の画像からテキストを読み取ります。
読み取ったテキストを元に、LLM(大規模言語モデル)を使って「名前」「役職」「会社」「メール」「電話」「住所」「ウェブサイト」といったフィールドに整理します。
抽出された情報をGoogleスプレッドシートに出力します。
処理済みのファイルは別のフォルダに移動されます。
簡単なテストのために、2 つの名前を作成し、次のプロンプトで実行しました。


prompt = f"""
From the following text, extract the fields "Name", "Company", "Email", "Phone", "Address", and "Website", and output them in JSON format. Extract complete lines, do not truncate. Do not extract if not present in raw_text.
Text:
{raw_text}
JSON:
"""
結果としてはOCRから取れたテキストがちゃんと読まれていると思いますが、LLMのアウトプットが若干の誤りがあります。LLMのモデルやプロンプト調整すれば正しい結果を出せるかもしれない。Googleスプレッドシートに出力された結果下記です。
まとめると、OCRとLLMをローカルで実行すると、RAM使用量が高くなります。RAM使用量を高くせずにモデルをVPSサーバーに配置するには制限があると思います。そしてLLM APIだとコストがそれほど高くないので検討した方がいいと思います。
今回プロンプトに使っているモデルやツールのRAM使は下記です。
Component | Estimated RAM |
|---|---|
PaddleOCR (CPU mode) | 400–800 MB |
llm-jpllm-jp-3-980m-instruct2 | ~3.9 GB GB |
Python runtime + buffers | 200 MB |
Cron / idle overhead | ~1–5 MB |
ーーーーーーーーーーーーーーーーーーーーーーー
株式会社SAKURUGは「寄付月間2025」に参画しています。
12月中のテックブログのpv数に応じて、アフリカの支援団体に寄付をおこないます。
https://giving12.jp/
ーーーーーーーーーーーーーーーーーーーーーーー
カジュアル面談では、会社の雰囲気や仕事内容についてざっくばらんにお話ししています。
履歴書は不要、服装自由、原則オンラインです。興味を持っていただけた方は、
ぜひ以下からお申し込みください。
皆さんにお会いできることをサクラグメンバー一同、心より楽しみにしております!
カジュアル面談応募フォーム