web-dev-qa-db-ja.com

iOS 5.0のコア画像フィルターは、リアルタイムのビデオ処理に十分な速度ですか?

AppleがCore ImageフレームワークをiOS 5.0に移植したので、Core Imageはカメラのビデオにライブフィルターとエフェクトを適用するのに十分な速さですか?

また、iOS 5.0のCore Imageフレームワークを学ぶための良い出発点は何でしょうか?

37
Marlon

Core ImageがiOSでしばらく使用されなくなったので、ハードパフォーマンスの数値について説明します。 GPUImage フレームワークのテストの一部としてベンチマークアプリケーションを作成し、生のCPUベースのフィルター、Core Imageフィルター、およびライブビデオフィードを使用したGPUImageフィルターのパフォーマンスのプロファイルを作成しました。以下は、iPhoneのカメラからの640x480ビデオフレームに単一のガンマフィルターを適用するのにかかる時間(ミリ秒単位)です(2つの異なるOSバージョンを実行する2つの異なるハードウェアモデル)。

             iPhone 4 (iOS 5)   | iPhone 4S (iOS 6)
------------------------------------------------
CPU          458 ms (2.2 FPS)     183 ms (5.5 FPS)
Core Image   106 ms (6.7 FPS)     8.2 ms (122 FPS)
GPUImage     2.5 ms (400 FPS)     1.8 ms (555 FPS)

Core Imageの場合、これは、iPhone 4の単純なガンマフィルターでは最大9.4 FPSに変換されますが、iPhone 4Sでは同じように60 FPSをはるかに超えます。これは、セットアップできる最も単純なCore Imageフィルターのケースに関するものであるため、より複雑な操作を行うとパフォーマンスは確かに異なります。これは、Core ImageがiOS 5を実行しているiPhone 4のiPhoneのカメラレートと一致するのに十分な速さでライブ処理を実行できないことを示しているようですが、iOS 6以降では、iPhone 4S以上でライブフィルタリングを実行するのに十分な速さでビデオを処理します。

これらのベンチマークのソースは、 my GitHubリポジトリ )にあります。

この回答をオリジナルから更新しましたが、これはCore Imageのパフォーマンスにとって非常に重要でした。比較の基準として使用していたセピアトーンフィルターは、自分と同じ操作を実行していないため、ベンチマークとしては不十分でした。 Core ImageフィルターのパフォーマンスもiOS 6で大幅に改善され、iPhone 4S以降でライブビデオを処理するのに十分な速度になりました。また、私はそれ以来、 大半径のぼかし のようないくつかのケースを発見しました。

前の回答、後世のため:

パフォーマンス関連の質問と同様に、答えはフィルターの複雑さ、フィルターされる画像サイズ、および実行中のデバイスのパフォーマンス特性によって異なります。

Core ImageはMacでしばらく使用できるようになったので、フレームワークを学習するためのリソースとして Core Imageプログラミングガイド を紹介します。 NDAを考慮して、iOS固有の要素についてコメントすることはできませんが、 WWDC 2011 セッション422-iOSおよびMac OS XでCore Imageを使用するためのビデオを視聴することを強くお勧めします。

Core Image(主に)は画像処理にGPUを使用するため、OpenGL ES 2.0シェーダーが既存のデバイスで画像処理を処理する速度を確認できます。私は最近この領域で いくつかの作業を行いました 。iPhone 4は、480 x 320でフィードされるリアルタイムビデオでシンプルなシェーダーを使用して60 FPS処理を実行できることがわかりました。そこにサンプルアプリケーションをダウンロードし、シェーダーやビデオ入力サイズをカスタマイズして、特定のデバイスが適切なフレームレートでこの処理を処理できるかどうかを判断します。 Core Imageは少しオーバーヘッドを追加する可能性がありますが、フィルターチェーンを整理する方法についてもいくつかの巧妙な最適化があります。

互換性のある最も遅いデバイスはiPhone 3G Sと第3世代iPod touchですが、それらはiPhone 4よりもそれほど遅くはありません。iPad2は、膨大なフラグメント処理能力ですべてを圧倒します。

55
Brad Larson

私見、Core Imageは常にiOS6.0以降の最初のオプションです。次のような、気に入っていただける機能がいくつかあります。

  1. Core Image入力パラメーターはglTexture2dをサポートします。
  2. Core Image出力パラメーターはglTexture2dをサポートします。
  3. GPUでのみCIを使用することを選択できます。 CIContextを初期化します。 _CIglContext = [CIContext contextWithEAGLContext:_glContext options:opts];
  4. 多くのフィルターがiOSプラットフォームで利用できるようになりました。93個のフィルターですか?
  5. アプリケーションが一時的にバックグラウンドで実行されているときに、CPUのみでバッファーを処理することを選択できますが、これはお勧めできません。

これらはすべて、WWDC2012セッションビデオのコアイメージパートで言及されています。見てください、多分あなたはそこにあなたの解決策を見つけるでしょう。

6
cocoatoast

IPhone 4以降ではほぼリアルタイムになります。 iPhone 3GSは少し不安定になります。 iPhone 3以前はお勧めしません。

3
David