Method
何をどう測っているか
Mirroirの診断が実際に何を測り、どの数値でタイプを分けているかを、実装のまま公開します。 数式も閾値もそのままです。
先に3つ、はっきりさせておきます。機械学習は使っていません。手で決めた閾値による計算です。精度検証もしていません。正解ラベル付きのデータセットを持っていないためです。そして2D画像では触診情報が取れません。骨格診断が本来行う「骨や関節の触診」は、写真からは分かりません。
1. 写真の前処理
iPhoneで撮った写真の多くは Display P3 という色空間で記録されています。これを sRGB に変換しないと、 後段で使う b*(黄み・青みの軸)の値がずれ、イエベ/ブルベの判定が狂います。 画像に埋め込まれた ICC プロファイルを読んで変換しています。
次に、グレーワールド仮説による照明補正をかけます。画面全体の平均色が無彩色に近づくよう 各チャンネルを係数倍する処理で、屋内の電球色や日陰といった環境差をならします。
2. 撮り直しをお願いする条件
解析前に4つの条件を見て、外れていれば結果を出さずに撮り直しをお願いします。
3. パーソナルカラーの判定
顔写真から肌の色を複数箇所サンプリングし、それぞれ 5×5 ピクセルの平均を取って Lab 色空間に変換します。外れ値は IQR法(四分位範囲)で落とし、残りの平均を使います。 使うのは次の3つの値だけです。
この3値をそれぞれシグモイド関数に通してスコア化し、掛け合わせます。
4つの積を合計で割って確率に直し、一番大きいものを結果とします。a*(赤み・緑みの軸)は計測していますが、分類には使っていません。中央値(center)と傾き(scale)は手で決めた値で、実データによる調整は行っていません。
4. 骨格タイプの判定
全身写真から MediaPipe Pose で姿勢を推定します。33点の関節が取れますが、実際に使っているのは6点だけです。
この6点から2つの比率を出し、それだけで3タイプに分けます。
ナチュラルは肩幅と腰幅が近く、上下のバランスが取れているときに高くなるガウス関数です。 末尾の ×0.8 は「ナチュラルに寄りすぎないように」手で入れた係数で、 実測にもとづくものではありません。
5. できないこと
- 触診の代わりにはなりません。骨格診断は本来、骨の出方・関節の大きさ・筋肉や脂肪のつき方を触って確かめます。 2D画像からは取得できない情報で、これは工夫で埋まる差ではなく構造的な限界です。
- 精度を測っていません。正解ラベル付きのデータセットを持っておらず、何割当たるのかを検証できていません。 「当たる」「正確」といった表現を使わないのはこのためです。
- 機械学習ではありません。上に書いた通り、手で決めた閾値の計算です。学習も再学習もしていません。
- 照明と写り方に影響されます。前処理で補正していますが、極端な色の照明やメイク、髪色によって結果は変わります。
6. なぜ公開するのか
この種のサービスは、判定の仕組みを明かさないのが普通です。中身を見せれば 「思っていたより単純だ」と受け取られるかもしれません。
それでも公開するのは、精度を検証していない以上、「当たります」と言う代わりに「こう測っています」と言うのが唯一誠実な立場だと考えるからです。判断の材料を持ったうえで、結果をどう扱うか決めていただければと思います。
結果の位置づけ
以上の通り、診断結果は参考値です。 確定的な診断が必要な場合は、対面のイメージコンサルタントやパーソナルカラーアナリストに ご相談ください。Mirroirは、そこへ行く前の当たりをつける道具として使っていただくのが いちばん役に立つと考えています。