#include #include #include "util/TimeCount.h" #include "CenterFaceMnn.h" #include "MobileFaceFeatureMnn.h" #include "FaceQuality.h" #include "util/DeviceInfo.h" #include "util/AuthModule.h" void test_face_detect(std::string img_path) { cv::Mat img = cv::imread(img_path); std::vector faces; { USE_TIME t(USE_TIME_US, "face_detect: "); CenterFaceMnn::GetInstance()->Detect(img, faces, 1); } for (auto& face : faces) { cv::Rect rect(face.x1, face.y1, FACE_BOX_WIDTH(face), FACE_BOX_HEIGHT(face)); int score = FaceQuality::GetInstance()->DetectQuality(img, rect); cv::rectangle(img, cv::Rect(face.x1, face.y1, FACE_BOX_WIDTH(face), FACE_BOX_HEIGHT(face)), cv::Scalar(0, 0, 255), 2); cv::putText(img, std::to_string(score), cv::Point(face.x1, face.y1), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255), 2); std::cout << "score: " << score << std::endl; } // cv::imshow("test", img); // cv::waitKey(0); } void test_face_compare(std::string img1, std::string img2) { cv::Mat img1_ = cv::imread(img1); cv::Mat img2_ = cv::imread(img2); std::vector faces1; std::vector faces2; CenterFaceMnn::GetInstance()->Detect(img1_, faces1, 1); CenterFaceMnn::GetInstance()->Detect(img2_, faces2, 1); if (faces1.size() == 0 || faces2.size() == 0) { std::cout << faces1.size() << " == " << faces2.size() << std::endl; return; } float feature1[512]; float feature2[512]; float score = 0.f; { USE_TIME t(USE_TIME_US, "GetFaceFeature img1 time: "); MobileFaceFeatureMnn::GetInstance()->GetFaceFeature(img1_, faces1[0].landmarks, feature1); } { USE_TIME t(USE_TIME_US, "GetFaceFeature img2 time: "); MobileFaceFeatureMnn::GetInstance()->GetFaceFeature(img2_, faces2[0].landmarks, feature2); } { USE_TIME t(USE_TIME_US, "DeepCamFaceFeatureCompare time: "); MobileFaceFeatureMnn::GetInstance()->MobileFaceFeatureCompare(feature1, feature2, score); } std::cout << "score: " << score << std::endl; for(auto& face : faces2) { cv::rectangle(img2_, cv::Rect(face.x1, face.y1, FACE_BOX_WIDTH(face), FACE_BOX_HEIGHT(face)), cv::Scalar(0, 0, 255), 2); } for(auto& face : faces1) { cv::rectangle(img1_, cv::Rect(face.x1, face.y1, FACE_BOX_WIDTH(face), FACE_BOX_HEIGHT(face)), cv::Scalar(0, 0, 255), 2); } cv::imshow("img1", img1_); cv::imshow("img2", img2_); cv::waitKey(0); } int32_t main(int32_t argc, char** argv) { // 打开摄像头 cv::VideoCapture cap(0); if (!cap.isOpened()) { std::cerr << "Failed to open camera." << std::endl; return 1; } // 循环读取摄像头图像并显 示 cv::Mat frame; while (true) { // 读取一帧图像 cap >> frame; if (frame.empty()) { std::cerr << "Failed to read frame." << std::endl; break; } // 显示图像 cv::imshow("Camera", frame); cv::waitKey(1); } // CenterFaceMnn::GetInstance(); // FaceQuality::GetInstance(); // MobileFaceFeatureMnn::GetInstance(); // test_face_detect("E:/1.jpg"); // std::string key_data; // int ret = AuthModule::GetInstance().DecodeKeyFile("E:\\ySSm8TAdi6Y0v72msa6E.key", key_data); // std::cout << "decode file: " << std::endl << key_data << std::endl; std::cout << "check key file: " << AuthModule::GetInstance().CheckKeyFile("E:\\ySSm8TAdi6Y0v72msa6E.key") << std::endl; // test_face_compare("F:/1.jpg", "E:\\6.jpg"); // std::cout << "board: " << DeviceInfo::GetInstance().GetBoardInfo() << std::endl; // std::vector macs = DeviceInfo::GetInstance().GetMacAddress(); // for(auto& mac : macs) { // std::cout << "mac: " << mac << std::endl; // } system("pause"); return 0; }