ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
iOSカメラキャプチャの進歩を知る:奥行き、フォーカス、マルチタスク処理
Appで高度なカメラキャプチャ機能を活用する方法をご覧ください。LiDARスキャナで写真や動画のエフェクトを作り出したり、正確な奥行きを測定したりする方法を紹介します。カメラでピクチャ・イン・ピクチャやマルチタスク処理が行われる仕組みや、顔認識によるオートフォーカスや自動露出が制御される仕組みなどについて解説します。また、複数のビデオ出力を使用する戦略も紹介します。これにより、高品質のビデオ出力をキャプチャしながらライブプレビューを最適化することもできるようになります。 カメラキャプチャ機能の概要については、WWDC21の「カメラキャプチャの新機能」をご覧ください。
リソース
- Accessing the camera while multitasking
- Adopting Picture in Picture for video calls
- Capture setup
- TN3121: Selecting a pixel format for an AVCaptureVideoDataOutput
関連ビデオ
WWDC23
WWDC22
WWDC21
-
ダウンロード
こんにちは 『iOSカメラキャプチャの 進歩を知る』へようこそ カメラソフトウェア チームのNikolas Geloです iOSとiPadOSの新しい カメラ機能をご紹介します LiDARスキャナから 深度をストリームする方法 顔優先のオートフォーカスと 自動露出が利用できる App用の 改善された顔のレンダリング 高度な AVCaptureSession ストリーミング構成 そして最後に マルチタスクを行いながら Appがカメラを使用する 方法をご説明します まずは LiDARスキャナから 深度をストリームする方法 iPhone 12 Pro iPhone 13 Pro iPad Proは 高密度の深度マップ作成用の LiDARスキャナを装備しています LiDARスキャナの仕組みは 周囲に光を投射し シーンの表面に反射する 光を収集します 深度は光がLiDARから環境に 到達しスキャナに反射する 時間を測定して推定されます このプロセス全体は1秒毎に 数百万回実行されます AVFoundationを使用した LiDARスキャナをご覧ください iPhone 13 Pro Maxで LiDAR Depthカメラ AVCaptureDeviceを 使用するAppを実行します Appはストリーミング 深度データをレンダリングします 青は近くにある物体で 赤は遠くにある物体を示し スライダを使うと深度の 不透明度を調整できます 高解像度の深度マップで 写真を撮影することもでき 写真を撮影すると深度の オーバーレイが適用され さらにすばらしい解像度の 静止画像になります このAppにはもう1つ トリックがあります 懐中電灯のボタンを押すと 高解像度の深度マップが動作し RealityKitで スポットライトをレンダリングします それぞれの箇所をタップして スポットライトを当てます 今ギターにスポットライトが 当たっています 右の壁の角をタップすると ハート型の スポットライトになりました ギターに戻りましょう 見栄えがいいですね
LiDARスキャナのAPIは iPadOS 13.4のARKitで初めて導入されました WWDC 2020の 『ARKit 4について』を ぜひご覧ください 今回はiOS 15.4ではAVFoundationで LiDARスキャナにアクセスできます 動画と深度を提供する 新しい組み込みLiDAR 深度カメラAVCapture Device Typeを導入しました 高品質で高確度の 深度情報を提供します このAVCaptureDeviceは 背面広角のカメラを使用して 動画を提供し LiDAR スキャナで深度を捉えます 動画と深度の両方が 広角カメラの視野で捉えられます TrueDepth AVCaptureDeviceのように すべての形式が 深度データの提供を サポートします このAVCaptureDeviceは スキャナのスパース出力を 結合し 背面広角の カメラからのカラー画像で 高品質の 深度データを作成します LiDARと色入力は 高密度の 深度マップを出力する 機械学習モデルを使って 処理されます LiDAR Depthカメラは 背面広角カメラを使うため AVCapture MultiCamSessionで 望遠とウルトラワイドを 使用することもできます 複数のカメラを同時に 使用する Appに最適です LiDAR Depthカメラは ビデオ解像度 640x480から 4032x3024での 12メガピクセル画像まで さまざまな形式を 露出します ストリーミング中 最大 320x240の深度マップが出力可能 写真撮影の場合は 768X576の深度マップです 深度の解像度は16x9や 4x3形式とは少し異なります 動画のアスペクト比に 一致させるためです LiDAR Depthカメラ AVCaptureDeviceは iPhone 12 ProとiPhone 13 Pro iPad Pro(第5世代)で利用でき iPhone 13は 深度データを提供できます AVFoundation Capture APIは物理的デバイスからなる 「仮想デバイス」として 参照されます iPhone 13 Proの背面には 仮想AVCaptureDevicesが 4つ備わっています 新しいLiDAR Depthカメラは ワイドカメラと LiDARスキャナを使用 デュアルカメラは ワイドと 望遠カメラを使用 デュアルワイドカメラは ワイドとウルトラワイドを 使用 トリプルカメラは ワイド ウルトラワイド 望遠カメラを使用します 深度はデバイスによって 異なります LiDAR Depthカメラは 「絶対的な深さ」を生み 飛行時間法を使い 実世界の 規模が計算されます 測定のような コンピュータ ビジョンタスクに最適です TrueDepth デュアル デュアルワイド トリプルカメラは相対的で 不均衡な深さを生みます 電力を消耗せず 光効果の レンダリングに最適です AVFoundationは AVDepthData クラスで深度を表現します このクラスには深度を含んだ ピクセルバッファと 深度データタイプ 正確性 フィルタの有無など それを説明する その他の プロパティがあります これは 新しい LiDAR Depthカメラのような 深度対応の AVCapture Deviceにより提供されます AVCaptureDepthDataOutput から深度をストリームするか AVCapturePhotoOutputの 写真に付属する深度を利用できます 深度データはデフォルトで フィルタリングされています フィルタリングにより ノイズが減り 深度マップに欠けている 値や穴を埋めます これは 動画と写真Appに最適です 深度マップを使用して 色画像に効果を適用した場合 アーティファクトは 表示されませんが コンピュータビジョンAppは 元の値を保存するために フィルタリングされていない 深度データを好みます フィルタリングが無効になると LiDAR Depthカメラは 信頼性の低い部分を 除外します 深度データフィルタリングを 無効にするには isFilteringEnabled プロパティをfalseにすると AVDepthData オブジェクトを受け取っても フィルタリングされません ARKitはすでにLiDARスキャナへの アクセスを提供しているので 「AVFoundationとの 違いは?」と思うでしょう
AVFoundationは動画と写真の App用に設計されています AVFoundationでは LiDARスキャナで捉えた 深度データを高解像度の 写真に組み込むことができます ARKitは名前の通り 拡張現実App用です LiDARスキャナを備えた ARKitなら シーンジオメトリや オブジェクトの配置などの機能が 利用できるようになります AVFoundationは 映画の録画や写真撮影に 最適な高解像度の動画を 提供します LiDAR Depthカメラは 768x576の深度を提供でき ARKitの256x192の 2倍の大きさとなります ARKitは低解像度の 深度マップを使用することで 機能に拡張現実 アルゴリズムを使用できます AVFoundationで深度データを キャプチャする方法の詳細は WWDC 2017の 『iPhone写真撮影で― 深度を捉える』を ご覧ください ご自身のAppで LiDAR Depthカメラを どのように使うかが 楽しみです 次は オートフォーカスと 自動露出が改善され Appでの顔の可視性を 向上したかを説明します オートフォーカスと 自動露出はシーンを分析し 最高の画像を捉えます オートフォーカスは被写体に ピントが合うようレンズを調整し 自動露出は最も明るい部分と 暗い部分のバランスを取り 被写体を可視化します しかし自動調整が 被写体の顔に フォーカスしない場合も あります また逆光の場合 被写体の顔が 見えにくくもなります DSLRやプロ用のカメラの 一般的な機能は顔を追跡し 動的にフォーカスを調整し 被写体を可視化します iOS 15.4ではフォーカスと 露出は顔を優先します これは非常に役に立つため iOS 15.4以降にリンクされた Appではデフォルトで 有効になっています いくつかの例を お見せしましょう 顔優先の オートフォーカスなしでは カメラは 背景に焦点を置きます もう一度ご覧ください 彼が顔の向きを変えると ぼやけてしまい 後ろの木に 焦点が置かれています でもこの機能が有効になると 顔がはっきり写っています 後ろを向いた時に フォーカスが後ろに移ります
動画を隣合わせで比べると 違いは明確にわかります 右は顔優先の オートフォーカス ヒゲの詳細までわかります 逆光の場合 顔が はっきり写りません しかしこの自動露出なら 顔が優先されるので 顔がはっきりとわかります
ここでも隣り合わせで見ると 違いがわかります 右の画像では彼の顔が 明確に写り 後ろの木や空が 明るくなっています 顔が優先されると 全体の露出が調整されます
iOS 15.4のAVCaptureDeviceの 新しいプロパティは オートフォーカスと自動露出が有効に なると制御可能になるものがあります デバイスの「自動調整」を 制御できるようになり いつ有効にするかを 決めることもできます 「isEnabled」 プロパティをトグルする前に 自動調整を無効にする 必要があります 自動有効化のこの動作は 写真Appに最適です AppleのカメラAppでも 使用されています ビデオ会議Appで 会議中に顔を 明確にするのにも役立ちます FaceTimeもこの機能を 利用しています しかしAppによっては 顔優先の オートフォーカスと露出が 適切でないこともあります 例えば ユーザーが 撮影した画像を手動で 調整できるようにする場合は これを無効にしましょう
皆さんのAppが これらの機能に 適さないと思う場合は 動作をオプトアウトします まずAVCaptureDeviceの 構成をロックします 次に顔優先の オートフォーカスと露出の 自動調整をオフにします 次に顔優先のオート フォーカスと露出を無効にし デバイスをアンロックして 構成します
次は 高度ストリーミング 構成を使用して App用に 音声と動画データを 受信する方法についてです AVFoundation Capture APIを使用すると カメラを使用した没入型の Appを構築できます AVCaptureSessionは 動画 音声 写真などを提供できる AVCaptureOutputsに 接続されたカメラや マイクなどの入力の データフローを管理します こちらは一般的なカメラAppの ユースケースの例です フィルタやオーバーレイを適用して 動画が録画されています このようなAppには カメラとマイクが付いた AVCaptureSessionが 動画データと音声データの 2つの出力に接続されています 動画データには エフェクトが適用され 処理された動画は 動画プレビューと 録画用のAVAssetWriterの 2つの場所に送信されます 音声データも AVAssetWriterに 送信されます iOS 16とiPadOS 16では新たに Appは 同時に複数の AVCaptureVideoDataOutputsが 使えるようになりました 各動画データの出力では 解像度 安定性 方向 ピクセル形式を カスタマイズできます 先ほどのカメラAppの例に 戻りましょう キャプチャ要件の 競合が存在しています Appは撮影された ライブ動画プレビューを表示し 後の再生のために 高品質の 動画を録画しようとしています プレビューでは解像度は 画面に合えばいいだけです また遅延が起こらないために 処理はある程度速い必要があります しかし録画する場合は 高品質で録画され 高品質のエフェクトが 適用されることが最適です 2つ目の AVCaptureVideoDataOutputを 追加できることで キャプチャグラフを 拡張することができます これで動画データ出力を 最適化することができます 1つの出力は プレビュー用に小さい バッファを提供し もう1つは録画用に フルサイズの4K バッファを提供します また Appはよりシンプルで より高性能なエフェクトを 小型のプレビューバッファで レンダリングし 録画時のフルサイズの バッファ用に 高品質のエフェクトを 適用することができます Appはプレビューも 録画された動画でも 妥協する必要はありません
プレビューと録画で 異なる出力を使用するべき もう1つの理由は 異なる 手ぶれ補正モードの適用です 動画手ぶれ補正は 動画キャプチャ パイプラインに追加の 遅延を起こします プレビューでは遅延は 好ましくありません コンテンツを 捉えにくくなるからです 録画には 手ぶれ補正を適用することで 後で動画を視聴する際に 体験が向上します 1つの出力には 低遅延プレビュー向けに 手ぶれ補正を適用せず 後の再生用の もう 1つの出力に適用します 動画データの解像度の 構成方法は複数あります まずフルサイズの出力では 出力バッファディメンションの 自動構成を無効にします 次にプレビューサイズの 出力バッファを無効にします しかしほとんどの場合 動画データ出力は フルサイズ出力がすでに 構成されています プレビューサイズ出力でも 自動構成を無効にしますが プレビューサイズ出力 バッファの提供を有効にします AVCaptureSessionPresetでは デフォルトで有効になっています カスタム解像度の リクエストには出力の 動画設定ディクショナリで 幅と高さを指定します 幅と高さのアスペクト比は ソースデバイスの activeFormatのものと 一致する必要があります 動画データ出力の構成方法は 他にもあります 手ぶれ補正を適用するには cinematicExtendedのような モードに 手ぶれ補正を設定します これを行うと 視聴するのに すばらしい動画になります 縦方向のバッファの受信には 方向を変更できます ピクセル形式を指定することで ロスレスYUVバッファを受け取れます
ピクセル形式の選択の 詳細については テクニカルドキュメント3121を ご覧ください
複数の動画データ出力を 使用できるのに加えて iOS 16とiPadOS 16では Appは AVCaptureMovie FileOutputで録画しながら AVCaptureVideoDataOutputと AVCaptureAudioDataOutputから データを受信できます セッションに何を 追加できるか判断するには 出力が追加できるかを確認し セッションのhardwareCost プロパティでクエリを行い システムが構成を サポートするか確認できます 映画ファイル出力と動画データを 受信することで 録画中に検査して シーンを分析することができます 映画ファイル出力と音声データを 受信することで 録画中に音声をサンプリングして 録画された内容を 聞くことができます このような キャプチャグラフでは 録画の仕組みをAVCapture MovieFileOutputにオフロードしつつ 非圧縮の動画と音声の サンプルを受信できます これらの高度ストリーミング 構成の実装では 新しいAPIを使用する 必要はありません 既存のAPIでこれを 有効にすることができます
最後は ユーザーが マルチタスクを行う間 Appがカメラを使用する 方法についてです iPadではユーザーは多くの方法で マルチタスクを行えます 例えばSplit Viewでノートを読みながら ボイスメモを録音したり Slide Overでは 全画面表示のSafariの上で メモを 入力することができます ピクチャ・イン・ピクチャでは 動画を再生しながら 他のWWDC動画を見るために リマインダを追加できます iPadOS 16の 新しいステージマネージャでは ユーザーは複数のAppをフローティング ウインドウで開くことができます iOS 16以降 AVCaptureSessionsは マルチタスク中に カメラを使用できます 以前はマルチタスク中の カメラサービスの品質の 懸念から マルチタスク中の カメラの使用を 回避していました ゲームなどリソースを大量に 使用するAppとカメラの併用は コマ落ちなどでカメラの フィードが悪くなります 1ヶ月 1年後に低品質の 動画を見るユーザーは 他のタスク中に撮影したことを 覚えていないでしょう 良好なカメラ体験を 提供することは優先事項です システムが動画が マルチタスク中に 撮影されたものだと 検知した場合 動画が 低品質になる可能性があるという ダイアログが表示されます このダイアログは録画後 AVCaptureMovieFileOutput またはAVAssetWriterで 表示されます すべてのAppで一度だけ 表示され 「OK」ボタンで 却下することができます AVCaptureSessionには 2つのプロパティが追加され マルチタスク時カメラアクセスが サポートされ 有効になったことを示します これが有効になった キャプチャセッションでは 利用できないという ダイアログは表示されません Appによっては カメラを使用す際に 全画面を使用したい場合が あります Appがシステムリソースに関して 他のフォアグラウンドAppと 競合してほしくない場合に 便利です 例えばARKitはマルチタスクでの カメラの使用を許可しません
他のAppと同時に実行しても パフォーマンスが劣らないように 回復力のあるAppにし 通知を監視して システムからのプレッシャーに 耐えられるようにすることが重要です またフレームレートを下げて 影響を和らげます 低解像度 ビン 非HDR形式を リクエストして Appのシステム上の フットプリントを減らすこともできます パフォーマンス維持の ベストプラクティスには 『マルチタスク中のカメラ アクセス』ドキュメントをお読みください
ビデオ電話やビデオ会議 Appは システムが提供する ピクチャ・イン・ピクチャ ウインドウで参加者を表示できます これにより Appのユーザーは iPadで マルチタスクを行いながら シームレスに会話を 続けられるようになりました iOS 15で AVKitはAPIを導入し リモート参加者を表示する ビューコントローラを 設計しました ビデオ電話のビュー コントローラを使用すると ウインドウの内容を カスタマイズできます 導入についての詳細は 「ピクチャ・イン・ピクチャ ビデオ電話の導入」の 記事をご覧ください これで iOSカメラキャプチャの進歩の 説明は終わりです AVFoundationを使用した 深度のストリーミング 向上した 顔のレンダリングの使用 AVCaptureSession ストリーミング構成 マルチタスク中のカメラの 使用についてご説明しました WWDCをお楽しみください
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。