122 lines
2.3 KiB
C++
122 lines
2.3 KiB
C++
// sdk_test_face_landmark68.cpp : 定义控制台应用程序的入口点。
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "Inc/DeepCamFaceApi.h"
|
|
#include "Inc/TimeCount.h"
|
|
|
|
void test1()
|
|
{
|
|
cv::VideoCapture camera1(1);
|
|
if (!camera1.isOpened())
|
|
return;
|
|
while (true)
|
|
{
|
|
cv::Mat img;
|
|
camera1 >> img;
|
|
if (!img.empty())
|
|
{
|
|
std::vector<FaceInfo> face_infos;
|
|
{
|
|
USE_TIME t("FaceDetect ==> ");
|
|
DeepCamFaceDetect(img, face_infos);
|
|
}
|
|
|
|
float landmark68[136] = { 0 };
|
|
for (auto& obj : face_infos)
|
|
{
|
|
USE_TIME t("Get Landmark68 => ");
|
|
DeepCamGetFaceLandmarks68(img, obj.x1, obj.y1, obj.x2, obj.y2, landmark68);
|
|
break;
|
|
}
|
|
|
|
for (int i = 0; i < 136; i++)
|
|
{
|
|
cv::circle(img, cv::Point(landmark68[i * 2], landmark68[i * 2 + 1]), 1, cv::Scalar(0, 0, 255), 2);
|
|
}
|
|
cv::imshow("show", img);
|
|
cv::waitKey(1);
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
void test2()
|
|
{
|
|
cv::VideoCapture camera1(1);
|
|
if (!camera1.isOpened())
|
|
return;
|
|
while (true)
|
|
{
|
|
cv::Mat img;
|
|
camera1 >> img;
|
|
if (!img.empty())
|
|
{
|
|
int face_num = 0;
|
|
{
|
|
USE_TIME t("FaceDetect ==> ");
|
|
face_num = DeepCamFaceDetectStd(img.data, img.cols, img.rows, PIXEL_BGR);
|
|
}
|
|
|
|
|
|
float landmark68[136] = { 0 };
|
|
|
|
if (face_num > 0)
|
|
{
|
|
USE_TIME t("Get Landmark68 => ");
|
|
DeepCamGetFaceLandmark68Std(0,landmark68);
|
|
}
|
|
|
|
for (int i = 0; i < 136; i++)
|
|
{
|
|
cv::circle(img, cv::Point(landmark68[i * 2], landmark68[i * 2 + 1]), 1, cv::Scalar(0, 0, 255), 2);
|
|
}
|
|
}
|
|
|
|
cv::imshow("show", img);
|
|
cv::waitKey(1);
|
|
}
|
|
}
|
|
|
|
void test_face_quality()
|
|
{
|
|
cv::VideoCapture camera1(1);
|
|
if (!camera1.isOpened())
|
|
return;
|
|
while (true)
|
|
{
|
|
cv::Mat img;
|
|
camera1 >> img;
|
|
if (!img.empty())
|
|
{
|
|
int face_num = 0;
|
|
{
|
|
USE_TIME t("FaceDetect ==> ");
|
|
face_num = DeepCamFaceDetectStd(img.data, img.cols, img.rows, PIXEL_BGR);
|
|
}
|
|
|
|
float score = 0;
|
|
if (face_num > 0)
|
|
{
|
|
USE_TIME t("Get Face Quality => ");
|
|
DeepCamGetFaceQualityStd(0, score);
|
|
}
|
|
|
|
cv::putText(img, std::to_string((int)score), cv::Point(10, 45), 2, 2, cv::Scalar(0,0,255), 2);
|
|
|
|
float face_rect[4] = { 0.f };
|
|
DeepCamGetFaceRectStd(0, face_rect);
|
|
cv::rectangle(img, cv::Rect(face_rect[0], face_rect[1], face_rect[2] - face_rect[0], face_rect[3] - face_rect[1]), cv::Scalar(0,0255), 2);
|
|
}
|
|
|
|
cv::imshow("show", img);
|
|
cv::waitKey(1);
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
//test_face_quality();
|
|
test2();
|
|
return 0;
|
|
} |