80 lines
2.2 KiB
Mathematica
80 lines
2.2 KiB
Mathematica
|
% 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];
|