SAKURUG TECHBLOG

OCRとLLMで名刺管理システム作ってみた

timestampauthor-name
Andi

概要

今回のプロジェクトは、OCRとLLMを使って名刺を自動でデータの管理するシステムを作ってみました。変革したデータはGoogleスプレッドシートに保存します。手作業での入力を減らし、効率的に情報を管理できます。

目的

  • 自動化

    人手で入力する必要がありません。大量の名刺も効率的に処理可能にする。時間帯でトリガーを設定し常に動いてるシステム。

  • 正確なデータ抽出

    OCRとLLMを組み合わせることで、正規表現より正確にJSON形式で抽出できます。

  • データの保護

    漏洩や不適切な取り扱いされないように外部APIを利用しなずローカルでデータを処理します。

  • 軽量・低コスト

    CPUだけのVPSでも動作可能です。ローカルモデルを使うことで、クラウドAPIの使用料もかかりません。必要なのはサーバー料金のみです。

  • 日本語対応

    日本語の名刺を対応するためOCRとLLMが日本語対応できるモデルを使用しています。

システムの流れ

  1. 名刺のスキャン画像を取得

     Googleドライブのフォルダに保存された名刺の画像をシステムが自動で読み込みます。

  2. OCRによる文字抽出

     PaddleOCRを使って、名刺の画像からテキストを読み取ります。

  3. LLMによる情報整理

     読み取ったテキストを元に、LLM(大規模言語モデル)を使って「名前」「役職」「会社」「メール」「電話」「住所」「ウェブサイト」といったフィールドに整理します。

  4. Googleスプレッドシートに保存

     抽出された情報をGoogleスプレッドシートに出力します。

  5. 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/
ーーーーーーーーーーーーーーーーーーーーーーー

▼高校生向けインターン実施中!

弊社では高校生向けにインターンを行っております!
現役エンジニア指導の下、一緒に働いてみませんか?

高校生インターン応募フォーム

▼カジュアル面談実施中!

カジュアル面談では、会社の雰囲気や仕事内容についてざっくばらんにお話ししています。
履歴書は不要、服装自由、原則オンラインです。興味を持っていただけた方は、
ぜひ以下からお申し込みください。

皆さんにお会いできることをサクラグメンバー一同、心より楽しみにしております!

カジュアル面談応募フォーム

記事をシェアする

ABOUT ME

author-image
Andi
主にJavaを使用してバックエンドWeb開発しています。また、iOSアプリ開発の経験もあります