アナログメーターと7セグメントデジタルメーターの画像から数値を自動で読み取るWebアプリケーションです。
Claude APIのビジョン機能を活用して高精度な画像認識を実現しています。
- アナログメーター読み取り: 針の位置から数値を自動読み取り
- 7セグメントデジタルメーター読み取り: デジタル表示の数値を自動読み取り
- ドラッグ&ドロップ対応: 簡単に画像をアップロード
- レスポンシブデザイン: PC・タブレット・スマートフォン対応
- 詳細情報表示: 読み取り結果の信頼度や詳細情報を表示
[メイン画面]
- メータータイプ選択
- 画像アップロードエリア
- 解析結果表示
- バックエンド: Python 3.8+, Flask
- 画像認識: Claude API (Anthropic)
- フロントエンド: HTML5, CSS3, JavaScript (Vanilla)
- 画像処理: Pillow
- Python 3.8以上
- Anthropic APIキー(Anthropic Consoleで取得)
- インターネット接続(Claude API呼び出しのため)
cd meter-readerpython3 -m venv .venv
source .venv/bin/activate # Linux/Mac
# または
.venv\Scripts\activate # Windowsuv pip install -r requirements.txt.env.exampleをコピーして.envファイルを作成し、APIキーを設定します。
cp .env.example .env.envファイルを編集:
ANTHROPIC_API_KEY=your_actual_api_key_here
FLASK_ENV=development
FLASK_DEBUG=True
MAX_CONTENT_LENGTH=10485760
UPLOAD_FOLDER=static/uploads
ALLOWED_EXTENSIONS=jpg,jpeg,png
# Claude APIモデル設定
# 推奨: claude-sonnet-4-5 (精度と速度のバランス)
# 高精度: claude-opus-4-5-20251101 (高コスト)
# 高速: claude-haiku-4-5 (精度は劣る)
CLAUDE_MODEL=claude-sonnet-4-5
CLAUDE_MAX_TOKENS=1024
CLAUDE_TIMEOUT=30モデルの選択について:
claude-sonnet-4-5: 精度と速度のバランスが良い(推奨)claude-opus-4-5-20251101: 最高精度だが高コスト(精度重視の場合)claude-haiku-4-5: 高速・低コストだが精度は劣る(テスト用)
python app.pyブラウザで http://localhost:5000 にア���セスしてください。
- メータータイプを選択: アナログメーターまたは7セグメントデジタルメーターを選択
- 画像をアップロード:
- ドラッグ&ドロップで画像をアップロード
- またはクリックしてファイル選択
- 解析開始: 「解析開始」ボタンをクリック
- 結果確認: 読み取った数値と詳細情報が表示されます
- JPG/JPEG
- PNG
- 最大ファイルサイズ: 10MB
- 推奨解像度: 50x50ピクセル以上
- アナログメーター: メーター全体が写るように撮影してください
- デジタルメーター: 数字がはっきり見えるように撮影してください
- 照明: 明るい場所で、反射や影がない状態で撮影すると精度が向上します
- 角度: 正面から撮影するのが最適です
メーター画像を解析します。
リクエスト:
POST /api/analyze
Content-Type: multipart/form-data
image: <画像ファイル>
meter_type: "analog" または "digital_7segment"レスポンス(成功時):
{
"success": true,
"data": {
"value": 123.45,
"unit": "kWh",
"confidence": "high",
"meter_type": "analog",
"details": {
"scale_range": "0-200",
"needle_position": "約62%の位置",
"notes": "メーターは良好な状態です"
}
},
"timestamp": "2026-01-28T10:30:00Z"
}レスポンス(エラー時):
{
"success": false,
"error": {
"code": "NO_METER_DETECTED",
"message": "メーターを検出できませんでした",
"details": "画像が不鮮明か、メーターが写っていない可能性があります"
}
}ヘルスチェックエンドポイント。
レスポンス:
{
"status": "ok",
"timestamp": "2026-01-28T10:30:00Z"
}| コード | 説明 | 対処法 |
|---|---|---|
NO_FILE |
ファイルが選択されていない | 画像ファイルを選択してください |
INVALID_FILE_TYPE |
非対応のファイル形式 | JPGまたはPNG形式の画像を使用してください |
FILE_TOO_LARGE |
ファイルサイズ超過 | 10MB以下の画像を使用してください |
NO_METER_DETECTED |
メーター未検出 | メーター全体が写っている画像を使用してください |
UNCLEAR_IMAGE |
画像不鮮明 | 明るい場所で、ピントを合わせて撮影してください |
API_ERROR |
Claude APIエラー | しばらく待ってから再度お試しください |
RATE_LIMIT |
APIレート制限 | 少し待ってから再度お試しください |
NETWORK_ERROR |
ネットワークエラー | インターネット接続を確認してください |
meter-reader/
├── app.py # Flask メインアプリケーション
├── config.py # 設定ファイル
├── requirements.txt # Python依存パッケージ
├── .env.example # 環境変数テンプレート
├── .gitignore # Git除外設定
├── README.md # このファイル
├── utils/
│ ├── __init__.py
│ ├── claude_client.py # Claude API クライアント
│ └── image_processor.py # 画像処理ユーティリティ
├── static/
│ ├── css/
│ │ └── style.css # スタイルシート
│ ├── js/
│ │ └── app.js # フロントエンドロジック
│ └── uploads/ # アップロード画像一時保存
└── templates/
└── index.html # メインUIテンプレート
export FLASK_ENV=development
export FLASK_DEBUG=True
python app.py本番環境では Gunicorn などの WSGI サーバーを使用することを推奨します。
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:8000 app:appDockerfileを作成して実行することもできます(例):
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "app:app"]docker build -t meter-reader .
docker run -p 5000:5000 --env-file .env meter-readerA: .envファイルを作成し、有効なAPIキーを設定してください。
A: 画像サイズを10MB以下に縮小してください。
A: 以下を確認してください:
- メーター全体が写っているか
- 画像が鮮明か
- 照明が適切か
- 正面から撮影しているか
A: Claude APIの呼び出しには数秒かかる場合があります。ネットワーク接続が安定していることを確認してください。
- APIキーは
.envファイルで管理し、決してコミットしないでください - アップロードされた画像は解析後すぐに削除されます
- 本番環境では HTTPS を使用してください
- 適切なレートリミットを設定してください
MIT License
Created with Claude Code
Issue や Pull Request を歓迎します。
- 初回リリース
- アナログメーター読み取り機能
- 7セグメントデジタルメーター読み取り機能
- レスポンシブWebUI
- 複数画像の一括処理
- 解析履歴の保存・表示
- CSV/JSONエクスポート機能
- カメラからの直接撮影(モバイル)
- より詳細な信頼度スコア
- 多言語対応(英語など)
- テーマ切り替え(ダークモード)