Skip to content

Repository files navigation

kakeibo

レシート撮影からOCR・LLM構造化抽出までを自動化する家計簿(経費管理)アプリ。

概要

  • スマートフォンでレシートを撮影すると、サーバー側でOCRとLLMによる構造化抽出が走り、店名・日付・金額・品目・支払方法を自動でDBに登録する。
  • 個人事業主の青色申告を想定し、レシートごとに経費該当性・勘定科目・事業按分比率をLLMで自動判定する機能を持つ。
  • 二人での共同支出(割り勘)管理に対応する。

処理パイプライン

src/routes/receipts.py に実装されている、1枚の画像がDBに登録されるまでの流れ。

  1. 画像検証: MIME判定、EXIF orientationの物理適用、アスペクト比による縦向き補正
  2. Nextcloud WebDAVの一時領域(_inbox/{sha256}.jpg)へ保存(冪等性はSHA-256ハッシュで担保)
  3. Surya OCRでテキスト抽出(GPUスケジューラ経由)
  4. LLMでOCRテキストを店名・日付・金額・品目・支払方法のJSONに構造化
  5. LLMで経費該当性・勘定科目・按分比率を判定(レスポンス送信後にバックグラウンドで実行)
  6. PostgreSQLへ登録、Nextcloud上のファイルを月別フォルダへ移動
  7. QdrantへOCRテキストのembeddingをupsert(類似レシート検索用)

このパイプラインは「1枚の写真にレシート1枚が写っている」ことを前提としており、物体検出は行っていない(コード内コメントに明記)。

NanoDetによる検出モデルについて

training/配下にNanoDetベースのレシート検出モデルの学習コードがあり、学習済みモデルはONNXおよびTensorFlow.js形式に変換されてフロントエンドに同梱されている(frontend/public/models/)。カメラ映像内でのレシート位置検出を意図したもので、iOS Safari向けのWebGPU/WASM対応などコミット履歴に試行錯誤の跡が残っている。

ただし、現在のfrontend/srcのコンポーネント構成にはこの検出モデルを呼び出すコードが見当たらず、現行UIでは使われていない状態(学習・変換パイプラインとしては存在するが、本番の撮影フローには未統合)。

技術スタック

Backend

  • FastAPI / PostgreSQL(asyncpg) / Qdrant
  • authlib(Google OAuth) + メールアドレスallowlistによる認証
  • Nextcloud WebDAVをレシート画像の永続化先として利用

Frontend

  • React 19 / Vite / TypeScript / Tailwind CSS
  • PWA構成(Service Worker)

検出モデル学習パイプライン

  • PyTorch(NanoDet) / ONNX・TensorFlow.jsへのエクスポート

OCR/LLM

  • Surya OCR(GPU推論サーバー経由)
  • ローカルLLM(構造化抽出・経費分類、GPU推論サーバー経由)

主な機能

  • レシート撮影からの自動登録(単発撮影 / バッチ撮影)
  • 一覧・編集・履歴・精算(割り勘)画面
  • 再OCR・再構造化(reprocess API、OCRのみ再実行またはLLM再判定のみを選択可能)
  • 変更履歴の監査ログ(receipt_audit_logs)

About

レシートOCR + LLM構造化抽出の家計簿アプリ

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages