SeetaFaceDetection识别人脸

#pragma warning(disable: 4819)

#include <seeta/FaceEngine.h>

#include <seeta/Struct_cv.h>
#include <seeta/Struct.h> #include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <array>
#include <map>
#include <iostream> #include <qdebug.h>
#include <QDateTime> int main()
{
seeta::ModelSetting::Device device = seeta::ModelSetting::CPU;
int id = ;
seeta::ModelSetting FD_model("E:\\SeetaFaceEngine2\\SeetaFace2_install\\model\\fd_2_00.dat", device, id);
seeta::ModelSetting PD_model("E:\\SeetaFaceEngine2\\SeetaFace2_install\\model\\pd_2_00_pts5.dat", device, id);
seeta::ModelSetting FR_model("E:\\SeetaFaceEngine2\\SeetaFace2_install\\model\\fr_2_10.dat", device, id);
seeta::FaceEngine engine(FD_model, PD_model, FR_model, , ); // recognization threshold
float threshold = 0.5f; //set face detector's min face size
engine.FD.set(seeta::FaceDetector::PROPERTY_MIN_FACE_SIZE, ); //std::vector<std::string> GalleryImageFilename = { "E:\\SeetaFaceEngine2\\SeetaFace2_install\\data\\5.jpg" };
std::vector<std::string> GalleryImageFilename = { "E:\\SeetaFaceEngine2\\SeetaFace2_install\\data\\1.jpg","E:\\SeetaFaceEngine2\\SeetaFace2_install\\data\\2.jpg","E:\\SeetaFaceEngine2\\SeetaFace2_install\\data\\3.jpg","E:\\SeetaFaceEngine2\\SeetaFace2_install\\data\\4.jpg","E:\\SeetaFaceEngine2\\SeetaFace2_install\\data\\5.jpg","E:\\SeetaFaceEngine2\\SeetaFace2_install\\data\\6.jpg","E:\\SeetaFaceEngine2\\SeetaFace2_install\\data\\7.jpg" }; std::vector<int64_t> GalleryIndex(GalleryImageFilename.size());
for (size_t i = ; i < GalleryImageFilename.size(); ++i)
{
//register face into facedatabase
std::string &filename = GalleryImageFilename[i];
int64_t &index = GalleryIndex[i];
std::cerr << "Registering... " << filename << std::endl;
seeta::cv::ImageData image = cv::imread(filename);
auto id = engine.Register(image);
index = id;
std::cerr << "Registered id = " << id << std::endl;
}
std::map<int64_t, std::string> GalleryIndexMap;
for (size_t i = ; i < GalleryIndex.size(); ++i)
{
// save index and name pair
if (GalleryIndex[i] < ) continue;
GalleryIndexMap.insert(std::make_pair(GalleryIndex[i], GalleryImageFilename[i]));
} std::cout << "----open camera----" << std::endl;
// Open default USB camera
cv::VideoCapture capture;
capture.open(); cv::Mat frame; int width1 = ;
int height1 = ;
while (capture.isOpened())
{
capture >> frame;
if (frame.empty()) continue; width1 = frame.cols;
height1 = frame.rows;
cv::resize(frame, frame, cv::Size(width1 / , height1 / ));
seeta::cv::ImageData image = frame; // Detect all faces
std::vector<SeetaFaceInfo> faces = engine.DetectFaces(image); for (SeetaFaceInfo &face : faces)
{
// Query top 1
int64_t index = -;
float similarity = ; qDebug() << "-----------------------------------";
//auto points = engine.DetectPoints(image, face);
std::vector<SeetaPointF> points = engine.DetectPoints(image, face);
std::vector<SeetaPointF>::iterator iter_1;
for (iter_1 = points.begin(); iter_1 != points.end();++iter_1)
{
SeetaPointF sp1 = *iter_1;
qDebug() << "x:" << sp1.x << " y:" << sp1.y;
}
qDebug() << "-----------------------------------"; auto queried = engine.QueryTop(image, points.data(), , &index, &similarity); cv::rectangle(frame, cv::Rect(face.pos.x, face.pos.y, face.pos.width, face.pos.height), CV_RGB(, , ), );
for (int i = ; i < ; ++i)
{
auto &point = points[i];
cv::circle(frame, cv::Point(int(point.x), int(point.y)), , CV_RGB(, , ), -);
} // no face queried from database
if (queried < ) continue; std::cout << "similarity:" << similarity << std::endl;
// similarity greater than threshold, means recognized
if (similarity > threshold)
{
std::cout << "person:" << GalleryIndexMap[index] << std::endl;
cv::putText(frame, GalleryIndexMap[index], cv::Point(face.pos.x, face.pos.y - ), , , CV_RGB(, , )); /////////
QDateTime qdt1 = QDateTime::currentDateTime();
QString timeStr = qdt1.toString("yyyyMMddhhmmsszzz");
QString picStr = timeStr.append(".jpg"); cv::imwrite(picStr.toStdString(), frame);
}
} cv::imshow("Frame", frame); auto key = cv::waitKey();
if (key == )
{
break;
}
}
}

最新文章

  1. 17、ASP.NET MVC入门到精通——Spring.net入门
  2. Java转json
  3. 机器学习中的算法——决策树模型组合之随机森林与GBDT
  4. javascript 面向对象编程指南 的一些题目
  5. ubuntu下配置安装PYQT4
  6. java.util.TimeZone 新加方法 getTimeZone(ZoneId zoneId) 导致的问题
  7. HTTP协议强化理解
  8. iOS 使用UIWebView把oc代码和javascript相关联
  9. [Algorithms(Princeton)] Week1 - Percolation
  10. CodeBlocks集成cppcheck
  11. 【转】Github入门教程
  12. 使用text-overflow:ellipsis对溢出文本显示省略号有两个好处
  13. 如何判断Fragment是否对用户可见
  14. Linux企业级开发技术(6)——libevent企业级开发之内存管理
  15. systemd-journald详解
  16. My97DatePicker.js 之无效日期设置
  17. wp8使用Beetle.NetPackage实现基于TCP通讯的订单查询
  18. 使用python调用wps v9转换office文件到pdf
  19. MacOs -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
  20. HashSet TreeSet

热门文章

  1. Spring -09 -在Spring工程 中加载 properties 文件 -为某个属性添加注解赋初值
  2. 织梦CMS5.7主动推送二次开发
  3. Linux 系统 Composer 安装
  4. href = &#39;&#39; 表示刷新当前页面
  5. Acwing P274 移动服务 题解
  6. 2019/7/22----tomacat配置web页面访问路径
  7. C位运算符的使用
  8. (31)Vue安装
  9. setitimer()函数
  10. UOJ#468. 【ZJOI2019】Minimax搜索 动态DP