Я столкнулся с проблемой производительности в BeagleBone Black + Opencv Counter. Я использую BackgroundSubtractorMOG2 для вычитания фона и обнаружения контуров. Вот такой код:Счетчик объектов в Opencv + BeagleBone Black Performance Issue
cv::Mat frame;
cv::Mat resizedFrame;
cv::Mat back;
cv::Mat fore;
bool objStart = false;
bool objEnd = false;
bool start = true;
cv::Point startLine(0, 50); // this is the start of the line where I take decision
cv::Point endLine(1000, 50); // this is the end of the line
cv::VideoCapture cap("/home/moonzai/Videos/test.avi");
cv::BackgroundSubtractorMOG2 bg;
bg.set("nmixtures", 3);
vector<vector<cv::Point> > contours;
for(;;)
{
cap >> resizedFrame;
cv::resize(resizedFrame, frame, cv::Size(320, 240), 0, 0, cv::INTER_LINEAR); // I wrote this line when there were only 1 frame per second processing, I resized the frame to 320 X 240
if(start)
{
bg.operator()(frame,fore);
bg.getBackgroundImage(back);
cv::erode(fore,fore,cv::Mat());
cv::dilate(fore,fore,cv::Mat());
cv::findContours(fore,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
vector<cv::Rect> boundRect(contours.size());
cv::Rect mainRect;
for(unsigned int i = 0; i < contours.size(); i++)
{
boundRect[i] = boundingRect(cv::Mat(contours[i]));
if(mainRect.area() < boundRect[i].area())
{
mainRect = boundRect[i];
}
}
if(LineIntersectsRect(startLine, endLine, mainRect)) // this function actually returns boolean, if rectangle is touching the line
{
objStart = true;
}
else
{
if(objStart)
{
objEnd = true;
}
}
if(objEnd && objStart)
{
counter ++;
cout << "Object: " << counter << endl;
objEnd = false;
objStart = false;
}
}
usleep(1000 * 33);
}
Этот код отлично работает на моем настольном компьютере. но когда я запускаю этот код на BeagleBone Black с установленным Ubuntu 13.04 linux, этот дистрибутив вообще не имеет графического интерфейса, я работаю на терминале, он дает мне 80% ресурсов процессора с 2 кадрами в секунду обработки. Использование памяти очень низкое, около 8%, я не получаю желаемую производительность. поэтому, пожалуйста, направляйте меня, если я делаю что-то неправильно.
Цель моего вопроса: есть ли какая-либо проблема с кодировкой или, BackgroundSubtractorMOG2 - ресурс, голодный, поэтому я должен использовать другой способ. Если есть другой способ, то подскажите мне, что это такое?
заранее спасибо ...
Что вы подразумеваете под сокращением времени сна? – moonzai
Уменьшить значение здесь: 'usleep (1000 * 33);' – cyriel
Да, я уменьшаю значение, он немного увеличил производительность, но не желателен. является BackgroundSubtractorMOG2 является ресурсом, голодным? – moonzai