Files
ai_sdk/app/main.cpp
2025-02-15 01:04:06 +08:00

112 lines
3.9 KiB
C++

#include <iostream>
#include <opencv2/opencv.hpp>
#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<FaceInfo> 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<FaceInfo> faces1;
std::vector<FaceInfo> 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<std::string> macs = DeviceInfo::GetInstance().GetMacAddress();
// for(auto& mac : macs) {
// std::cout << "mac: " << mac << std::endl;
// }
system("pause");
return 0;
}