iSightからのビデオ入力を表示し、CIDetectorで顔検出を行うための基本的なアプリを作ろうとしています。iSightからのビデオのcidetector
どうすればいいですか? CIDetectorを使用するには、CIImageが必要です。どういうわけか、CIImageとして各フレームを取得し、その上で検出器を実行できますか?オリジナルの入力と、追加したいいくつかのエフェクトを表示します。
おかげで本質的には
iSightからのビデオ入力を表示し、CIDetectorで顔検出を行うための基本的なアプリを作ろうとしています。iSightからのビデオのcidetector
どうすればいいですか? CIDetectorを使用するには、CIImageが必要です。どういうわけか、CIImageとして各フレームを取得し、その上で検出器を実行できますか?オリジナルの入力と、追加したいいくつかのエフェクトを表示します。
おかげで本質的には
、あなたは検出を使用してこれらのフレームを処理するフレームとコアイメージをキャプチャするAVFoundationを組み合わせて使用します。ジャンプとして
オフポイントは、このチュートリアル以下で始めることができます。http://indieambitions.com/idevblogaday/raw-video-data-app-quick-dirty/
これはEAGLContext、AVCaptureSessionおよび設定の入力および出力のすべてを取得するための素晴らしいスタートです。また、CMSampleBufferRefをCore Imageに変換する方法を示しています。
顔検出稼働を取得するには、(この場合は@property (nonatomic, strong) CIDetector *faceDetector
で)CIDetectorを追加する必要があり、以下での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.
}
}
注:これはそれを取得する方法で、実行されているが、私を網膜iPad上でわずか15 fpsで走らせることしかできなかった。 WWDCビデオとそれに続くソースコードでは、CIDetectorを非常に効率的に使用しています。
幸運を祈る!