gpt4 book ai didi

opencv - 为什么我的 haar 分类器很慢?

转载 作者:太空宇宙 更新时间:2023-11-03 23:01:25 26 4
gpt4 key购买 nike

我训练了一个 HAAR 分类器来检测来自网络摄像头的实时视频馈送中的手。我使用了 621 个正片和 3712 个负片。

我使用 opencv_createsamples 为阳性生成 vec 文件:./opencv_createsamples -vec/Users/.../positivesvec.vec -info/Users/.../positiveDesc.txt -w 20 -h 30

然后,我使用 opencv_traincascade 来训练分类器:opencv_traincascade -data/Users/.../hand -vec/Users/.../positivesvec.vec -bg/Users/.../negativeDesc.txt -numPos 621 -numNeg 3712 -numStages 15 minHitRate 0.999 maxFalseAlarmRate 0.5 -w 20-h 30-模式全部

培训大约花了 30 个小时左右,我得到了一个 xml 文件。但是,当我使用该 xml 文件进行检测时,它确实非常慢(可能在 3-4 秒内 1 帧)。

我知道我的对象检测代码是正确的,因为它非常适合面部检测。这是我使用的:

trained_cascade_name = "/Users/.../cascade.xml";
if( !cascade.load( trained_cascade_name ) ){ qDebug()<<"Error loading cascade file!"; return; };
std::vector<Rect> hands;
Mat frame_gray; // Haar works on grayscale images
cvtColor(frame, frame_gray, CV_RGB2GRAY);
equalizeHist(frame_gray, frame_gray);

cascade.detectMultiScale( frame_gray, hands, 1.1, 3, 0|CV_HAAR_DO_CANNY_PRUNING|CV_HAAR_FIND_BIGGEST_OBJECT, cv::Size(30,30),cv::Size(100,100));
CvPoint topleft, bottomright;
for( int i = 0; i < hands.size(); i++ )
{
topleft.x=hands[i].x;
topleft.y=hands[i].y;
bottomright.x=hands[i].x+hands[i].width;
bottomright.y=hands[i].y+hands[i].height;
cv::rectangle(frame, topleft, bottomright, Scalar(255,0,255), 1, 8, 0);
}

最佳答案

对于不同的对象,每个阶段会生成不同数量的树/树桩,以拒绝 50% 的误报。

选择任何区域并对其进行分类。在此过程中,检查在较低阶段调用了多少棵树/树桩。

也许你的级联只是每个阶段有更多的树/树桩,所以它会花更多的时间来对一个区域进行分类。

这只是一个大胆的猜测......

关于opencv - 为什么我的 haar 分类器很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17146717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com