# 静止画像からの特徴量設計 (B) ― 画像AI版

> ⚠️ **本書は「仮説設計」であり未検証**。挙げる特徴量は「OpenCV等で測れる可能性がある候補」の段階で、
> 実画像での抽出精度・照明/湯気への耐性・職人スコアとの相関はまだ確認していない。
> 静止画サンプルを入手した時点で各特徴量を実測し、職人点との相関で取捨選択する。

> 📷 **方針: 動画 → 静止画像に変更**。動画でしか取れない特徴（対流速度・フレーム間差分・
> オプティカルフロー・泡の動き・湯気の流れ）は**使わない**。静止画で安定して取れる特徴に絞る。
> **Brixは画像から推定しない**（照明・湯気・反射の影響が大きすぎる）。濃度計の実測値を別入力にし、
> 画像は「見た目の状態評価」に専念させる。

## 前提
- 入力: 寸胴を上から撮った静止画像（既存動画からの代表フレーム切り出しでも可）。
- 出力: `scoring_prototype.py` の `VisualFeatures`（0.0〜1.0の確信度）。

## 0. 前処理（最重要：撮影品質ゲート）
人間採点でも「撮影不能」で素点が大きく落ちる。味評価の前段で弾く。静止画で判定可能：

| 特徴 | 抽出方法（静止画） | 用途 |
|---|---|---|
| `unusable`（評価不能度） | **白飛び率**(高輝度ピクセル比＝湯気)／**暗すぎ**(平均輝度低)／**被写体被覆率**(鍋ROIが十分写っているか)／極端な角度・距離 | 評価不能フラグ |
| 露出/色温度正規化 | 鍋の縁(ステンレス)等を基準にホワイトバランス補正 | 照明・店舗差の吸収 |
| 液面ROI抽出 | 円検出(Hough)で鍋の液面だけ切り出し | 周辺ノイズ除去 |

## 1. 状態特徴（職人の評価軸 → 静止画CV特徴）

| VisualFeatures | 職人の着眼点 | 静止画での測り方 |
|---|---|---|
| `good_emulsion` | 微乳化が決まっている（満点ゾーン） | **白濁度が中域**かつ表面テクスチャが均一・油滴が微細で均一な状態のスコア |
| `separation` | 分離・油膜浮き・シャバ・白すぎ | 大きな油膜パッチの**面積率**／透明で底が透ける(=シャバ)／白の彩度・明度が高すぎる(=白濁過多) |
| `oil_excess` | アブラ感が強い・重い | 表面の**鏡面反射(ハイライト)面積率**＋大粒油滴の密度 |
| `light` | 軽い・アブラ不足 | 反射が少なく表面マットで薄い |
| `thin_look` | 見た目が薄い・濃度低そう | **白濁度(不透明度)が低い**＝液面の向こうが透けて見える |
| `low_water` | 水位が低い | 液面の鍋縁からの距離（円検出後の半径比／内壁の影の幅） |
| `meat_collapse` | ボロ・シロ崩れ | 表面に浮く肉片の輪郭の細かさ・散らばり（エッジ密度・小片の個数） |
| `gara_weak` | ガラ感不足 | 色（褐色×中濁度＝パンチ）と白濁度の複合 |
| `fire_strong` | 火が強い | ※動画なら対流で判るが**静止画では弱い代理**(湯気量・大きな気泡の有無)に留まる。回帰でも寄与≒0のため優先度低 |

### コア指標として最低限実装すべき4つ（静止画）
1. **色分布** … 灰色寄り／カフェオレ色／白すぎ／褐色・豚感。液面ROIのHSV/Lab分布。
2. **白濁度（不透明度）** … 透明(シャバ)←→白濁過多。微乳化の**中域**が満点。コントラスト/透過の指標。
3. **表面油（油膜面積率・油滴サイズ）** … 微細均一(良)←→大粒・面状の油膜(脂過多/分離)。ハイライト解析。
4. **液面ROI品質・白飛び率** … 撮影品質ゲート。味評価と分離。

## 2. 画像版アルゴリズム
```text
最終スコア = 画像状態スコア + Brix補正
画像状態スコア = 乳化スコア + 色スコア + 表面油スコア + 見た目濃度スコア − 撮影不備ペナルティ
Brix補正 = −7.6 × max(0, 目標Brix − 実測Brix)        （目標以上は罰しない＝非対称）
目標Brix: 開店前=13 / ディナー=12
```
→ これは `scoring_prototype.py` の実装と一致（Brixは濃度計の別入力）。

## 3. 推奨アプローチ（開発順）
1. 既存動画から**代表フレームを切り出す**、または店舗に**静止画**を撮ってもらう。
2. 職人スコアと画像を紐づける（教師データ化。特にスコア80〜100帯を重点収集）。
3. まず**OpenCV特徴量で説明可能モデル**（上記特徴→本スコア式）。職人と対応づき説明しやすい。
4. その後、**画像分類/回帰AI（CNN・小型VLM）でスコアを直接予測**。3の特徴量を補助ラベルにすると少データでも安定。
5. **Brix値を別入力**として最終補正（非対称ペナルティ）。

## 4. 注意点
- 静止画では**粘度の直接計測は不可**。表面の照り・濁りの均一性・液面の質感からの**間接推定**に留まり、動画より精度は落ちる。Brix実測値で補う。
- 学習は**複数店舗・複数評価者**のデータで行い、特定店過学習を避ける（評価者バイアスは1評価者=1店舗で交絡し分離困難。同一店×複数評価者データが理想）。
- 撮影条件（角度・距離・照明・湯気）の標準化が精度を最も左右する。撮影ガイドの整備を推奨。
