0

iSight からのビデオ入力を表示し、CIDetector で顔検出を行う基本的なアプリを作成しようとしています。

どうやってやるの?CIDetector を使用するには、CIImage が必要です。どうにかして各フレームを CIImage として取得し、その上で検出器を実行できますか? 次に、元の入力と、追加したいいくつかの効果を表示します。

ありがとう

4

1 に答える 1

1

基本的に、AVFoundationを組み合わせてフレームをキャプチャし、CoreImageを使用して検出を使用してそれらのフレームを処理します。

出発点として、次のチュートリアルに従うことから始めることができます:http: //indieambitions.com/idevblogaday/raw-video-data-app-quick-dirty/

これは、EAGLContext、AVCaptureSession、およびすべての入力と出力を設定するための優れたスタートです。また、CMSampleBufferRefをコアイメージに変換して、それをいじることができるようにする方法も示しています。

顔検出を起動して実行するには、CIDetector(この場合@property (nonatomic, strong) CIDetector *faceDetector)を追加して、viewDidLoadコードを次のように修正する必要があります。

[CIDetector detectorOfType:CIDetectorTypeFace context:nil options:@{ CIDetectorAccuracy : CIDetectorAccuracyLow }];

注意点として、パフォーマンスに基づいて精度を変更できます。

その後、データをキャプチャするときに、captureOutput:DidOutputSampleBuffer:fromConnection:関数内に次のように配置することで、すべての顔を収集できます。

    NSArray *featureArray = [self.faceDetector featuresInImage:image];

    for (CIFeature *faceFeature in featureArray) {
        if ([faceFeature.type isEqualToString:CIFeatureTypeFace]) {  //future proof!
            CGRect faceRect = faceFeature.bounds;
            //do whatever you want with faceRect here.
        }
    }

注:これは起動して実行する方法ですが、RetinaiPadではわずか15fpsでしか実行できませんでした。WWDCビデオとそれに続くソースコードでは、CIDetectorを非常に効率的に使用しているため、それを実行できます。

幸運を!

于 2012-07-16T15:41:04.680 に答える