Используйте два XML-файла Haar Cascade с распознаванием и распознаванием EmguCV - PullRequest
0 голосов
/ 23 декабря 2018

С EmguCV я использую один файл haarcascade_face.xml:

face = new HaarCascade(xmlPath); 

Прикрепленный из каталога:

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "folder\\haarcascade_face.xml");

Этот способ обнаружения или распознавания работает для определенного содержимого лица в файле xml:

f = new HaarCascade(path); 

Точно так же, если я заменяю xml на другой, например haarcascade_hand.xml, обнаружение и распознавание применяются к другому объекту .:

Я не спрашиваю, как обнаруживать и распознавать различные объектыс одним процессом, как я делаю это с лицами:

MCvAvgComp[][] fd = gray.DetectHaarCascade(f, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); 

Мой вопрос, если есть способ, каким-то образом использовать как haarcascade_face.xml, так и haarcascade_hand.xml для обнаружения одного процесса и не распознавания вправильный смысл, но различие в том, какой конкретный .xml используется обнаруженным объектом.

Как я знаю, я не могу объединить два каскада Хаара в одном детекторе, но я могу запустить два детектора, чтобы обнаружить две разные вещи.Я полагаю, что итерация между путями к каждому файлу во время обработки должна быть абсолютно неправильной

1 Ответ

0 голосов
/ 24 декабря 2018

Как насчет последовательного обнаружения лица и руки на изображении.Требуется зарегистрировать 2 детектора Хаара и применять их на каждом изображении.

//register 2 Haar detectors
string face_path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "folder\\haarcascade_face.xml");
string hand_path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "folder\\haarcascade_hand.xml");

HaarCascade face = new HaarCascade(face_path); 
HaarCascade hand= new HaarCascade(hand_path); 

//for every image
MCvAvgComp[][] fd = gray.DetectHaarCascade(face, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20));
MCvAvgComp[][] hd = gray.DetectHaarCascade(hand, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20));
...