WWDC Quick Look 💓 By SwiftGGTeam
Keep colors consistent across captures

Keep colors consistent across captures

元の動画を見る

ハイライト

iPhone の通常撮影パイプラインは「美的効果」を追求——環境光の色温度、方向、強度が写真の雰囲気の一部になる。しかし一部シナリオでは「色彩の真実」が必要:EC 商品写真は正確な色表示、創傷追跡は皮膚色の変化を見る必要がある。Constant Color API はこれらのシナリオ向け。


主要内容

EC 出品者が商品写真を撮影、購入者が届いた商品を見て「色が違う」——一般的な返品理由。問題は出品者でも購入者でもなく撮影環境。暖色灯、カラー補光灯、窓からの日光まで、同じ商品が写真で全く異なる色に見える。プロはスタジオと照明機材を使うが、小規模出品者や個人クリエイターにはない。

Apple の iOS 18 Constant Color API はスタジオ級の色彩一貫性を iPhone に。iPhone 14 以降の改良フラッシュハードウェアを活用——各 iPhone のフラッシュとカメラセンサーは工場出荷時に精密測定。API はまずフラッシュ写真、続けて非フラッシュ写真を高速連写して比較:フラッシュによる輝度増分が既知光源と未知環境光の差。計算写真と ML により「フラッシュのみで照らした場合」を推定し、D65 標準光源下の色彩結果をレンダリング。

セッションは大量の比較を展示:暖色室内、赤緑青の強光照射、2800K 極暖色光など極端条件でも、Constant Color のスミレ鉢と肌色調はほぼ一致。通常モードは深刻な色偏り。特に iPhone 15 では環境光による色彩分散が 87% 低減。同じ創傷を異なる光線下で——Constant Color は淤青範囲と色変化を信頼性高く比較可能。通常モードでは判断不能。

詳細

デバイスサポートとパイプライン設定

Constant Color は写真モードのみ。動画非対応。iPhone 14 シリーズ、iPhone 15 シリーズ、2024 iPad Pro が必要。カメラタイプは builtInWideAngleCamera または builtInDualWideCamera

デバイスサポート確認:

// 現在のデバイスが Constant Color に対応しているか確認([10:33](https://developer.apple.com/videos/play/wwdc2024/10162/?time=633))
if photoOutput.isConstantColorSupported {
// デバイスが対応しているため、有効化できる
}
  • isConstantColorSupportedAVCapturePhotoOutput のプロパティ
  • カメラやフォーマット切り替え後に値が変わる可能性

パイプライン設定:

// AVCaptureSession で Constant Color を有効化([11:59](https://developer.apple.com/videos/play/wwdc2024/10162/?time=719))
photoOutput.isConstantColorEnabled = photoOutput.isConstantColorSupported
  • AVCaptureFlashMode.auto または .on 必須。.off は例外(11:24
  • RAW 出力非対応。rawPhotoPixelFormatType は 0 必須(11:39
  • isConstantColorEnabled 変更は長いパイプライン再設定をトリガー——App 起動時に 1 回設定推奨(12:25

撮影トリガーと結果取得

AVCapturePhotoSettings で Constant Color 要求をフレームごとに制御:

// フレームごとに Constant Color を有効にするか設定([12:48](https://developer.apple.com/videos/play/wwdc2024/10162/?time=768))
let settings = AVCapturePhotoSettings()
settings.flashMode = flashToggleIsOn ? .on : .auto
settings.isConstantColorEnabled = constantColorToggleIsOn
photoOutput.capturePhoto(with: settings, delegate: self)
  • isConstantColorEnabledAVCapturePhotoSettings プロパティ。デフォルト false
  • 未設定時は通常の美的パイプライン

信頼度マップ

フラッシュ出力は限定的——遠距離や強光環境では効果的に照らせない可能性。API は色彩精度判断の 2 方式を提供:

// 2D 信頼度マップを取得([16:12](https://developer.apple.com/videos/play/wwdc2024/10162/?time=972))
let confidenceMap = photo.constantColorConfidenceMap
// Float 値は 0〜1、1 = 完全に信頼、0 = 信頼なし

// 中央加重平均の信頼度を取得([17:00](https://developer.apple.com/videos/play/wwdc2024/10162/?time=1020))
let meanConfidence = photo.constantColorCenterWeightedMeanConfidenceLevel
  • 信頼度マップは 2 番目の CVPixelBuffer 出力。各ピクセルが写真内の領域に対応
  • 中心加重平均は迅速判断向け。閾値は 0.8〜0.9 から調整開始(16:39
  • iPad Pro 文書スキャンは閾値 0.9(22:47
  • 鏡面反射領域(スプーン表面のフラッシュ反射など)は低信頼度——ピクセル値が飽和

フォールバックフレーム

信頼度不足時、通常環境光写真を代替として取得:

// フォールバックフレームを有効化([17:47](https://developer.apple.com/videos/play/wwdc2024/10162/?time=1067))
settings.isConstantColorFallbackPhotoDeliveryEnabled = true

// delegate コールバック内で区別([18:09](https://developer.apple.com/videos/play/wwdc2024/10162/?time=1089))
func photoOutput(_ output: AVCapturePhotoOutput,
                 didFinishProcessingPhoto photo: AVCapturePhoto) {
    if photo.isConstantColorFallbackPhoto {
// これは環境光のフォールバックフレーム
    } else {
// これは Constant Color 写真
    }
}
  • 有効時 didFinishProcessingPhoto は 2 回呼ばれる
  • 低信頼度領域の Constant Color 画像も視認可能——奇妙な色や過剰ノイズなし。色彩精度のみ低下

環境光シャドウ除去

Constant Color は「暗室でフラッシュのみ」の画面を予測——環境光シャドウは弱減または完全除去。2024 iPad Pro 文書スキャンは Constant Color でシャドウ除去を実装(22:36)。

検証方法

Apple は 10 Lux から 800 Lux 輝度、3000K から 7500K 色温度でテスト。各組み合わせでプランク白点、マゼンタ偏移、緑偏移もテスト。Calibrite ColorChecker と Pantone 138 肌色調ガイド、実被写体も使用。P3 RGB 出力を CIELab* へ変換し条件間色彩分散を計算。iPhone 15 で環境光による色彩分散 87% 低減(21:59)。

重要ポイント

  • 何をするか:EC App の「商品実写」フローに Constant Color モードを追加。なぜ価値があるか:「色差」は最も一般的な返品理由の 1 つ。Constant Color は撮影環境による色偏りを排除し、購入者が実物に近い色を見られる。始め方:商品撮影ページに「色彩還元」スイッチ追加、settings.isConstantColorEnabled = true に対応。撮影後は通常写真ではなく Constant Color 写真を表示。

  • 何をするか:健康追跡 App で Constant Color により皮膚変化を記録。なぜ価値があるか:淤青、発疹、創傷の色変化は通常緩やかで異なる光線下では肉眼判断困難。Constant Color で時間をまたいだ比較が可能。始め方:「撮影記録」機能で Constant Color をデフォルト有効化。保存時に constantColorCenterWeightedMeanConfidenceLevel も保存。閾値未満で再撮影を促す。

  • 何をするか:文書スキャン App で Constant Color のシャドウ除去能力を活用。なぜ価値があるか:デスクトップ文書には常に環境光シャドウがあり OCR と視覚体験に影響。iPad Pro 文書スキャンはすでにこの方式。始め方:Constant Color 有効化後、信頼度マップ(閾値 0.9)でスキャン領域を検証。シャドウ領域は自然に除去——追加シャドウ検出アルゴリズム不要。

関連セッション

コメント

GitHub Issues · utterances