我想製作一個基本的應用程序來顯示來自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轉換爲核心映像,然後您可以將其解決。
爲了獲得人臉檢測和運行,你需要添加一個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,因此可以完成。
祝你好運!