このツールは、OpenAI の GPT-4.1モデルを活用して、料理画像から特定領域を自動でクロップする Python プログラムです。レシピの工程説明を入力するだけで、関連する部分を自動的に切り抜きます。
料理画像から指定された工程に関連する領域を自動的に検出・クロップします。「にんじんを切ります」「肉を炒めます」といったレシピの指示文を入力するだけで、該当する調理シーンを自動的に識別し、16:9のアスペクト比で切り抜きます。
- GPT-4.1を使用して画像解析を実施
- 入力したレシピ文の説明に基づいてクロップ領域を決定
- PIL と matplotlib による画像の視覚的表示
- クロップ結果を16:9のアスペクト比に自動調整
- クロップ結果と元画像を並べて確認可能
- 日本語説明文にも対応(matplotlib用フォント設定済み)
- Python環境
- OpenAI API Key
以下のライブラリが必要です:
pip install openai Pillow matplotlib環境変数にOpenAI API Keyを設定してください:
# Linux/macOS
export OPENAI_API_KEY='your-api-key-here'
# Windows (PowerShell)
$env:OPENAI_API_KEY='your-api-key-here'
# Windows (コマンドプロンプト)
set OPENAI_API_KEY=your-api-key-herepython cropping.py --image path/to/image.jpg --instruction "タマネギを微塵切りにします。"| オプション | 説明 | デフォルト値 |
|---|---|---|
--image |
入力画像のパス(必須) | - |
--instruction |
クロップ領域の説明(必須) | - |
--output |
出力ファイルのパス | タイムスタンプ付き自動生成 |
--output_dir |
出力ディレクトリ | output |
--api_key |
OpenAI API Key(コマンドラインで指定) | 環境変数 OPENAI_API_KEY から取得 |
--resize_width |
クロップ後の画像の幅(px)。16:9の比率を維持してリサイズ。0を指定するとリサイズしない | 0(リサイズなし) |
--resize_height |
クロップ後の画像の高さ(px)。16:9の比率を維持してリサイズ。widthとheightの両方が指定された場合はwidthが優先される | 0(リサイズなし) |
# 基本的な使用
python cropping.py --image kitchen.jpg --instruction "タマネギを微塵切りにします。"
# 出力先を指定
python cropping.py --image kitchen.jpg --instruction "タマネギを微塵切りにします。" --output result.jpg
# 出力ディレクトリを指定
python cropping.py --image kitchen.jpg --instruction "タマネギを微塵切りにします。" --output_dir ./results
# API Keyをコマンドラインで指定する場合(非推奨)
python cropping.py --image kitchen.jpg --instruction "タマネギを微塵切りにします。" --api_key "your-api-key-here"
# 幅640pxにリサイズ(高さは自動計算)
python cropping.py --image kitchen.jpg --instruction "タマネギを微塵切りにします。" --resize_width 640
# 高さ240pxにリサイズ(幅は自動計算)
python cropping.py --image kitchen.jpg --instruction "タマネギを微塵切りにします。" --resize_height 240
- デフォルトではリサイズは行わず、クロップした画像をそのままのサイズで保存します
--resize_widthまたは--resize_heightを指定すると、16:9の比率を維持したままリサイズされます- 両方指定した場合は
--resize_widthが優先されます
- 入力画像に赤い枠でクロップ領域を表示
- 元画像(左)と16:9に調整された切り抜き画像(右)を並べて視覚的に表示
- クロップ領域の座標と GPT による簡易説明も表示
- デフォルトではoutputフォルダに切り出した画像を保存
- 画像をBase64エンコード
- GPT-4.1 APIに画像と指示文を送信
- APIからクロップ座標(JSON形式)を取得
- 座標を16:9比率に調整
- 画像を切り出して保存
- matplotlibで結果を表示
- 元のクロップ領域を基準に、最小限の拡大で16:9に調整
- 画像の端に達した場合は自動的に調整
- 精密な浮動小数点計算により、高精度な比率調整を実現
matplotlibで日本語を正しく表示するために、OSごとに最適なフォントを自動選択する仕組みが含まれています。
- Windows: Yu Gothic, MS Gothic, Meiryo
- macOS: Hiragino Sans, Hiragino Maru Gothic ProN
- Linux: IPAGothic, Noto Sans CJK JP