Я успешно работал с алгоритмом Хаара в OpenCV-2.1.0 (cvHaarDetectObjects) для обнаружения лиц на изображениях и видеокадрах из проекта Objective-C для iOS 4.2.Тем не менее, время обработки для видеокадров все еще занимает около 1-2 секунд на iPhone 4 при большинстве условий.Ниже приведен пример кода, который я использую:
NSString *path = [[NSBundle mainBundle] pathForResource:@"haarcascade_frontalface_alt" ofType:@"xml"];
CvHaarClassifierCascade* cascade =
(CvHaarClassifierCascade*)cvLoad([path cStringUsingEncoding:NSASCIIStringEncoding],
NULL, NULL, NULL);
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* faces = cvHaarDetectObjects(small_image, cascade, storage, 1.2, 0,
0 |CV_HAAR_DO_ROUGH_SEARCH |CV_HAAR_FIND_BIGGEST_OBJECT, cvSize(30, 30));
Я испробовал несколько методов оптимизации, в том числе интеллектуальное применение ROI и использование целых чисел, а не чисел с плавающей запятой.Тем не менее, эти изменения заняли огромное количество времени и принесли лишь незначительную пользу.
Мне было высказано предположение, что использование LBP может значительно сократить время обнаружения лица.Я экспериментировал и искал способы реализации LBP, но безрезультатно.В opencv есть каскадный файл (lbpcascade_frontalface.xml), но я не могу найти никаких предложений о том, как его использовать.
Буду признателен за любую помощь, включая другие методы оптимизации и ссылки Google, которые я мог пропустить при поиске.Точность обнаружения не является критической, если она достаточно эффективна.
Спасибо!