ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
すべてのキャプチャで色の一貫性を維持
Constant Color APIの概要と、正確な色を判断するための機能をアプリで提供するうえでこのAPIがどのように役立つかをご紹介します。APIの導入方法、このAPIが科学およびマーケティングの領域にもたらす可能性、この技術を最大限に活用するためのベストプラクティスを学ぶことができます。
関連する章
- 0:00 - Introduction
- 2:03 - What is color constancy?
- 7:42 - How Constant Color works
- 9:30 - Code examples and demos
- 20:39 - Validation
リソース
関連ビデオ
WWDC23
WWDC22
WWDC21
-
ダウンロード
「Keep colors consistent across captures」へようこそ こんにちはYukoです ご存じのように iPhoneはイマーシブな 素晴らしい写真を撮影できます 光の質や 光が シーンに含まれる物や人の色や質感と どのように相互作用するかは 非常に重要であり iPhoneで記録した大切な瞬間を 生き生きと追体験するのに役立ちます 例をいくつか見てみましょう 暖かい輝きに満たされた世界 まさにアフリカのサバンナの夕日ですね ゴールデンアワーのまだらな光の中で 秋の葉が美しく映えます 暖かい屋内の光と冷たい屋外の光の対比が このパブの居心地の良さを際立たせています 鮮明な指向性の照明が 意欲に満ちた 被写体の表情を強調しています 植物のライトショーの彩度の高い光は この写真の本質を捉えています 水面に沈む太陽の反射が これらの写真に 魔法のような魅力を与えています 光と影のコントラストが 作り出す雰囲気に目を奪われます これらはすべて 環境光が写真の美しさの核をなす 重要な要素となっている好例です iPhoneで写真を撮る時 私はいつも このような効果を求めています しかし ときには 環境光の効果が望ましくない あるいは 邪魔になってしまうことさえあります 人の肌を写真に撮る時などです 例えば 創傷の経過を記録する場合は 重要なのは創傷周囲の部分の色であって 環境光とは無関係です この例では あざになった箇所が Constant Colorの画像で見た方が より明確にわかります このような写真には Constant Color APIが適しています では 詳しく見ていきましょう 本セッションでは 色の一貫性とは何かを説明し その例をご紹介するとともに Constant Colorの仕組みについて 説明します そのあと ライブデモを交えながら いくつかのサンプルコードを確認します 最後に Constant Color機能が どのように検証されたかを説明します 色の一貫性とはどのようなものでしょうか それは人間の視覚の仕組みの一つです 物体の色がわかっている場合 周囲の照明に関係なく どのような環境でその物体を見ても ほぼ同じ色に見えます 例えば 鮮やかな緑色の青りんごは 太陽光の下で見ても たき火の暖かい光の下で見ても 緑色に見えます これは 人間が周囲の照明条件に自動的に順応し 環境光の影響を補正しているからです 人間の脳は 過去に見た物体を認識し その色を記憶しています Constant Color機能の 新しいキャプチャモードでは 過去に対象をキャプチャして その色を記憶し 認識しておくことを 必要とせずに 物体 人物 素材の色を判断できます シーン内の人物や物体を 周囲の照明条件に関係なく 一貫性のある色で キャプチャしたい状況は数多くあります 本セッションでは 商品写真と肌の写真の2つを取り上げます Constant Color画像処理は 商品のマーケティング写真で有効ですが 特に 購入者が実際に見たことがないものを 撮影する場合に重要です オンラインショップでは 2種類の商品写真を目にします 1つ目は 商品を購入した人が 喜んで使っている 魅力的な写真です このような写真は 標準の写真でもポートレートモードでも すでにiPhoneでうまく撮影できます
2つ目は 商品のサイズや色などの特徴を 購入者にわかるように伝えるための写真です Constant Colorは 一貫した照明条件で写真を生成するため 見た人が色を判断しやすくなります 既知の照明条件による一貫性のある画像は 各ユーザーのスマートフォンや タブレットまたはコンピュータの カラーマネジメントディスプレイで 処理されるため どのような条件下で表示するかに関係なく 商品の色を知ることができます これにより 自宅 オフィス 車内 職場など どこにいても商品を正しい色で見られるので お客様は十分な情報に基づいて 購入を決めることができ 顧客満足度の向上につながります
オンラインで服を注文し 商品が届いたら 思っていたのと違ったという失敗は 誰もが経験しているでしょう 鉢植えの植物を例にしてみましょう 大手メーカーやプロの製品写真家は 商品写真を 大がかりな照明機材を備えた 本格的なスタジオで 写真用の背景とデジタルカメラを使って 撮影します 小規模な企業や住宅クリエイターであれば 製品写真の照明の調整に ライトボックスを使う場合もあります しかし iPhoneなら 撮影スタジオも照明機材も必要ありません ポートレートモードと 新しい Constant Color APIがあれば十分です では 例を見てみましょう
こちらはスミレの鉢植えです 魅力的な色をキャプチャしたいと思います ご覧のように これは普通の部屋です 温白色の室内照明で 特別な照明機材はありません 写真をいくつか見てみましょう 左は通常のiPhone 15の写真 右はConstant Colorの画像です 右の方が 中間的なカラーバランスで 全体の色調も整っています もう少し極端に 濃い色の光をシーンに加えてみます これだと 鉢が中間色なのか赤褐色なのか もうわかりません 右のConstant Colorの画像を見ると 前景のスミレについては 色調もバランスも 前の写真とほとんど変わっていません 実際 このシーンに 彩度の高いどんな色の光を加えても 素晴らしい結果が得られます 左の画像は 中間色の室内照明だけを使用しています ほかの画像では それぞれ彩度の高い赤 緑 青の光を 室内照明に加えています 通常のパイプライン画像では 環境光による色調の違いを描写します これは想定通りで キャプチャモードには望ましいものです Constant Colorの画像を下に並べてみると どの照明条件下でも ほぼ一貫した描写になることがわかります これらは濃い色の光の極端な例ですが Constant Colorは わずかな色調も同じように補正します 例示のために 画像を修正していると 疑う人もおられるかもしれませんが よくわかるよう一部をズームしてみましょう ご覧のように 葉の影の部分の色調は 完全には補正されていません この理由については後ほど説明します もちろん 人物の色や肌の色調を 正確にキャプチャすることも可能です 時間の経過による肌の色相の変化を モニタリングする際に非常に役立ちます 先ほどと同じ照明条件で Constant Colorでは 4人のそれぞれの肌の色調が どの照明でもほぼ一貫した 描写になっていることがわかります 肌の色が時間とともに どう変わったか覚えておくのは困難です 特に 変化がゆっくりであったり 照明条件が異なっていたりする場合は なおさらです そのため あざが薄くなり始めたか まだ黒ずんでいるかを確認するような時は Constant Colorのキャプチャの方が 通常の写真よりも有効です 発疹や虫刺されが 赤くなったかどうかを見るときも Constant Color画像処理により 通常のキャプチャよりも 目的に合った写真が得られます この例からわかるように 2800Kの非常に暖かみのある室内光で 撮影した通常の写真では カッピングの痕が非常にくっきり見えます 1枚の画像における絶対的な色だけでなく 時間の経過に伴う色の変化の 進行具合もよくわかります これは特に 肌の色が濃い人に当てはまります 肌の色が薄い人よりも 色の変化が目立ちにくいからです Apple製品では どんな肌の色でも 性能を発揮することが不可欠なので プレゼンテーションの後半で 検証について説明します Constant Color機能による 画像生成の仕組みを もう少し詳しく見てみましょう Constant Color APIは iPhone 14ファミリーで初めて導入された 改良されたフラッシュハードウェアを 利用します 個々のiPhoneのフラッシュの特性は 製造工程で精密に測定されています 同様に 個々のカメラの特性も それぞれ入念に測定されています 完全に光を遮断した暗室では 写真の光源はフラッシュだけになります このシナリオでは カメラと光源の特性がわかっているので 写真に写る物体や素材の色を 正確に判断できます 暗室の外での画像をキャプチャするために APIはフラッシュによる輝度の上昇を分析し それを使用して 同等の画像を 暗室で撮った場合の結果を予測します APIはまず シーンや照明条件の差異を 最小限に抑えられるよう フラッシュありの画像と フラッシュなしの画像を連続撮影します 次に フラッシュの画像に 周囲の画像を登録して動きを軽減し 画像内の対応する領域が 同じ内容になるようにします さらに 線形のシーン参照ドメインで 2つの画像の相対的な露出を標準化します これにより 2つのフレームの比較が可能になります コンピュテーショナルフォトグラフィ技術と 機械学習を応用し フラッシュとカメラの両方の 生産工場での精確な校正に基づいて これらの2つの画像を一緒に処理します これによって得られる結果が 同等の暗室画像の予測となります 最後に 暗室画像を 標準のD65光源で 照らされたものとしてレンダリングし グローバルトーンマッピングと 2.2ガンマエンコーディングを適用します 視野全体の素材の明度の わずかな変化を保持するため ローカルトーンマッピングは適用されません 次に Constant Color画像を アプリでキャプチャする方法を説明します 知っておくべきことが6つあります まず デバイスがConstant Color APIに 対応していることを確認します 次に Constant Colorが 必要になる可能性を想定して パイプラインを構成する必要があります さらに Constant Colorの 写真をトリガするために AVCapturePhotoSettingsプロパティを 設定する必要があります APIには2つのメカニズムがあり それぞれ Constant Color画像において 色が高精度である部分と カラーレンダリングの ばらつきが多い部分の把握に使用されます 1つ目のメカニズムは2D信頼度マップです 詳細は後ほど説明します 2つ目は単一の信頼度要約値です 最後に Constant Color画像を 使わないとアプリが判断した場合に 適用されるフォールバックフレームを オプションで指定できます では サンプルコードを見てみましょう まずはデバイスが対応しているかの確認です
これは Constant Colorという 新しいサンプルカメラアプリのコードです Apple Developer Webサイトで 提供されています 本セッションの残りの部分では このサンプルアプリを使います デバイスがConstant Color APIに 対応しているかどうかを確認するには AVCapturePhotoOutputの プロパティを確認する必要があります 具体的には isConstantColorSupportedプロパティです このプロパティは カメラやフォーマットを 切り替えると変わることがあります デバイスについては 現在はiPhone 14ファミリーと iPhone 15ファミリーが対応しており 2024年にiPad Proが加わる予定です デバイスがConstant Colorに 対応しているかどうかを確認したら 次は AVCaptureパイプラインを構成して Constant Color画像を 提供できるようにします プリ発光のシーケンスが必要なため Constant Colorのモードは写真のみです デバイスタイプは builtInWideAngleCameraか builtInDualWideCameraのいずれかです いずれかに応じて AVCaptureSessionの sessionPresetを設定する必要があります Constant Colorはフラッシュを使うので AVCaptureのflashModeがautoまたはonに 設定されていないと機能しません flashModeをoffに設定すると Constant Color画像がリクエストされた時に 例外が発生します
また Constant Color APIでは 生の画像は取得できないため rawPhotoPixelFormatTypeは 0に設定する必要があります Constant Color APIのキャプチャモードは 再現性を重視しているため 品質設定の変更には対応していません 実行時間と出力は すべての優先度設定で同じです 先ほどのコードでは この箇所で sessionPresetが設定されています フラッシュモードの構成は AVCapturePhotoOutputの設定で行います これについては後ほど説明します 最後に photoOutputのプロパティである isConstantColorEnabledを設定します このサンプルコードでは isConstantColorEnabledプロパティが isConstantColorSupportedプロパティを 使用して設定されているため デバイスが対応している場合のみ Constant Colorが有効になります isConstantColorEnabledプロパティを 変更すると レンダリングパイプラインの 再構成に時間がかかるため 必要なほかのパイプライン設定と一緒に アプリの起動時に1回だけ 設定することをおすすめします
デバイスがConstant Color APIに 対応していることを確認し パイプラインを構成できたので 次は Constant Color画像が いつ必要かを指定します Constant Colorサンプルカメラアプリの 別のコードです この箇所で AVCapturePhotoSettingsの キャプチャごとの設定を行っています フラッシュモードは UIトグルで切り替えるように設定します isConstantColorEnabledプロパティの 設定により Constant Color画像がリクエストされます このコードでは isConstantColorEnabled プロパティをUIトグルに関連づけています このプロパティを設定しないと パイプラインでは 通常の写真がデフォルトで選択されます 次はライブデモです 興味深い内容になるように 複雑な照明のシーンを用意しました
Constant Color画像処理と 通常の写真のモードで 結果の画像を比較してみましょう
Constant Color サンプルカメラアプリを使って 普通に写真を撮影してみます
複数の光源によって 手とカラーチェッカーの両方に生じた 微妙な色の変化がキャプチャされています これは見た目にも美しく 思い出をキャプチャするにはぴったりです ろうそくの明かりに照らされて 誕生日ケーキの火を吹き消す 子供の写真を撮影したら素敵でしょう 今度は サンプルアプリで Constant Colorを有効にします
写真を撮ってみましょう フラッシュを使用しているので 標準のプリ発光と フラッシュ撮影のシーケンスがあり それが完了すると Constant Color画像が得られます
肌の色調が画像全体で均一になり カラーチェッカーが全体に中間的な色調で レンダリングされているのがわかります もちろん カラーチェッカーがなくても Constant Color APIは機能します 実際のところ 基準となる素材やチャートを 写真に含める必要はありません
それらを含めずに もう1枚写真を撮ってみます 肌や机の表面は 一貫性のある色にレンダリングされます
APIの一貫性の確認と検証については このあと説明します
これまで見てきたように Constant Colorではフラッシュを使います 具体的には フラッシュでシーンが どれくらい明るくなったかを調べ 輝度の上昇を分析します iPhoneのフラッシュは 光の出力や 物理的なサイズ バッテリー使用量の バランスを考慮して 入念に最適化されています そのため 特定のキャプチャ条件下では フラッシュの出力が十分でなく Constant Color APIで違いを分析するための 十分な明るさが得られない場合があります この場合 APIにより得られる色の一貫性が 低下する可能性があります フラッシュの明るさが足りない例としては 風景の撮影や 天体写真の撮影のほか 直射日光下での撮影などがあります Constant Color APIには レンダリングされた色が 正確でない場合にそれを検出する ツールが用意されているので アプリで代替フローを利用できます すべてのConstant Colorの写真について APIは画像の各部分を分析し フラッシュによる輝度の上昇の 信号対ノイズ比が十分か 反射によるクリッピングがないかを調べます これにより信頼度マップが作成され 2つ目のCVPixelBufferの出力として 提供されます これをアプリで分析することで 関心領域を含む画像の 信頼度が高いか判断できます 信頼度マップは 浮動小数点数値の2Dマップで 値の範囲は0から1です このマップの各ピクセルは Constant Colorの写真の各部に対応します constantColorConfidenceMapの値が 1の場合 画像のその部分の精度が 十分に信頼できるものであることを示します 値が0の場合は信頼できないことを示します アプリのしきい値は ユースケースによって異なります 0.8から0.9のしきい値から始めて 徐々に 精度を高めていくことをおすすめします これらのマップのいくつかを 次のデモでご紹介します 信頼度マップは 提供される情報のうち 関心領域の色が正確かどうかを 判断するための最も詳しい情報です ただし 場合によっては 2Dマップより単一の値を確認する方が 望ましい場合もあります そのため 信頼度マップの 要約統計も用意されています constantColorCenterWeightedMean ConfidenceLevelプロパティは 関心領域が定かでない場合に使用できるほか 信頼度マップをより詳しく 分析するべきか判断するための 指標として使用できます これは加重平均であり 中央のピクセルほど寄与が大きくなります 写真では通常 メインの被写体を 中央に配置するためです 2D信頼度マップの代わりに 単一の値を使う方法はほかにもあります アプリで必要な場合は 2Dマップから計算できます Constant Colorサンプルカメラアプリでは 中央が加重された信頼度値が 信頼度マップの上に表示されます キャプチャの信頼度がアプリのしきい値に 満たない場合はどうすればよいでしょうか 写真を撮り直してもよいですが オプションのフォールバック用写真を 周囲の写真に使うこともできます 確かめてみましょう フォールバック写真を使う場合に必要なのは 撮影の前に AVCapturePhotoSettingsのプロパティである isConstantColorFallbackPhoto DeliveryEnabledを設定することだけです サンプルコードでは このプロパティもUIトグルで制御しています
フォールバックフレームを 受け取るように選択すると didFinishProcessingPhotoコールバックが 2回トリガされます これは サンプルアプリの デリゲートのコードです コールバック内で isConstantColorFallbackPhotoプロパティが チェックされています これにより フォールバック写真と Constant Colorの写真の どちらを受け取るかが判別されます 2つ目のデモで確認しましょう
まず 前回と同じように 机に手を置いて撮影します
先ほどの画像と同じように 机の表面に置いた手が 中間的な色にレンダリングされています スワイプすると信頼度マップが表示されます マップはほぼ真っ白で 手でできたフラッシュの影の部分に わずかに陰影が表示されています これは フラッシュとカメラの間の ベースラインによるものです では 少し距離があるために フラッシュで背景が 明るくならない場合に どうなるか見てみましょう
Constant Colorの出力はこのようになり 手を照らす光が 強くなりすぎないように フラッシュの強さが自動調整されます そのため 背景はフラッシュで 明るく照らされていません 手の肌の色は一貫性があるように見えます 信頼度マップを見ると 予想通り 手の部分は信頼度が高く 背景は信頼度が低くなっています アプリで信頼度マップを使って 画像の中の重要な部分の色が 正確かどうか判断できます Constant Colorの出力に 少し戻ってみましょう ここで注目すべきは 背景の信頼度は低くても 画像全体のレンダリングは 適切に行われていて おかしな色や過度のノイズがないことです これは APIが輝度の差を計算する前に フラッシュからの情報を使って ギャップを埋めているからです そのため Constant Colorの出力の一部に 信頼度が低い部分があっても 画像全体の品質は問題ありません 次に フラッシュによる 鏡面反射がある場合はどうなるか 見てみましょう
このConstant Color画像では 明らかに スプーンにフラッシュが反射して 強い反射が生じています 当該の部分では フラッシュの光が散乱しているか ピクセル値がクリッピングされていて 輝度の差を正確に測定できません これは 信頼度マップで見た場合 スプーンが見えないことからも明らかです 光沢のある反射は 信頼性が低いと報告されるためです 信頼度が低い理由は 散乱やクリッピングによって 輝度の上昇を正確に測定できないためです
Constant Color APIの画像は どの程度正確なのか 疑問に思われるかもしれません 私たちは 10から800ルクスの 室内照明条件下で APIをテストしました この値は 写真のフレーミングが 難しいような暗闇の状態から 手術室のような 非常に明るい室内環境までに相当します 各ルクスレベルで 色温度は暖色系の3000Kから 寒色系の7500Kまで変化させています それぞれの輝度とルクスレベルで プランキアン軌跡の白色点と 軌跡をまたぐマゼンタと緑の 色調をテストしました 各照明条件下で 濃い飽和色と中間トーン フォリッジおよびスキンのトーンを含む Calibrite ColorCheckerの画像を キャプチャしました 138のスキントーンで構成されるPantoneの SkinTone Guideもキャプチャしました これは アルベドとアンダートーンの 両方を幅広くカバーします そしてもちろん 実際の人物の写真も撮りました このデータについて Constant Color APIのP3 RGB出力を CIEL*a*b*色空間に変換し 照明条件のエンベロープ全体における 各色の変動を計算しました
通常の写真撮影に特化した iPhoneのキャプチャと比較して Constant Color APIは 画像レンダリングの再現性を 劇的に向上させました 環境光による 表面の色のばらつきは iPhone 15ファミリーでは87%減少しました 検証方法と精度の詳細については 今後公開予定の ホワイトペーパーをご覧ください それからもう一つ Constant Colorによる 環境光がない暗室での フラッシュ画像の予測では 環境光によるシーン内の影が 軽減されるか完全に除去されます 左は通常のiPhoneのキャプチャで 手とiPhoneの影がはっきりと見えています 右のConstant Colorの出力では それらの影が除去されています 2024年の iPadの発表イベントをご覧になった方は この結果に見覚えがあるかもしれません 新しいiPad Proの書類スキャン機能では 影の除去に Constant Colorが欠かせないからです 参考までに 書類スキャン機能で使用している constantColorCenterWeightedMean ConfidenceLevelのしきい値は0.9です
では ここまでの内容をまとめましょう Constant Colorは 新しいキャプチャモードです このモードでは 光によって作り出される雰囲気よりも 写真の対象の色を 保持することが優先されます 既知の素材やカードを 写真に写さなくても 色の測定が可能です Constant Color画像は再現性が高く 室内の明るさの違いによる 画像への影響を軽減できます Constant Color画像では 環境光による影が軽減され 完全に除去されることもあります このAPIでは 詳細な信頼度マップや フォールバック画像など Constant Color画像をアプリで 制御する上で役立つ機能を利用できます この新しいキャプチャモードを ご紹介できることをとても誇りに思います みなさんにご活用いただけるのが楽しみです ご視聴ありがとうございました
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。