Я хочу получать кадры с порта UDP и запускать на них алгоритмы распознавания лиц с помощью opencv cv :: dnn framework. Tello дрон отправляет кадры по протоколу UDP.
/* load dnn model */
cv::dnn::Net net = cv::dnn::readNetFromCaffe("dnnmodel/deploy.prototxt.txt","dnnmodel/res10_300x300_ssd_iter_140000.caffemodel");
cv::VideoCapture cap("udp://@0.0.0.0:11111?overrun_nonfatal=1&fifo_size=50000000");
cv::Mat frame;
float confidenceThreshold = 0.2;
while(true)
{
if(!cap.read(frame))
break;
cv::Mat inputBlob = cv::dnn::blobFromImage(frame, 1, cv::Size(300, 300), cv::Scalar(104.0, 177.0, 123.0), false, false);
net.setInput(inputBlob, "data");
cv::Mat detection = net.forward("detection_out");
cv::Mat detectionMat(detection.size[2], detection.size[3], CV_32F, detection.ptr<float>());
cv::imshow("window", frame);
char key = cv::waitKey(10);
if (key == 27) // ESC
break;
}
Время отклика камеры очень велико, примерно 10-20 секунд. Когда я перемещаю камеру, я получаю новый кадр через 20 секунд.
Но если бы я использовал свою собственную веб-камеру ноутбука вместо порта udp в VideoCapture с этим вызовом;
VideoCapture cap;
cap.open(0)
результат будет идеальный. Когда я использую веб-камеру, задержки нет.
В чем причина этой задержки?