私は現在、rtsp ip camで顔認識を行う必要があるプロジェクトに取り組んでいます。問題なくrtspフィードを取得できましたが、顔認識を適用するとビデオフィードが遅くなり、大きな遅延が見られます。私はマルチスレッドを使用しても、よりうまくいっていますが、成功していません。私のコードはまだマルチスレッドの初心者です。私はrtspカメラストリームを使用するとopencvビデオキャプチャで遅れます
#include <iostream>
#include <thread>
#include "opencv2/opencv.hpp"
#include <vector>
using namespace std;
using namespace cv;
void detect(Mat img, String strCamera) {
string cascadeName1 = "C:\\ocv3.2\\Build\\install\\etc\\haarcascades\\haarcascade_frontalface_alt.xml";
CascadeClassifier facedetect;
bool loaded1 = facedetect.load(cascadeName1);
Mat original;
img.copyTo(original);
vector<Rect> human;
cvtColor(img, img, CV_BGR2GRAY);
equalizeHist(img, img);
facedetect.detectMultiScale(img, human, 1.1, 2, 0 | 1, Size(40, 80), Size(400, 480));
if (human.size() > 0)
{
for (int gg = 0; gg < human.size(); gg++)
{
rectangle(original, human[gg].tl(), human[gg].br(), Scalar(0, 0, 255), 2, 8, 0);
}
}
imshow("Detect " + strCamera, original);
int key6 = waitKey(40);
//End of the detect
}
void stream(String strCamera) {
VideoCapture cap(strCamera);
if (cap.isOpened()) {
while (true) {
Mat frame;
cap >> frame;
resize(frame, frame, Size(640, 480));
detect(frame, strCamera);
}
}
}
int main() {
thread cam1(stream, "rtsp://admin:[email protected]:554/live2.sdp?tcp");
thread cam2(stream, "rtsp://admin:[email protected]/live2.sdp?tcp");
cam1.join();
cam2.join();
return 0;
}