MSQRD/Snapchat ライブ フィルターとしてライブ顔フィルターを開発したいのですが、拡張現実フレームワークを使用して顔を検出するか、コア イメージを使用して顔を検出し、それに応じて処理する必要があるかを知ることができませんでした。誰かが同じことを実装する方法を知っているかどうか教えてください。
3 に答える
CIDetectorCore Image
を使用することをお勧めします。https://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_detect_faces/ci_detect_faces.html iOS 5 以降で利用可能で、優れたドキュメントがあります。
顔検出器の例を作成する:
CIContext *context = [CIContext contextWithOptions:nil]; // 1
NSDictionary *opts = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh }; // 2
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace
context:context
options:opts]; // 3
opts = @{ CIDetectorImageOrientation :
[[myImage properties] valueForKey:kCGImagePropertyOrientation] }; // 4
NSArray *features = [detector featuresInImage:myImage options:opts]; // 5
コードの動作は次のとおりです。
1.- コンテキストを作成します。この例では、iOS のコンテキストです。画像の処理で説明されている任意のコンテキスト作成関数を使用できます。検出器を作成するときに、コンテキストの代わりに nil を指定するオプションもあります。)
2.- 検出器の精度を指定するためのオプション ディクショナリを作成します。低精度または高精度を指定できます。低精度 (CIDetectorAccuracyLow) は高速です。この例に示されている高精度は完全ですが、低速です。
3.- 顔の検出器を作成します。作成できるディテクタのタイプは、人間の顔用のものだけです。
4.- 顔を見つけるためのオプション ディクショナリを設定します。Core Image に画像の向きを知らせることが重要です。これにより、ディテクタはどこで直立した顔を見つけることができるかを知ることができます。ほとんどの場合、画像自体から画像の向きを読み取り、その値をオプション ディクショナリに提供します。
5.- 検出器を使用して画像内の特徴を見つけます。提供する画像は CIImage オブジェクトである必要があります。Core Image は CIFeature オブジェクトの配列を返します。それぞれが画像内の顔を表します。
ここでは、またはCoreImage
その他のテクノロジーを開始するのに役立つオープン プロジェクトをいくつか紹介します。GPUImage
OpenCV
1 https://github.com/aaronabentheuer/AAFaceDetection (CIDetector - スウィフト)
2 https://github.com/BradLarson/GPUImage (Objective-C)
3 https://github.com/jeroentrappers/FaceDetectionPOC (Objective-C: iOS9 の非推奨コードがあります)
4 https://github.com/kairosinc/Kairos-SDK-iOS (Objective-C)
5 https://github.com/macmade/FaceDetect (OpenCV)
Unity + OpenCV for unity を使用してテストしています。次に、ofxfacetracker がジェスチャ トラッキングを行う方法を試します。ユニティで利用可能な単一のシェーダーを使用せずにフィルターを実行できます。アセット ストアには、必要なリアルタイム レンダリングに役立つ多くのプラグインもあります。