ハイライト
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 {
// デバイスが対応しているため、有効化できる
}
isConstantColorSupportedはAVCapturePhotoOutputのプロパティ- カメラやフォーマット切り替え後に値が変わる可能性
パイプライン設定:
// 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)
isConstantColorEnabledはAVCapturePhotoSettingsプロパティ。デフォルト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)でスキャン領域を検証。シャドウ領域は自然に除去——追加シャドウ検出アルゴリズム不要。
関連セッション
- Build a great Lock Screen camera capture experience — ロック画面から直接カメラ撮影を起動。カメラ App の使用シーン拡張
- What’s new in camera capture & camera bundles — AVFoundation カメラキャプチャフレームワーク年次更新総覧
- Deploy machine learning and AI models on-device with Core ML — Constant Color 内部で ML モデルを使用。Core ML デプロイ最適化の理解が基盤理解に役立つ
- Explore HDR images and video — Constant Color 出力は Display P3 色彩空間。HDR レンダリングは後続表示段階
コメント
GitHub Issues · utterances