将两个Haar Cascade xml文件与EmguCV检测和识别一起使用

时间:2018-12-23 17:04:16

标签: c# xml computer-vision emgucv haar-classifier

使用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。

据我所知,我不能在一个探测器中结合两个haar级联,但是我可以运行两个探测器来探测两个不同的事物。我猜在处理过程中每个文件路径之间的迭代应该是完全不正确的方法

任何建议指南或示例都将非常有用

1 个答案:

答案 0 :(得分:0)

如何依次在图像中进行脸部和手部检测。它要求您注册2个Haar探测器并将其应用于每个图像。

//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));