📄 rundemo.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 + -