【SeetaFace】人脸识别
来源:互联网 发布:阿里云ecs无法发邮件 编辑:程序博客网 时间:2024/06/09 15:35
void TEST(FaceRecognizerTest, CropFace) {FaceIdentification face_recognizer(".\\model\\seeta_fr_v1.0.bin");/* data initialize */std::ifstream ifs;std::string img_name;FacialLandmark pt5[5];ifs.open(".\\data\\test_file_list.txt", std::ifstream::in);clock_t start, count = 0;int img_num = 0;for (int i = 1; i <= 50; i++){char ptr[100];sprintf_s(ptr, ".\\data\\images\\crop\\NF_2000%02d.jpg", i);cv::Mat src_img = imread(ptr, CV_LOAD_IMAGE_GRAYSCALE);cv::imshow("Crop Face src", src_img);cv::waitKey(0);cv::destroyWindow("Crop Face src");EXPECT_NE(src_img.data, nullptr) << "Load image error!";// ImageData store data of an image without memory alignment.ImageData src_img_data(src_img.cols, src_img.rows, src_img.channels());src_img_data.data = src_img.data;// 5 located landmark points (left eye, right eye, nose, left and right // corner of mouse).for (int i = 0; i < 5; ++i) {ifs >> pt5[i].x >> pt5[i].y;}// Create a image to store crop face.cv::Mat dst_img(face_recognizer.crop_height(),face_recognizer.crop_width(),CV_8UC(face_recognizer.crop_channels()));ImageData dst_img_data(dst_img.cols, dst_img.rows, dst_img.channels());dst_img_data.data = dst_img.data;/* Crop Face */start = clock();face_recognizer.CropFace(src_img_data, pt5, dst_img_data);count += clock() - start;cv::imshow("Crop Face dst", dst_img);cv::waitKey(0);cv::destroyWindow("Crop Face dst");}std::cout << "Test successful! \nAverage crop face time: " << 1000.0 * count / CLOCKS_PER_SEC / img_num << "ms" << std::endl;}
// SeetaFacesTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream> #include <cstdint>#include <fstream>#include <string>#include <opencv2/opencv.hpp>#include "face_identification.h"#include "face_detection.h"#include <ctime>//#pragma comment(lib, "SeetaTest.lib")using namespace cv;using namespace std;using namespace seeta;#define TEST(major, minor) major##_##minor##_Tester()#define EXPECT_NE(a, b) if ((a) == (b)) std::cout << "ERROR: "#define EXPECT_EQ(a, b) if ((a) != (b)) std::cout << "ERROR: "void TEST(FaceRecognizerTest, CropFace) {FaceIdentification face_recognizer(".\\model\\seeta_fr_v1.0.bin");std::string test_dir = ".\\data\\";/* data initialize */std::ifstream ifs;std::string img_name;FacialLandmark pt5[5];ifs.open(".\\data\\test_file_list.txt", std::ifstream::in);clock_t start, count = 0;int img_num = 0;while (ifs >> img_name) {img_num++;// read imagestd::string imgpath = test_dir + img_name;cv::Mat src_img = cv::imread(imgpath, 1);EXPECT_NE(src_img.data, nullptr) << "Load image error!";// ImageData store data of an image without memory alignment.ImageData src_img_data(src_img.cols, src_img.rows, src_img.channels());src_img_data.data = src_img.data;// 5 located landmark points (left eye, right eye, nose, left and right // corner of mouse).for (int i = 0; i < 5; ++i) {ifs >> pt5[i].x >> pt5[i].y;}// Create a image to store crop face.cv::Mat dst_img(face_recognizer.crop_height(), face_recognizer.crop_width(), CV_8UC(face_recognizer.crop_channels()));ImageData dst_img_data(dst_img.cols, dst_img.rows, dst_img.channels());dst_img_data.data = dst_img.data;/* Crop Face */start = clock();uint8_t rst_cropface = face_recognizer.CropFace(src_img_data, pt5, dst_img_data);cout << "CropFace : " << rst_cropface << endl;count += clock() - start;// Show crop face/*cv::imshow("Crop Face", dst_img);cv::waitKey(0);cv::destroyWindow("Crop Face");*/}ifs.close();std::cout << "Test successful! \nAverage crop face time: " << 1000.0 * count / CLOCKS_PER_SEC / img_num << "ms" << std::endl;}void TEST(FaceRecognizerTest, ExtractFeature) {FaceIdentification face_recognizer(".\\model\\seeta_fr_v1.0.bin");std::string test_dir = ".\\data\\";int feat_size = face_recognizer.feature_size();EXPECT_EQ(feat_size, 2048);FILE* feat_file = NULL;// Load features extract from caffefopen_s(&feat_file, ".\\data\\feats.dat", "rb");int n, c, h, w;EXPECT_EQ(fread(&n, sizeof(int), 1, feat_file), (unsigned int)1);EXPECT_EQ(fread(&c, sizeof(int), 1, feat_file), (unsigned int)1);EXPECT_EQ(fread(&h, sizeof(int), 1, feat_file), (unsigned int)1);EXPECT_EQ(fread(&w, sizeof(int), 1, feat_file), (unsigned int)1);float* feat_caffe = new float[n * c * h * w];float* feat_sdk = new float[n * c * h * w];EXPECT_EQ(fread(feat_caffe, sizeof(float), n * c * h * w, feat_file), n * c * h * w);EXPECT_EQ(feat_size, c * h * w);int cnt = 0;/* Data initialize */std::ifstream ifs(".\\data\\crop_file_list.txt");std::string img_name;clock_t start, count = 0;int img_num = 0, lb;double average_sim = 0.0;while (ifs >> img_name >> lb) {// read imagestd::string imgpath = test_dir + img_name;cv::Mat src_img = cv::imread(imgpath, 1);EXPECT_NE(src_img.data, nullptr) << "Load image error!";cv::resize(src_img, src_img, cv::Size(face_recognizer.crop_height(), face_recognizer.crop_width()));// ImageData store data of an image without memory alignment.ImageData src_img_data(src_img.cols, src_img.rows, src_img.channels());src_img_data.data = src_img.data;/* Extract feature */start = clock();face_recognizer.ExtractFeature(src_img_data, feat_sdk + img_num * feat_size);count += clock() - start;/* Caculate similarity*/float* feat1 = feat_caffe + img_num * feat_size;float* feat2 = feat_sdk + img_num * feat_size;float sim = face_recognizer.CalcSimilarity(feat1, feat2);std::cout << "CalcSimilarity : " << sim << endl;average_sim += sim;img_num++;}ifs.close();average_sim /= img_num;if (1.0 - average_sim > 0.01) {std::cout << "average similarity: " << average_sim << std::endl;}else {std::cout << "Test successful!\nAverage extract feature time: "<< 1000.0 * count / CLOCKS_PER_SEC / img_num << "ms" << std::endl;}delete[]feat_caffe;delete[]feat_sdk;}void TEST(FaceRecognizerTest, ExtractFeatureWithCrop) {FaceIdentification face_recognizer(".\\Model\\seeta_fr_v1.0.bin");std::string test_dir = ".\\data\\";int feat_size = face_recognizer.feature_size();EXPECT_EQ(feat_size, 2048);FILE* feat_file = NULL;// Load features extract from caffefopen_s(&feat_file, ".\\data\\feats.dat", "rb");int n, c, h, w;EXPECT_EQ(fread(&n, sizeof(int), 1, feat_file), (unsigned int)1);EXPECT_EQ(fread(&c, sizeof(int), 1, feat_file), (unsigned int)1);EXPECT_EQ(fread(&h, sizeof(int), 1, feat_file), (unsigned int)1);EXPECT_EQ(fread(&w, sizeof(int), 1, feat_file), (unsigned int)1);float* feat_caffe = new float[n * c * h * w];float* feat_sdk = new float[n * c * h * w];EXPECT_EQ(fread(feat_caffe, sizeof(float), n * c * h * w, feat_file),n * c * h * w);EXPECT_EQ(feat_size, c * h * w);int cnt = 0;/* Data initialize */std::ifstream ifs(".\\data\\test_file_list.txt");std::string img_name;FacialLandmark pt5[5];clock_t start, count = 0;int img_num = 0;double average_sim = 0.0;while (ifs >> img_name) {// read imagestd::string imgpath = test_dir + img_name;cv::Mat src_img = cv::imread(imgpath, 1);EXPECT_NE(src_img.data, nullptr) << "Load image error!";// ImageData store data of an image without memory alignment.ImageData src_img_data(src_img.cols, src_img.rows, src_img.channels());src_img_data.data = src_img.data;// 5 located landmark points (left eye, right eye, nose, left and right // corner of mouse).for (int i = 0; i < 5; ++i) {ifs >> pt5[i].x >> pt5[i].y;}/* Extract feature: ExtractFeatureWithCrop */start = clock();face_recognizer.ExtractFeatureWithCrop(src_img_data, pt5,feat_sdk + img_num * feat_size);count += clock() - start;/* Caculate similarity*/float* feat1 = feat_caffe + img_num * feat_size;float* feat2 = feat_sdk + img_num * feat_size;float sim = face_recognizer.CalcSimilarity(feat1, feat2);average_sim += sim;std::cout << "CalcSimilarity : " << sim << std::endl;img_num++;}ifs.close();average_sim /= img_num;if (1.0 - average_sim > 0.02) {std::cout << "average similarity: " << average_sim << std::endl;}else {std::cout << "Test successful!\nAverage extract feature time: "<< 1000.0 * count / CLOCKS_PER_SEC / img_num << "ms" << std::endl;}delete[]feat_caffe;delete[]feat_sdk;}int main(){//TEST(FaceRecognizerTest, CropFace);//TEST(FaceRecognizerTest, ExtractFeature);//TEST(FaceRecognizerTest, ExtractFeatureWithCrop);/*const char* img_path = "12.jpg";//seeta::FaceDetection detector(".\\Model\\seeta_fd_frontal_v1.0.bin");seeta::FaceDetection detector(".\\Model\\seeta_fd_frontal_v1.0.bin");detector.SetMinFaceSize(100);detector.SetScoreThresh(2.f);detector.SetImagePyramidScaleFactor(1.0f);detector.SetWindowStep(4, 4);cv::Mat img = cv::imread(img_path, cv::IMREAD_UNCHANGED);cv::Mat img_gray;if (img.channels() != 1)cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);elseimg_gray = img;seeta::ImageData img_data;img_data.data = img_gray.data;img_data.width = img_gray.cols;img_data.height = img_gray.rows;img_data.num_channels = 1;long t0 = cv::getTickCount();std::vector<seeta::FaceInfo> faces = detector.Detect(img_data);long t1 = cv::getTickCount();double secs = (t1 - t0) / cv::getTickFrequency();cv::Rect face_rect;int32_t num_face = static_cast<int32_t>(faces.size());for (int32_t i = 0; i < num_face; i++) {face_rect.x = faces[i].bbox.x;face_rect.y = faces[i].bbox.y;face_rect.width = faces[i].bbox.width;face_rect.height = faces[i].bbox.height;cv::rectangle(img, face_rect, CV_RGB(0, 0, 255), 10, 8, 0);}cout << "renlian number:" << num_face << endl;Size size(img_data.width/5 , img_data.height/5 );Mat dst; cv:resize(img, dst, size);cv::namedWindow("Test", cv::WINDOW_AUTOSIZE);cv::imshow("Test", dst);cv::waitKey(0);cv::destroyAllWindows();*/return 0;}
0 0
- 【SeetaFace】人脸识别
- SeetaFace人脸识别系统
- 测试seetaface人脸识别引擎
- 【SeetaFace】中科院山世光老师开源的Seetaface人脸识别引擎测试
- SeetaFace编译使用<中科院人脸识别SDK>
- seetaface 人脸识别 android 优化源码开放
- 【计算机视觉】SeetaFace Engine开源C++人脸识别引擎
- SeetaFace 开源的人脸识别代码
- 脸部识别SeetaFace介绍
- SeetaFace开源人脸识别引擎
- SeetaFace开源人脸识别引擎
- SeetaFace开源人脸识别引擎
- SeetaFace人脸检测体验
- seetaface 人脸检测库
- seetaface人脸识别引擎的windows java 实现,可用于搭建人脸识别java web服务器
- c#调用c++程序(DLL方法,以及opencv,运行开源的人脸识别seetaface)
- SeetaFace开源人脸识别引擎介绍
- 开源人脸识别seetaface入门教程(一)
- Activity : 跳转与传值
- Xcode8 及iOS10适配问题汇总
- About me
- 创建 Qsys Component 时出错:There are multiple signals with role "xxxx".
- javaWeb入门<1>Servlet+Jsp+JavaBean实现MVC开发模式登陆注册实例详解
- 【SeetaFace】人脸识别
- Servlet中向客户端添加Cookie信息
- 实时的分布式搜索和分析引擎——Elasticsearch
- IO初步,流
- 仿 QQ 底部 Tab 切换带数字提示的 RadioButton,支持自定义提示数字背景颜色、字体大小、字体颜色。后续将持续更新......
- 孤独,是年青人最好的修行
- libevent学习笔记【使用篇】——6a. Bufferevents高级话题
- Run command
- 在使用WordPress建立商业网站时你需要了解的?