sustaining_gazes/matlab_version/face_detection/face_detection_yu/demo.m

80 lines
2.2 KiB
Matlab

% Function:
% demo
%
% Usage:
% This function demonstrates how to call the functions we provided to
% detect facial landmarks and get pose information. In the demo version,
% we only choose the largest face ROI detected to further localize its
% landmraks. And the current version is only suitable for windows
% platform. The matlab version is recommended above R2009a and the C++
% compiler above MS. Visual C++ 9.0. Those versions before are not tested.
%
% Params:
% None
%
% Return: None
%
% Author:
% Xiang Yu, yuxiang03@gmail.com
%
% Citation:
% X. Yu, J. Huang, S. Zhang, W. Yan and D.N. Metaxas, Pose-free Facial
% Landmark Fitting via Optimized Part Mixures and Cascaded Deformable
% Shape Model. In ICCV, 2013.
%
% Creation Date: 10/12/2013
%
function demo()
clear all;
close all;
clc;
addpath('.\model');
S = load('model_param.mat');
Model = S.Model;
pc_version = computer();
if(strcmp(pc_version,'PCWIN')) % currently the code just supports windows OS
addpath('.\face_detect_32');
addpath('.\mex_32');
elseif(strcmp(pc_version, 'PCWIN64'))
addpath('.\face_detect_64');
addpath('.\mex_64');
end
Model.frontalL = @(X) Select(X, Model.frontal_landmark);
Model.leftL = @(X) Select(X, Model.left_landmark);
Model.rightL = @(X) Select(X, Model.right_landmark);
% change your image folder and image name here
img_fold = '.\test\';
img_name = '4.jpg';
img = imread([img_fold,img_name]);
%------------------------------------------------------------------
% 3 types of face alignment input
% (1) no initial landmarks
% [shape, pglobal, visible] = faceAlign(img, Model, []);
%
% (2) initial landmarks
% l_shape = [xxx...x yyy...yy] input should be set by user
% [shape, pglobal, visible] = faceAlign(img, Model, l_shape);
load('test.mat');
% img = image;
[shape, pglobal, visible] = faceAlign(img, Model, []);
figure,
% imshow(imread([img_fold,img_name]));
imshow(img);
hold on;
if(~isempty(shape))
% input: shape, visible, line_color, marker color, marker size, line width, style
drawLine(reshape(shape,Model.nPts,2), visible, 'b', 'g', 5, 2, '.');
hold off;
end
function Y = Select(X, rows) % x,y,z,x,y,z,...
Y1 = X(3*(rows-1)+1, :);
Y2 = X(3*(rows-1)+2, :);
Y3 = X(3*(rows-1)+3, :);
Y = [Y1; Y2; Y3];