iOS的CoreImage已經(jīng)內(nèi)建了人臉檢測的接口,檢測準(zhǔn)確率一般,尤其是側(cè)臉,基本上就檢測不到。不過跟其他同類產(chǎn)品比較,也還算是不相上下吧。用起來很簡單:
[objc]view plaincopy
CIImage*?image?=?[CIImageimageWithCGImage:aImage.CGImage];
NSDictionary??*opts?=?[NSDictionarydictionaryWithObject:CIDetectorAccuracyHigh
forKey:CIDetectorAccuracy];
CIDetector*?detector?=?[CIDetectordetectorOfType:CIDetectorTypeFace
context:nil
options:opts];
//得到面部數(shù)據(jù)
NSArray*?features?=?[detectorfeaturesInImage:image];
最后的features中就是檢測到的全部臉部數(shù)據(jù),可以用如下方式計(jì)算位置:
[objc]view plaincopy
for(CIFaceFeature*f?in?features)
{
CGRect?aRect?=?f.bounds;
NSLog(@"%f,?%f,?%f,?%f",?aRect.origin.x,?aRect.origin.y,?aRect.size.width,?aRect.size.height);
//眼睛和嘴的位置
if(f.hasLeftEyePosition)?NSLog(@"Left?eye?%g?%g\n",?f.leftEyePosition.x,?f.leftEyePosition.y);
if(f.hasRightEyePosition)?NSLog(@"Right?eye?%g?%g\n",?f.rightEyePosition.x,?f.rightEyePosition.y);
if(f.hasMouthPosition)?NSLog(@"Mouth?%g?%g\n",?f.mouthPosition.x,?f.mouthPosition.y);
}
注意,檢測到的位置是臉部數(shù)據(jù)在圖片上的坐標(biāo)(在uiimage上的,不是uiimageview上的),如果需要在視圖上繪制范圍,則需要進(jìn)行坐標(biāo)轉(zhuǎn)換(y軸方向相反),并且也要注意圖片在視圖上的縮放等。