std::vector<SeetaFaceInfo> faces = engine.DetectFaces( image_data );
printf("faces:%d",faces.size());
if(faces.size() > 0){
printf("检测到人脸\n");
for( SeetaFaceInfo &face : faces )
{
// Query top 1
printf("face_height:%d\n",face.pos.height);
printf("face_width:%d\n",face.pos.width);
printf("face_X:%d\n",face.pos.x);
printf("face_Y:%d\n",face.pos.y);
cv::rectangle(cvImage, cvRect(face.pos.x, face.pos.y, face.pos.width, face.pos.height), cv::Scalar(220, 20, 60, 10), 3);
CGImageRef sourceImageRef = [image CGImage];
CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, CGRectMake(face.pos.x, face.pos.y, face.pos.width, face.pos.height));
UIImage *newImage = [UIImage imageWithCGImage:newImageRef scale:1 orientation:UIImageOrientationRight];
dispatch_async(dispatch_get_main_queue(), ^{
weakSelf.imageShow.image = newImage;
});
保存头像数据
[weakSelf loadImageFinished:newImage];
CGImageRelease(sourceImageRef);
// CGImageRelease(newImageRef);
}
dispatch_async(dispatch_get_main_queue(), ^{
UIImage * endImage = MatToUIImage(cvImage);
endImage = [UIImage imageWithCGImage:endImage.CGImage
scale:endImage.scale
orientation:UIImageOrientationRight];
label.text = [NSString stringWithFormat:@"检测到%ld次",count];
});
count++;
printf("检测到人次:%d",count);
cvReleaseImage(&img);
}else{
printf("没有检
1.从opencv官网下载对应的动态库(也可以自己编译);
2.从git..下载seetaFace2的包;
3.导入数据, 参考seetaFace2内部demo;
4. 需要在oc代码中导入c++的内容, 注意修改部分配置;