Skip to content

danielvo594520/color-checker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎨 絵画色検索システム

絵画画像を色で検索できるデスクトップアプリケーション(Streamlit使用)

概要

このアプリケーションは、画像コレクションから特定の色を含む画像を簡単に検索できるツールです。k-meansクラスタリングを使用して各画像から代表色を抽出し、色の類似度で検索を行います。

主要機能

1. 画像スキャン機能

  • 指定フォルダ内の画像ファイル(.jpg, .jpeg, .png)をスキャン
  • k-meansクラスタリングで各画像から代表色を3色抽出
  • 画像情報と色情報をSQLiteデータベースに保存
  • プログレスバーで進捗を表示

2. 色検索機能

  • カラーピッカーで検索したい色を選択
  • 選択した色と各画像の代表色との距離を計算(ユークリッド距離)
  • 距離が近い順に画像を表示

3. 結果表示機能

  • サムネイルグリッド形式で表示(4列)
  • 各画像の代表色3色をカラーチップで表示
  • 検索色との距離値を表示

技術スタック

  • Python 3.10+
  • Streamlit - UIフレームワーク
  • SQLite - データベース
  • Pillow - 画像処理
  • scikit-learn - k-meansクラスタリング
  • numpy - 数値計算

インストール

前提条件

  • Python 3.10以上
  • uv パッケージマネージャー

uvのインストール

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

1. リポジトリのクローン

git clone <repository-url>
cd color-checker

2. 依存パッケージのインストール

# 仮想環境を作成し、依存パッケージをインストール
uv sync

使い方

1. アプリケーションの起動

uv run streamlit run app.py

ブラウザが自動的に開き、アプリケーションが表示されます(通常は http://localhost:8501)

2. 画像の準備

  1. プロジェクト内に画像用フォルダーを作成(例: images, paintings など)
  2. そのフォルダーに絵画画像をコピー(.jpg, .jpeg, .png対応)

デフォルトフォルダー:

  • images/ フォルダーが既に用意されています
  • ここに画像を配置すれば、すぐに使い始められます

3. 画像のスキャン

方法1: プロジェクト内のフォルダーから選択(推奨)

  1. サイドバーに表示されているフォルダーボタンをクリック
    • 例: 📁 images
  2. フォルダーが見つかると ✓ マークが表示されます
  3. 「🔄 スキャン実行」ボタンをクリック
  4. プログレスバーで進捗を確認

方法2: フォルダー名を入力

  1. サイドバーの「またはフォルダー名を入力」欄にフォルダー名を入力
    • 例: images, paintings
  2. フォルダーが存在しない場合は、作成ボタンが表示されます
  3. 「🔄 スキャン実行」ボタンをクリック

4. 色で検索

  1. メインエリアのカラーピッカーで検索したい色を選択
  2. 表示件数をスライダーで調整(5〜50件)
  3. 「🔍 検索実行」ボタンをクリック
  4. 結果がグリッド形式で表示されます

5. データベースのクリア

サイドバーの「🗑️ データベースをクリア」ボタンで、保存されている全ての画像情報を削除できます。

ファイル構成

color-checker/
├── app.py              # Streamlitメインアプリケーション
├── db.py               # データベース操作
├── color_extractor.py  # 色抽出ロジック
├── pyproject.toml      # プロジェクト設定(uv管理)
├── database.db         # SQLiteデータベース(自動生成)
├── .gitignore          # Git除外設定
├── README.md           # このファイル
└── images/             # 画像フォルダー(デフォルト)
    └── README.md       # 画像配置の説明

データベース構造

テーブル: images

カラム名 説明
id INTEGER 主キー(自動採番)
file_path TEXT 画像ファイルの絶対パス
file_name TEXT ファイル名
color1_r, color1_g, color1_b INTEGER 代表色1のRGB値
color2_r, color2_g, color2_b INTEGER 代表色2のRGB値
color3_r, color3_g, color3_b INTEGER 代表色3のRGB値
scanned_at TIMESTAMP スキャン日時

アルゴリズム

色抽出(k-means clustering)

  1. 画像を読み込み、RGB形式に変換
  2. 処理速度向上のため最大800pxにリサイズ
  3. 全ピクセルのRGB値を取得
  4. k-meansクラスタリング(k=3)で代表色を抽出
  5. クラスタ中心をRGB値として取得

色距離計算(ユークリッド距離)

distance = √((R1-R2)² + (G1-G2)² + (B1-B2)²)

各画像について:

  1. 3つの代表色それぞれと検索色との距離を計算
  2. 最小距離を画像の距離値とする
  3. 距離値でソートして上位N件を返す

パフォーマンス

  • 処理速度: 30枚で約10秒以内(画像サイズや環境により変動)
  • 推奨画像数: 30〜100枚(テスト規模)
  • 最大画像サイズ: 処理時に800pxにリサイズ

エラーハンドリング

  • 読み込めない画像はスキップし、ログに記録
  • ファイルが存在しない場合は警告を表示
  • データベースエラーは適切にキャッチして通知

今後の拡張予定(v2以降)

  • タグ機能の追加
  • AI画像認識との統合
  • 複数色同時検索
  • 2000枚規模対応の最適化
  • 色空間の改善(Lab色空間など)

ライセンス

MIT License

開発者向け情報

モジュール構成

  • app.py: Streamlit UI、メインロジック、検索処理
  • db.py: SQLite操作(初期化、挿入、取得、クリア)
  • color_extractor.py: k-means色抽出、距離計算

ログ設定

各モジュールでloggingを使用してエラーや処理状況を出力しています。

トラブルシューティング

画像が表示されない

  • 画像ファイルのパスが正しいか確認
  • ファイルが移動・削除されていないか確認

スキャンが遅い

  • 画像サイズが大きすぎる可能性(自動でリサイズされます)
  • 画像数が多い場合は時間がかかります

データベースエラー

  • database.dbファイルの権限を確認
  • 「データベースをクリア」で初期化を試してください

お問い合わせ

問題や質問がある場合は、GitHubのIssuesにご報告ください。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages