mirror of
https://gitcode.com/gh_mirrors/ope/OpenFace.git
synced 2026-05-19 05:37:54 +00:00
More visualization cleanup and removal of redundant code.
This commit is contained in:
@@ -847,152 +847,6 @@ vector<cv::Point2d> CalculateAllEyeLandmarks(const CLNF& clnf_model)
|
||||
return to_return;
|
||||
}
|
||||
|
||||
|
||||
// Drawing landmarks on a face image
|
||||
void Draw(cv::Mat img, const cv::Mat_<double>& shape2D, const cv::Mat_<int>& visibilities)
|
||||
{
|
||||
int n = shape2D.rows/2;
|
||||
|
||||
|
||||
// Drawing feature points
|
||||
if(n >= 66)
|
||||
{
|
||||
for( int i = 0; i < n; ++i)
|
||||
{
|
||||
if(visibilities.at<int>(i))
|
||||
{
|
||||
cv::Point featurePoint(cvRound(shape2D.at<double>(i) * (double)draw_multiplier), cvRound(shape2D.at<double>(i + n) * (double)draw_multiplier));
|
||||
|
||||
// A rough heuristic for drawn point size
|
||||
int thickness = (int)std::ceil(3.0* ((double)img.cols) / 640.0);
|
||||
int thickness_2 = (int)std::ceil(1.0* ((double)img.cols) / 640.0);
|
||||
|
||||
cv::circle(img, featurePoint, 1 * draw_multiplier, cv::Scalar(0, 0, 255), thickness, CV_AA, draw_shiftbits);
|
||||
cv::circle(img, featurePoint, 1 * draw_multiplier, cv::Scalar(255, 0, 0), thickness_2, CV_AA, draw_shiftbits);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(n == 28) // drawing eyes
|
||||
{
|
||||
for( int i = 0; i < n; ++i)
|
||||
{
|
||||
cv::Point featurePoint(cvRound(shape2D.at<double>(i) * (double)draw_multiplier), cvRound(shape2D.at<double>(i + n) * (double)draw_multiplier));
|
||||
|
||||
// A rough heuristic for drawn point size
|
||||
int thickness = 1.0;
|
||||
int thickness_2 = 1.0;
|
||||
|
||||
int next_point = i + 1;
|
||||
if(i == 7)
|
||||
next_point = 0;
|
||||
if(i == 19)
|
||||
next_point = 8;
|
||||
if(i == 27)
|
||||
next_point = 20;
|
||||
|
||||
cv::Point nextFeaturePoint(cvRound(shape2D.at<double>(next_point) * (double)draw_multiplier), cvRound(shape2D.at<double>(next_point + n) * (double)draw_multiplier));
|
||||
if( i < 8 || i > 19)
|
||||
cv::line(img, featurePoint, nextFeaturePoint, cv::Scalar(255, 0, 0), thickness_2, CV_AA, draw_shiftbits);
|
||||
else
|
||||
cv::line(img, featurePoint, nextFeaturePoint, cv::Scalar(0, 0, 255), thickness_2, CV_AA, draw_shiftbits);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else if(n == 6)
|
||||
{
|
||||
for( int i = 0; i < n; ++i)
|
||||
{
|
||||
cv::Point featurePoint(cvRound(shape2D.at<double>(i) * (double)draw_multiplier), cvRound(shape2D.at<double>(i + n) * (double)draw_multiplier));
|
||||
|
||||
// A rough heuristic for drawn point size
|
||||
int thickness = 1.0;
|
||||
int thickness_2 = 1.0;
|
||||
|
||||
int next_point = i + 1;
|
||||
if(i == 5)
|
||||
next_point = 0;
|
||||
|
||||
cv::Point nextFeaturePoint(cvRound(shape2D.at<double>(next_point) * (double)draw_multiplier), cvRound(shape2D.at<double>(next_point + n) * (double)draw_multiplier));
|
||||
cv::line(img, featurePoint, nextFeaturePoint, cv::Scalar(255, 0, 0), thickness_2, CV_AA, draw_shiftbits);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Drawing landmarks on a face image
|
||||
void Draw(cv::Mat img, const cv::Mat_<double>& shape2D)
|
||||
{
|
||||
|
||||
int n;
|
||||
|
||||
if(shape2D.cols == 2)
|
||||
{
|
||||
n = shape2D.rows;
|
||||
}
|
||||
else if(shape2D.cols == 1)
|
||||
{
|
||||
n = shape2D.rows/2;
|
||||
}
|
||||
|
||||
for( int i = 0; i < n; ++i)
|
||||
{
|
||||
cv::Point featurePoint;
|
||||
if(shape2D.cols == 1)
|
||||
{
|
||||
featurePoint = cv::Point(cvRound(shape2D.at<double>(i) * (double)draw_multiplier), cvRound(shape2D.at<double>(i + n) * (double)draw_multiplier));
|
||||
}
|
||||
else
|
||||
{
|
||||
featurePoint = cv::Point(cvRound(shape2D.at<double>(i, 0) * (double)draw_multiplier), cvRound(shape2D.at<double>(i, 1) * (double)draw_multiplier));
|
||||
}
|
||||
// A rough heuristic for drawn point size
|
||||
int thickness = (int)std::ceil(5.0* ((double)img.cols) / 640.0);
|
||||
int thickness_2 = (int)std::ceil(1.5* ((double)img.cols) / 640.0);
|
||||
|
||||
cv::circle(img, featurePoint, 1 * draw_multiplier, cv::Scalar(0, 0, 255), thickness, CV_AA, draw_shiftbits);
|
||||
cv::circle(img, featurePoint, 1 * draw_multiplier, cv::Scalar(255, 0, 0), thickness_2, CV_AA, draw_shiftbits);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Drawing detected landmarks on a face image
|
||||
void Draw(cv::Mat img, const CLNF& clnf_model)
|
||||
{
|
||||
|
||||
int idx = clnf_model.patch_experts.GetViewIdx(clnf_model.params_global, 0);
|
||||
|
||||
// Because we only draw visible points, need to find which points patch experts consider visible at a certain orientation
|
||||
Draw(img, clnf_model.detected_landmarks, clnf_model.patch_experts.visibilities[0][idx]);
|
||||
|
||||
// If the model has hierarchical updates draw those too
|
||||
for(size_t i = 0; i < clnf_model.hierarchical_models.size(); ++i)
|
||||
{
|
||||
if(clnf_model.hierarchical_models[i].pdm.NumberOfPoints() != clnf_model.hierarchical_mapping[i].size())
|
||||
{
|
||||
Draw(img, clnf_model.hierarchical_models[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DrawLandmarks(cv::Mat img, vector<cv::Point> landmarks)
|
||||
{
|
||||
for(cv::Point p : landmarks)
|
||||
{
|
||||
|
||||
// A rough heuristic for drawn point size
|
||||
int thickness = (int)std::ceil(5.0* ((double)img.cols) / 640.0);
|
||||
int thickness_2 = (int)std::ceil(1.5* ((double)img.cols) / 640.0);
|
||||
|
||||
cv::circle(img, p, 1, cv::Scalar(0,0,255), thickness, CV_AA);
|
||||
cv::circle(img, p, 1, cv::Scalar(255,0,0), thickness_2, CV_AA);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//===========================================================================
|
||||
|
||||
//============================================================================
|
||||
|
||||
Reference in New Issue
Block a user