⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rundemo.m

📁 It is for Face Recognition
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% face recognition demo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%
% load global PCA models:
%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
% 1) upper face: 18x16
side1 = 0.4; top1= 0.8; low1 = 0.8; fw1=18; fh1=16; K1=16;
T1  = load('pcaUpperFaceS04T08L08W18H16.dat');
mf1 = load('mfUpperFaceS04T08L08W18H16.dat');

% 2) lower face: 18x12
side2 = 0.1; top2= -0.6; low2 = 1.4; fw2=18; fh2=12; K2=12;
T2  = load('pcaLowerFaceS01T-06L14W18H12.dat');
mf2 = load('mfLowerFaceS01T-06L14W18H12.dat');

% 3) full face: 21x28
side3 = 0.4; top3= 1.0; low3 = 1.4; fw3=21; fh3=28; K3=20;
T3  = load('pcaFullFaceModel4.dat');
mf3 = load('mfFullFaceSModel4.dat');


showFaceModel(T1, mf1, fw1, fh1);
showFaceModel(T2, mf2, fw2, fh2);
showFaceModel(T3, mf3, fw3, fh3);

%%%%%%%%%%%%%%%%%%%%%%%%%%%
% load ATT face data
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% load face recog local models
% 18x16 upper face, 16-d
Fm1 = load('prjATTUpperFaceS04T08L08W18H16K16.dat');
%  18x12 lower face, 12-d
Fm2 = load('prjATTLowerFaceS01T-06L14W18H12K12.dat');
% 21x28 full face,  20-d
Fm3 = load('prjATTFullFaceModel4.dat');    

nPerson = 40; nPose = 10;

%%%%%%%%%%%%%%%%%%%%%%%%%%%
% add MRL face data
% 43 - alfonso: demo/prjXAlfonso.dat
% 42 - cuneyt: demo/prjXCuneyt.dat
% 41 - jianjun: demo/prjXFang.dat
%%%%%%%%%%%%%%%%%%%%%%%%%%%
annotateNewFace = 'n';
if annotateNewFace == 'y'
    img = imread('data\fang2.jpg'); nFace = 15; 
    eyes = getEyeLocation(img, nFace);
    prj1=projFace(img, eyes, T1, mf1, side1, top1, low1, fw1, fh1);
    prj2=projFace(img, eyes, T2, mf2, side2, top2, low2, fw2, fh2);
    prj3=projFace(img, eyes, T3, mf3, side3, top3, low3, fw3, fh3);
    save 'demo/prj1Fang2.dat' prj1 -ascii; 
    save 'demo/prj2Fang2.dat' prj2 -ascii; 
    save 'demo/prj3Fang2.dat' prj3 -ascii; 
end

% add to face models
K1=16; K2=12; K3=20;
knownPoses = [1:8, 4, 6]; 
% fang
k0=400;
prj1 = load('demo/prj1Fang2.dat');prj2 = load('demo/prj2Fang2.dat');
prj3 = load('demo/prj3Fang2.dat');
Fm1(:,k0+1:k0+10)=prj1(1:K1,knownPoses);
Fm2(:,k0+1:k0+10)=prj2(1:K2,knownPoses);
Fm3(:,k0+1:k0+10)=prj3(1:K3,knownPoses);

% cuneyt
k0=410;
prj1 = load('demo/prj1Cuneyt2.dat');prj2 = load('demo/prj2Cuneyt2.dat');
prj3 = load('demo/prj3Cuneyt2.dat');
Fm1(:,k0+1:k0+10)=prj1(1:K1,knownPoses);
Fm2(:,k0+1:k0+10)=prj2(1:K2,knownPoses);
Fm3(:,k0+1:k0+10)=prj3(1:K3,knownPoses);

% alfonso
k0=420;
prj1 = load('demo/prj1Alfonso2.dat');prj2 = load('demo/prj2Alfonso2.dat');
prj3 = load('demo/prj3Alfonso2.dat');
Fm1(:,k0+1:k0+10)=prj1(1:K1,knownPoses);
Fm2(:,k0+1:k0+10)=prj2(1:K2,knownPoses);
Fm3(:,k0+1:k0+10)=prj3(1:K3,knownPoses);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% recognition test: verify data
% nPose = 10 is assumed !
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ids=[5:43]; poses=[1 2 3 4 5 7 8 9 10]; qId=43; qPose = 6;
[recId, recIds, modelErrs]=multiModelFaceRecognition(Fm1, Fm2, Fm3, ids, poses, qId, qPose);

%%%%%%%%%%%%%%%%%%%%%%%%%%%
% recognition test: test data
% nPose = 10 is assumed !
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% get unknown face prj
img = imread('data/caj9.jpg'); 

% const
wt1=ones(16);R1=640; wt2=ones(12);R2=600; wt3=ones(20);R3=1000;
K1=16; K2=12; K3=20;

nFace = 12; 
for k=1:nFace
    
    % crop face for one person
    eyes = getEyeLocation(img, 1);
    x1=projFace(img, eyes, T1, mf1, side1, top1, low1, fw1, fh1);
    xPrj1 = x1(1:K1);
    x2=projFace(img, eyes, T2, mf2, side2, top2, low2, fw2, fh2);
    xPrj2 = x2(1:K2);
    x3=projFace(img, eyes, T3, mf3, side3, top3, low3, fw3, fh3);
    xPrj3 = x3(1:K3);
    
    %hold on; cropimg=imread('cropFaceSave.jpg');    imshow(cropimg, [0. 255]);

    % recognition
    ids=4:43; poses=1:10;
    [recId, recIds, modelErrs]=demoMultiModelFaceRecognition(Fm1, Fm2, Fm3, ids, poses, xPrj1, xPrj2, xPrj3);
    str = sprintf('%s recId=%d Ids=[%d %d %d] Err=[%1.3f, %1.3f, %1.3f]', '\fontsize{14}', recId, recIds, modelErrs);
    xlabel(str);
    % show recog result
    if recId == 41
        recStr=sprintf('%s Jianjun !', '\fontsize{14}');
    elseif recId == 42
        recStr=sprintf('%s Cuneyt !',  '\fontsize{14}');
    elseif recId == 43
        recStr=sprintf('%s Alfonso !', '\fontsize{14}');
    else
        recStr=sprintf('%s Oops :( !', '\fontsize{14}');
    end
    title(recStr);    
    %input('\n press any key to continue...');
    ginput(1);
end % for k


%%%%%%%%%%%%%%%%%%%%%%%%%%%
% get att data
%%%%%%%%%%%%%%%%%%%%%%%%%%%
nP=10; nF=40; w= 20; h=24;
faces=zeros(400, 481);

for j=1:nF
  for k=1:nP
     f = loadATTFace(j, k);
     icon = imresize(f, [h w], 'bilinear');
     subplot(5, 8, j); colormap('gray'); imagesc(icon);
     faces((j-1)*nP+k, 1:h*w)=im2vec(icon);
     faces((j-1)*nP+k, h*w+1)=j;
  end
end

size(faces)

[T, s, lat, ts] = princomp(faces(:,1:w*h));


[evPca, evLda, T, T2] = pcalda(faces, 80, 16, 0.00001);

ids=[41 42 43]; nF=3; nP=10;
fm1 = Fm1';
for j=1:nF
  for k=1:nP
     offs=(ids(j)-1)*nP+k; 
     offs2=(j-1)*nP+k; 
     X(offs2,:)=[fm1(offs,:) j];
  end
end


x=load('data\AttFaceW20H24.dat');
x1=load('demo\dli.dat');
x2=load('demo\jli.dat');

for j=1:40
  for k=1:10
     offs=(j-1)*10+k;
     X(offs,:)=[x(offs,:) j];
  end
end

t0=400;
for t=1:12
   X(t0+t,:)=[x1(t,:) 41] ;
end

t0=412;
for t=1:12
   X(t0+t,:)=[x1(t,:) 42] ;
end

save 'demo\42person.dat' X -ascii;

[evPca, evLda, T, T2] = pcalda(X(300:end,:), 40, 16, 0.00001);
save 'demo\lda12.dat' T -ascii;

y1=x1*T;
y2=x2*T;
hold on;
plot(y1(:,1), y1(:,2), '*');
plot(y2(:,1), y2(:,2), 'o');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -