remove-huadian スキル
概要
MiniMax image-01 等の画像生成AIは「古代中国女性」と判定すると唐代の花鈿(眉間の赤い装飾)を強制付加する。三国志(漢末)時代考証では不適切で、ユーザーは全カット除去を希望。
3アプローチの実証結果(前提知識)
| アプローチ | 結果 | 備考 |
|---|---|---|
① プロンプト NO red dot / NO forehead mark |
❌ 無効 | image-01 はネガティブ指示を無視 |
| ② 前髪で物理隠蔽 | △ 点は消えるが画質・可愛さ低下 | ユーザー却下 |
| ③ 画像処理で点だけ除去 | ✅ 最適解 | 本スキル。元の良い画質を維持 |
フェーズ1: 対象画像の特定
会話文脈から花鈿除去対象の画像パスを特定。複数ある場合は1枚ずつ処理。
- 指定がなければ「直近に表示・生成した画像」を対象
- 出力先は
<元ファイル名>_no-huadian.jpeg(デフォルト)か、ユーザー指定名
フェーズ2: 花鈿除去の実行
同梱スクリプトを実行:
python3 /home/yn4416/.claude/skills/remove-huadian/remove_huadian.py "<input.jpeg>" "<output.jpeg>"
スクリプトが自動で行うこと:
- OpenCV Haar cascade で顔検出 → 眉間ROI(顔上1/3中央)を推定
- ROI内の「赤みスコア = min(R-G, R-B)」上位を花鈿マスク化(閾値は動的・最低55)
- マスク膨張 → 各ピクセルを周囲肌色の中央値で heal
- 境界をガウスぼかしで自然になじませる
- 修正後の残赤pxを検証出力
顔検出失敗時(横顔・複数顔等)
フォールバックで画像中央上半分をスキャンするが、精度が落ちる。その場合は:
- 眉間の正確な座標をユーザーに確認、または
_debug_grid.jpeg(100pxグリッド付き)を生成して位置を目視把握し、 スクリプトのdetect_forehead_centerを該当座標で上書き実行
フェーズ3: 結果確認
修正版を表示してユーザー承認を得る。眉間2xクロップで before/after 比較を出すと分かりやすい:
from PIL import Image
orig = Image.open("<input.jpeg>")
fixed = Image.open("<output.jpeg>")
# 眉間ROI座標をスクリプト出力から取得してクロップ
残赤px が 0 なら除去成功。承認後、元ファイル置換はユーザー確認を必ず取る(CLAUDE.md制約)。
ノウハウ(トラブルシュート)
- 座標が全然違う場所を処理した: 顔検出の座標を疑え。私の想定(画像中心)と実際の顔位置がずれることが多い。必ずグリッド/クロップで実座標を確認すること。
- 肌色まで消えてしまう: 赤み閾値(55)が低すぎる。
build_huadian_maskのthresholdを上げる。 - 花鈿が残る: 閾値が高すぎるか、花鈿が墨画でくすんで彩度低。
min(R-G, R-B)ではなく HSV の hue/sat を試す。 - 水墨画の花鈿はくすむ: 鮮赤ではなく暗赤褐(RGB 170,43,24 等)。「最も赤い点」アプローチ(reddiff上位)が確実。
関連
- 実証ログ:
01_DECISIONS/ai-music/2026-06-14_銅雀台花鈿除去スキル化.md(SSOT) - プロンプト集: 各楽曲ディレクトリの
prompts.mdに花鈿問題の教訓を記録