人臉識(shí)別有多種方式:
CoreImage、OpenCV、Vision、AVFoundation。
可參考大佬的簡書:
http://m.itdecent.cn/p/1eb1930562ca

1.jpg
//UIImageToMat
cv::Mat cvimage;
UIImageToMat(image, cvimage);
if (!cvimage.empty()) {
//轉(zhuǎn)換為灰度圖(降低復(fù)雜度,優(yōu)化計(jì)算)
cv::Mat gray;
cvtColor(cvimage,gray,CV_BGR2GRAY);
//直方圖均勻化(改善圖像的對(duì)比度和亮度)
cv::Mat equalizedImg;
equalizeHist(gray, equalizedImg);
//存放人臉rect的vector
std::vector<cv::Rect> faces;
//加載opencv官方 人臉檢測器
NSString *cascadePath = [[NSBundle mainBundle] pathForResource:@"haarcascade_frontalface_alt2" ofType:@"xml"];
faceDetector.load([cascadePath UTF8String]);
//人臉識(shí)別
faceDetector.detectMultiScale(gray, faces, 1.1, 3, 0, cv::Size(30,30));
if (faces.size() > 0) {
cout << "face:" << faces.size() << endl;
}
//遍歷face ,在cvimage上畫框
for (vector<cv::Rect>::const_iterator rect = faces.begin(); rect != faces.end(); rect++) {
rectangle(cvimage, cvPoint(rect->x, rect->y), cvPoint(rect->x + rect->width - 1, rect->y + rect->height - 1), cvScalar(255, 0, 255), 1, 1, 0);
}
UIImage *imageEND = MatToUIImage(cvimage);
imageView.image = imageEND;
}
如果需要交互,就需要自己去在imageView上加控件了:
for (int i = 0; i < faces.size(); i++) {
cv::Rect rect = faces[i];
int x = rect.x;
int y = rect.y;
int width = rect.width;
int height = rect.height;
UIView *faceView = [[UIView alloc] initWithFrame:CGRectMake(x, y, width, height)];
faceView.backgroundColor = [UIColor clearColor];
faceView.layer.borderColor = [UIColor orangeColor].CGColor;
faceView.layer.borderWidth = 1;
[imageView addSubview:faceView];
NSLog(@"face_%d: {%d, %d, %d, %d}",i,x,y,width,height);
}
效果圖:

WechatIMG26.jpeg