视频播放速度太慢,无法打开简历

时间:2019-06-11 16:49:51

标签: opencv machine-learning computer-vision

我尝试创建一个程序来识别和播放视频中的性别。 问题在于视频播放确实很慢。 当性别网络未运行时,视频播放很快。 有什么想法吗?

string faceProto =“ opencv_face_detector.pbtxt”;     字符串faceModel =“ opencv_face_detector_uint8.pb”;

string genderProto = "gender_deploy.prototxt";
string genderModel = "gender_net.caffemodel";

Scalar MODEL_MEAN_VALUES = Scalar(78.4263377603, 87.7689143744, 114.895847746);

vector<string> genderList = { "Man", "Woman" };

// Load Network

Net genderNet = readNet(genderModel, genderProto);
Net faceNet = readNet(faceModel, faceProto);
// Try opening camera
//cv::VideoCapture camera(0);
cv::VideoCapture camera("video.mp4");
if (!camera.isOpened()) {
    fprintf(stderr, "Error getting camera...\n");
    exit(1);
}

cv::namedWindow(WINDOW_NAME, cv::WINDOW_KEEPRATIO | cv::WINDOW_AUTOSIZE);

VideoFaceDetector detector(CASCADE_FILE, camera);
cv::Mat frame;
double fps = 0, time_per_frame;
while (true)
{
    auto start = cv::getCPUTickCount();
    detector >> frame;
    auto end = cv::getCPUTickCount();

    time_per_frame = (end - start) / cv::getTickFrequency();
    fps = (15 * fps + (1 / time_per_frame)) / 16;

    printf("Time per frame: %3.3f\tFPS: %3.3f\n", time_per_frame, fps);

    if (detector.isFaceFound())
    {
        cv::rectangle(frame, detector.face(), cv::Scalar(255, 0, 0));

    }


    Mat face = frame; // take the ROI of box on the frame
    Mat blob;
    blob = blobFromImage(face, 1, Size(227, 227), MODEL_MEAN_VALUES, false); blob = blobFromImage(face, 1, Size(227, 227), MODEL_MEAN_VALUES, false);

    genderNet.setInput(blob);

    // string gender_preds;
    vector<float> genderPreds = genderNet.forward();

    // printing gender here
    // find max element index
    // distance function does the argmax() work in C++
    int max_index_gender = std::distance(genderPreds.begin(), max_element(genderPreds.begin(), genderPreds.end()));
    string gender = genderList[max_index_gender];

    string label = gender;

    cv::putText(frame, label, Point(100, 200), cv::FONT_HERSHEY_SIMPLEX, 2, Scalar(0, 255, 255), 2, cv::LINE_AA);
    cv::imshow(WINDOW_NAME, frame);

0 个答案:

没有答案