2011-12-08 14 views
0

我想製作一個基本的應用程序來顯示來自iSight的視頻輸入,並用CIDetector做臉部檢測。從iSight的視頻cidetector

我該怎麼做? 要使用CIDetector,我需要CIImage。我可以以某種方式獲取每幀作爲CIImage並運行探測器嗎?然後顯示原始輸入,再加上一些我想添加的效果。

感謝

回答

0

在本質上,使用AVFoundation的組合來捕獲幀和核心圖片來處理使用檢測這些幀。

作爲起跳點,你可以用下面這個教程開始: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 }]; 

一個說明,你可以根據性能改變的準確性。

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. 
     } 
    } 

注:

之後,當你採集數據,你可以通過captureOutput:DidOutputSampleBuffer:fromConnection:函數內把這個收集所有的面孔,這是一種方式來獲得它運行起來,但我只能在視網膜iPad上以15 fps的速度運行。在WWDC視頻和後續源代碼中,他們非常有效地使用CIDetector,因此可以完成。

祝你好運!