从udp接收帧对于人脸识别来说太慢
Receiving frame from udp is too slow for face recognition
我想从UDP端口接收帧,并使用opencv-cv::dnn框架在这些帧上运行人脸识别算法Tellodrone正在通过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 cap;
cap.open(0)
结果是完美的。我使用网络摄像头时没有延迟。
延迟的原因是什么?
对于UDP等不可靠的协议,如果不及时将数据带到用户空间,通信堆栈可以并且将丢弃数据,因此高度重视读取数据是很重要的,即使是以增加recv代码的复杂性为代价。
在这种情况下,可以使用一个单独的线程来提取数据报,并将缓冲区(无论如何,指向缓冲区的指针(排队,以处理代码,否则,将导致过度使用时间和丢弃数据报。
嘿,成功了!
相关文章:
- 从udp接收帧对于人脸识别来说太慢
- 每次b/c程序无法加载级联时,使用harr级联的人脸识别都会失败
- 人脸识别:每个人的所有图像都必须相同吗?
- 在C++中找不到人脸识别器
- 如何在opencv3中使用UMat来训练人脸识别
- 如何从视频中识别人脸识别中的未知人员
- OpenCV 错误 5772.人脸识别
- 我在哪里可以找到完整的img包,用于训练opencv人脸识别系统?
- 人脸识别器OpenCV
- 在使用和执行OpenCV的人脸识别时需要帮助
- 加载经过训练的人脸识别器模型
- 人脸识别器未在此范围内声明
- 训练人脸识别器需要花费大量时间
- 用于人脸识别的特征面算法.如何识别面部是否在任何类别中没有锥体
- 人脸识别开放式CV视觉工作室理解
- OpenCV 人脸识别返回太多人脸
- OpenCV人脸识别-工具
- 如何使用opencv计算人脸识别的百分比格式预测置信度
- 基于反向传播神经网络的人脸识别
- OpenCV人脸识别问题-它几乎总是匹配图像