Gemini CLIの実践的使い方!レシートをOCRして家計簿をつけるスクリプトをつくる

※ 当サイトではアフィリエイト広告を利用しています。リンクは広告リンクも含みます。

この記事は約9分で読めます。

💡実践的なGemini CLIの使い方をご紹介します。

ポイントは、「一気にAIにお願いする」のではなく、「部分的に完成させながら進める」アプローチです。
その際、AIとプログラミング(スクリプト)の役割分担を明確にすることが重要です。

AIの特長は、入力に対する出力の自由度が高いこと。
一方で、プログラミングは入力に対して一意な出力を得られる点にあります。
これらは裏を返せば、それぞれの弱点でもあります。
AIの出力は不安定になりがちで、プログラミングは柔軟性に乏しいのです。

そこで、それぞれの特性を活かしながら、うまく作業を分担していきます。
特に、AIはコード生成が得意で、Gemini CLIのようなツールでは、AIが自らコードを実行し、修正を繰り返しながら処理を完成させていきます

こうして出来上がったものはスクリプトであり、その実行結果は一意に定まります
ただし、AIにすべてを任せようとして、プロンプトをどれだけ丁寧に煮詰めても、完全に一意な出力を得ることはできません
これは、AIの出力が非決定的(確率的)であることによるものです。わずかな文脈や表現の違いで、出力が変化するからです。

したがって、AIに任せるべき領域は、「OCRによる文字認識」や「複数の自由形式のテキストから家計簿用情報を抽出するような、柔軟性と推測を伴う処理」です。
これは、出力が一意に定まりにくく、精度や表現が毎回異なるAIの特性を活かせる作業です。

そして、それらの処理結果を整理し、定型スクリプトとして一意な出力が得られるかたちに整備していくことで、安定した運用が可能になります。


ちょっと整理。AIに聞いたら以下だが、私のイメージだと、おっさん(私):プログラミングと言う、若者:スクリプトと言う。上の文章はAIに修正してもらったので入り混じってます。

用語一般的なイメージや使われ方
プログラミングコーディングという作業全般。手続き・設計・実装を含む広い概念
スクリプト簡易的・軽量なプログラム。用途が明確で、短めの処理が多い

こちらの記事の続きになります。

広告

レシート画像の準備

レシートの画像を用意する。最初は同じフォーマット(同じお店のレシートフォーマット)から始めるのがおすすめです。AIに送るので、重要な情報は、目隠しするか、トリミングしたほうがいいと思います。画像のみ保存してreceiptsディレクトリを作り入れておきます。

スクリプトを順番に作っていく

一気に「receiptsの画像はレシートの画像です。家計簿を作って、すべて読み込んでください。」みたいなプロンプトでやると、多分、うまくいかないと思います。
そこで少しずつ機能を固めていきます。その際、AIが担当するのはOCR作業とOCRの結果のテキストから家計簿に必要な部分を抽出する作業です。
AIが担当する部分は、無料のGemini APIキー(gemini flash1.5)を利用します。
当初、私が考えていたのはOCRだけAIに任す予定でした。しかし、Gemini CLIがテキストから抽出する部分もAI担当に割り振ってきて、結果もよかったので採用しました。(当初は正規化等を使ってAIを使わないつもりで私は考えていた。)

単独の画像ファイルをOCRしてテキストに変換するスクリプト

以下で指定した画像ファイルをOCRし、テキストをreturnするスクリプトocr_receipt.py(ocr_image)は、すでに用意してあります。

後半で作っているprocess_all_receipts.py、create_household_ledger.pyのコードはおまけとしてZenn記事↓にあります。
この記事が参考になった方は、Zennのバッジ(応援+少額のご支援)をいただけると励みになります 🙌 バッジは、読者が「役立った!」と感じたときに送れる、ちょっとした金銭的支援機能です。

Googleの無料OCR APIをPythonでローカル活用!画像をテキスト化

複数のファイルをOCRしてテキストファイルを保存するスクリプト

geminiに依頼します。

ocr_receipt.pyを利用してreceiptsの画像をテキストに変換するコードを書いて

そうすると何度も実行許可を求めてきますが、実行、修正を繰り返し最終的にocr_resultsディレクトリにテキストファイルを保存してくれます。
結果を確認し、よければ次のステップに進みます。
これでreceiptsディレクトリにある複数のファイルをOCRし個別にテキストファイルにする
スクリプトprocess_all_receipts.pyができました。

家計簿作成スクリプト

スクリプトprocess_all_receipts.py実行によってせきた各レシートのテキストファイルをもとに家計簿を作ります。
geminiに依頼します。

家計簿を作りたいocr_resultsを分析してデータフレームにまとめるスクリプトを書いて

かなり失敗していましたがcreate_household_ledger.pyスクリプトを作成し、実行しhousehold_ledger.csvができました。
これを手動でGoogleスプレッドシートにアップロードしたものが、こちらになります。

household_ledger

スクリプトcreate_household_ledger.pyができました。

解説ファイル作成

何をしているかよくわからないので解説してもらいました。
geminiに依頼します。

create_household_ledger.pyについての解説を作って保存して

# `create_household_ledger.py` 解説

このスクリプトは、`ocr_results` ディレクトリに保存されているレシートのテキストデータから、家計簿を作成するためのものです。

## 概要

`create_household_ledger.py` は、OCR(光学文字認識)によってテキスト化された複数のレシートデータ(`.txt` ファイル)を読み込み、それぞれの内容をAI(Gemini 1.5 Flash)が分析します。そして、各レシートから「購入日」「店名」「品目リスト」「合計金額」などの重要な情報を抽出し、最終的に `household_ledger.csv` という単一のCSVファイルにまとめて出力します。

このCSVファイルは、ExcelやGoogleスプレッドシートなどの表計算ソフトで開くことができ、家計の分析や管理に役立ちます。

## 主な機能

1.  **レシートデータの読み込み**: `ocr_results` ディレクトリ内のすべての `.txt` ファイルを自動で検索し、処理対象とします。

2.  **AIによるデータ抽出**: 各テキストファイルの内容をGoogleのGeminiモデルに送信し、以下の情報を抽出します。
    *   **店名 (store)**
    *   **購入日 (date)**
    *   **品目リスト (items)**: 各品目の名前 (name) と価格 (price) を含むリスト
    *   **合計金額 (total)**

3.  **JSON形式でのデータ整形**: AIは、抽出した情報をJSONという構造化されたデータ形式で返します。スクリプトはこのJSONを解析し、後続の処理で使いやすいように整形します。

4.  **データフレームの作成**: 抽出したすべてのレシートデータを、Pythonのデータ分析ライブラリである `pandas` を使って、表形式のデータ(データフレーム)に変換します。

5.  **CSVファイルへの出力**: 最終的に、整形されたデータを `household_ledger.csv` というファイル名で保存します。このファイルは `utf-8-sig` というエンコーディングで保存されるため、日本語の文字化けを防ぎ、Excelでも直接開くことができます。

## 使い方

### 前提条件

*   `ocr_results` ディレクトリが存在し、中に分析したいレシートのテキストファイル(`.txt`)が保存されていること。
*   スクリプトと同じ階層に `.env` ファイルが存在し、`GEMINI_API_KEY="あなたのAPIキー"` の形式で有効なAPIキーが設定されていること。

### 実行方法

以下のコマンドをターミナルで実行します。

```bash
uv run python create_household_ledger.py
```

スクリプトが実行されると、処理の進捗がプログレスバーで表示され、完了すると `household_ledger.csv` が生成されます。

成果物:レシートを読み込んで家計簿をつけるシステム

以上により、今後、このシステムを利用する方法は
・receiptsディレクトリにレシート画像を入れる。
・スクリプトprocess_all_receipts.py実行でocr_resultsに各レシートのテキストファイルができる。
・スクリプトcreate_household_ledger.py実行で家計簿ファイルhousehold_ledger.csvが完成します。

応用

このままでは、応用が利かないので各スクリプトを変更して使ったほうがいいです。
変更は各スクリプトに対してAIに依頼して変更してもらえばいいです。
例えば
・ocr_resultsディレクトリにないファイル名がreceiptsディレクトリにあるときだけ実行するようにprocess_all_receipts.pyを変更して
・household_ledger.csvは日付事にファイルにするようにcreate_household_ledger.pyを変更して

ファイルに変更を加えたけどもとに戻したくなることがあると思うので、そういうときに備えて、以下の本でGitが使えるようになると役立ちます。

個人開発者のためのGit入門:コード管理からデプロイまで
はじめに個人で開発をしていると、こんな経験はありませんか?- 変更したら動かなくなったけど、前は動いてた…- バックアップを手動でとっているけど、どれが最新かわからなくなった- せっかく作ったアプリ、インターネットに公開してみたいこうした悩...

仮想環境についても、あいまいな方は、こちらで改めて勉強しておくと役に立ちます。

仮想環境とPython
Pythonを使って開発を始めようとしたとき、次のような悩みにぶつかったことはありませんか?* あるプロジェクトで必要なライブラリが、他のプロジェクトでは邪魔になる…* 「仮想環境を使ってください」と言われたけど、そもそもそれって何?* V...

まとめ

Gemini CLIは便利だが、Gemini APIキーを無料で使えるのはありがたい。
また、コードの中身は、ほぼ把握しないで作れた。
スクリプトで頑張ったり、全自動を目指すより、個人的には、この手法があっている。

イチゲをOFUSEで応援する(御質問でもOKです)Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)

タイトルとURLをコピーしました