Ошибка загрузки OpenCV Cascade Classifier для iOS

В настоящее время я пытаюсь использовать каскадный классификатор OpenCV для обнаружения лиц в моем приложении для iOS. Проблема в том, что когда я иду, чтобы загрузить классификатор, он терпит неудачу, потому что путь к «haarcascade_frontalface_alt.xml» не является правильным.

Вот мой код:

cv::String face_cascade_name = "haarcascade_frontalface_alt.xml";

void detectFaces (cv :: Mat frame) {

cv::CascadeClassifier face_cascade;
if (face_cascade.load(face_cascade_name)){
printf("Load complete");
}else{
printf("Load error");
}
std::vector<cv::Rect> faces;

std::vector<cv::Mat> rgbChannels(3);
cv::split(frame, rgbChannels); // Making the frame gray scale
cv::Mat frame_gray = rgbChannels[2];

face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE|CV_HAAR_FIND_BIGGEST_OBJECT, cv::Size(150,150));

if(faces.size()> 0){
printf("TRUE");
}

}

Поскольку это проект для iOS, я не знаю, как найти путь к необходимому XML-файлу в фреймворке. Как правильно загрузить Cascade Classifier в проект iOS? Или как правильно включить правильное имя файла, чтобы оно правильно его видело?

Любая помощь будет оценена.

0

Решение

В iOS вам нужно найти путь к файлу внутри приложения. Что-то вроде этого:

// get main app bundle
NSBundle * appBundle = [NSBundle mainBundle];

// constant file name
NSString * cascadeName = @"haarcascade_frontalface_alt";
NSString * cascadeType = @"xml";

// get file path in bundle
NSString * cascadePathInBundle = [appBundle pathForResource: cascadeName ofType: cascadeType];

// convert NSString to std::string
std::string cascadePath([cascadePathInBundle UTF8String]);

// load cascade
if (face_cascade.load(cascadePath)){
printf("Load complete");
}else{
printf("Load error");
}
1

Другие решения

Других решений пока нет …