[英]IOS IT is possible CvPhotoCamera [OpenCV] we can detect face
在openCV中,我必须检测面部和眼睛。 但是我的代码不起作用,这是我的代码,请检查,这不起作用。 但是我在CvVideoCamera中尝试的相同代码,然后我的代码可以正常工作。 眼睛唯一的问题之一是无法发现。
@property (nonatomic, strong) CvPhotoCamera* photoCamera;
cv::CascadeClassifier faceCascade
- (void)viewDidLoad {
[super viewDidLoad];
NSString *pathToFaceCascade = [[NSBundle mainBundle] pathForResource:@"haarcascade_frontalface_alt" ofType:@"xml"];
if (pathToFaceCascade == nil) {
[[[UIAlertView alloc] initWithTitle:@"Error" message:@"Cannot find path for resource haarcascade_frontalface_alt.xml" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] show];
return;
}
if (!faceCascade.load([pathToFaceCascade UTF8String])) {
[[[UIAlertView alloc] initWithTitle:@"Error" message:@"Cannot load haarcascade_frontalface_alt.xml" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] show];
return;
}
photoCamera = [[CvPhotoCamera alloc]
initWithParentView:imageView];
photoCamera.delegate = self;
photoCamera.defaultAVCaptureDevicePosition =
AVCaptureDevicePositionFront;
photoCamera.defaultAVCaptureSessionPreset =
AVCaptureSessionPresetPhoto;
photoCamera.defaultAVCaptureVideoOrientation =
AVCaptureVideoOrientationPortrait;
[photoCamera start];
[self.view addSubview:imageView];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)photoCamera:(CvPhotoCamera*)camera
capturedImage:(UIImage *)image;
{
[camera stop];
imageView.image = image;
// [takePhotoButton setEnabled:NO];
// [startCaptureButton setEnabled:YES];
}
-(IBAction)takePhotoButtonPressed:(id)sender;
{
[photoCamera takePicture];
}
#ifdef __cplusplus
//...Working Good
-(void)processImage:(Mat &)image
{
Mat bwImage;
cvtColor(image, bwImage, CV_BGRA2GRAY);
equalizeHist(bwImage, bwImage);
std::vector<cv::Rect> faces;
faceCascade.detectMultiScale(bwImage, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, cv::Size(30, 30));
char buffer[64];
static int number = 0;
sprintf(buffer, "(%d, %d) - Detected: %ld %d", bwImage.cols, bwImage.rows, faces.size(), number++);
String str(buffer);
putText(image, str, cvPoint(20, 20), 0, 0.5, cvScalar(255, 255, 255, 255));
for (int i = 0; i < faces.size(); i++) {
cv::rectangle(image, cvPoint(faces[i].x, faces[i].y), cvPoint(faces[i].x + faces[i].width, faces[i].y + faces[i].height), cvScalar(0, 255, 255, 255), 2.0);
}
}
据我所知,在OpenCV中没有面部标志检测。 您可以使用dlib 。 这是一个非常有用的项目: https : //github.com/zweigraf/face-landmarking-ios
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.