Qt 5.7 + Opencv 2.4.9 얼굴 인식 (5) 얼굴 인식

[주의] 본 박문 의 등급 은 OpenCV 초보 자 와 학부생 졸업 디자인 등 등급 에 적합 합 니 다.
원본 코드 의 다운로드 주소 와 원리 이론 부분 은 아래 로 연결 하 십시오.
http://blog.csdn.net/qq78442761/article/details/71157980
지난 절 은 모델 트 레이 닝 링크 입 니 다. 다음 과 같 습 니 다.
http://blog.csdn.net/qq78442761/article/details/71159508
얼굴 라 이브 러 리 에 이 사람의 데이터 가 없 을 때 식별 결과 캡 처:
Qt5.7+Opencv2.4.9人脸识别(五)人脸识别_第1张图片
이 사람의 데 이 터 를 추가 하면 실행 결과:
Qt5.7+Opencv2.4.9人脸识别(五)人脸识别_第2张图片
식별 과정 에서 사람 이 갑자기 도망 가 거나 사람의 얼굴 정밀도 가 크 지 않 을 때:
Qt5.7+Opencv2.4.9人脸识别(五)人脸识别_第3张图片
여기 서 제 가 이 식별 의 방향 을 설명 하 겠 습 니 다. 레이 블 > = 2 를 훈련 창고 에 있 는 사람 으로 레이 블 > = 2 일 때 + 1 을 식별 합 니 다. 그렇지 않 으 면 - 1 은 모두 20 번 을 식별 하고 그 값 이 12 일 때 식별 에 성공 한 다음 에 레이 블 에 대응 하 는 사람 을 읽 습 니 다.
코드 는 다음 과 같 습 니 다:
void MainWindow::on_action_FaceRecognition_triggered()
{
    int label=0;
    addpeople.file.getManLabel();
    double confidence=0.0;
    cv::VideoCapture cap(0);    //       
    if (!cap.isOpened())
    {
        QMessageBox::warning(this,tr("  "),tr("       "),QMessageBox::Ok);
        return;
    }
    cv::Mat frame;
    cv::Mat gray;

    cv::CascadeClassifier cascade;
    bool stop = false;
    //        ,            
    cascade.load("haarcascade_frontalface_alt.xml");

    cv::Ptr<:facerecognizer> modelPCA = cv::createEigenFaceRecognizer();
    modelPCA->load("MyFacePCAModel.xml");
    int sl=0;
    while (!stop)
    {
        cap >> frame;

        //             
        std::vector<:rect> faces(0);

        cv::cvtColor(frame, gray, CV_BGR2GRAY);
        //      ,       
        //resize(gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR);
        //                
        cv::equalizeHist(gray, gray);

        cascade.detectMultiScale(gray, faces,
            1.1, 2,cv::CASCADE_FIND_BIGGEST_OBJECT|cv::CASCADE_DO_ROUGH_SEARCH,
            cv::Size(30, 30));

        cv::Mat face;
        cv::Point text_lb;

        for (size_t i = 0; i < faces.size(); i++)
        {
            if (faces[i].height > 0 && faces[i].width > 0)
            {
                face = gray(faces[i]);
                text_lb = cv::Point(faces[i].x, faces[i].y);
                cv::rectangle(frame, faces[i], cv::Scalar(255, 0, 0), 1, 8, 0);
            }
        }

        cv::Mat face_test;

        int predictPCA = 0;
        if (face.rows >= 120)
        {
            cv::resize(face, face_test, cv::Size(92, 112));

        }
        //Mat face_test_gray;
        //cvtColor(face_test, face_test_gray, CV_BGR2GRAY);

        if (!face_test.empty())
        {
            //   -   
            int predictedLabel=-1;
            predictPCA = modelPCA->predict(face_test);
            modelPCA->predict(face_test,predictedLabel,confidence);
            qDebug()<20)
        {
            if(label<5)
                QMessageBox::information(this,tr("  "),tr("      "),QMessageBox::Ok);
            else
                QMessageBox::information(this,tr("  "),tr("      "),QMessageBox::Ok);
            return;
        }
        if(predictPCA!=-1&&predictPCA!=1&&confidence<3200)
            label++;
        if(predictPCA==1||predictPCA==0)
            label--;
        qDebug()<12)
        {
            //qDebug()<= 0)
            stop = true;
    }
}

이 얼굴 인식 이 끝 났 습 니 다. 다음 절 은 my sql, 얼굴 인식, tcp socket, xml, 3DES 암호 화 를 결합 하여 간단 한 얼굴 인식 시스템 을 만 드 는 것 입 니 다.
소스 코드 와 이론 부분 은 본 박문 의 시작 부분 에서 제공 된다.

좋은 웹페이지 즐겨찾기