Matlab PCA+SVM人脸识别(二)——GUI界面设计
来源:互联网 发布:海淘软件 编辑:程序博客网 时间:2024/06/06 19:03
上一篇介绍了人脸识别的主要算法,为了便于操作和,使界面更加友善,在之前的基础上做了GUI开发,界面如下:
GUI界面的主程序:
保存为faceGUI.m文件,若你已经添加过当前文件所在的路径,那么在Matlab的command window里写入faceGUI即可运行
global h_axes1;global h_axes2;global edit2;h_f=figure('name','人脸识别系统','position',[300,200,600,400]);clf reset;set(h_f, 'defaultuicontrolfontsize' ,12); set(h_f, 'defaultuicontrolfontname' , '宋体' ); h_axes1=axes('parent',h_f,'position',[0.2 0.28 0.25 0.56],'Unit','normalized','visible','off');h_axes2=axes('parent',h_f,'position',[0.55 0.28 0.25 0.56],'Unit','normalized','visible','off');figcolor=get(h_f,'color');edit2=uicontrol(h_f,'style','text','position',[150,330,300,40],'backgroundcolor',figcolor);button_open=uicontrol(h_f,'style','push','string','选择照片','position',[250 50 100 50],'callback','GUIopen');button_recg=uicontrol(h_f,'style','push','string','测试准确率','position',[100 50 100 50],'callback','face');button_match=uicontrol(h_f,'style','push','string','图像匹配','position',[400 50 100 50],'callback','GUIrecg');button_recg即显示为测试准确率的按键的回调函数为face.m,但是为了让程序运行的进程在界面上可以动态显示,需要对原来的程序做一些修改,具体如下:
clc,clearnpersons=40;%选取40个人的脸global imgrow;global imgcol;global edit2imgrow=112;imgcol=92;set(edit2,'string','读取训练数据......')%显示在句柄为edit2的文本框里drawnow %更新窗口的内容,不然程序结束时才会显示,这样只能看到最后一句f_matrix=ReadFace(npersons,0);%读取训练数据nfaces=size(f_matrix,1);%样本人脸的数量set(edit2,'string','训练数据PCA特征提取......')drawnowmA=mean(f_matrix);k=20;%降维至20维[pcaface,V]=fastPCA(f_matrix,k,mA);%主成分分析法特征提取set(edit2,'string','训练数据规范化......')drawnowlowvec=min(pcaface);upvec=max(pcaface);scaledface = scaling( pcaface,lowvec,upvec);set(edit2,'string','SVM样本训练......')drawnowgamma=0.0078;c=128;multiSVMstruct=multiSVMtrain( scaledface,npersons,gamma,c);save('recognize.mat','multiSVMstruct','npersons','k','mA','V','lowvec','upvec');set(edit2,'string','读取测试数据......')drawnow[testface,realclass]=ReadFace(npersons,1);set(edit2,'string','测试数据特征降维......')drawnowm=size(testface,1);for i=1:m testface(i,:)=testface(i,:)-mA;endpcatestface=testface*V;set(edit2,'string','测试数据规范化......')drawnowscaledtestface = scaling( pcatestface,lowvec,upvec);set(edit2,'string','SVM样本分类......')drawnowclass= multiSVM(scaledtestface,multiSVMstruct,npersons);set(edit2,'string','测试完成!')accuracy=sum(class==realclass)/length(class);msgbox(['识别准确率:',num2str(accuracy*100),'%。'])button_open即显示为”选择照片“的按钮的回调函数是GUIopen.m,其内容如下:
global h_axes1[filename,pathname]=uigetfile({'*.pgm';'*.jpg';'*.tif';'*.*'},'请选择一张用于识别的照片');if filename==0 msgbox('请选择一张照片文件')else filepath=[pathname,filename]; axes(h_axes1); imshow(imread(filepath));endbutton_recg即显示为”图像匹配“的按钮的回调函数是GUIrecg.m,其内容如下:
global h_axes1global h_axes2global edit2load('recognize.mat');set(edit2,'string','读取测试数据......')drawnowdisp('读取测试数据...')disp('.................................................')img=getimage(h_axes1);%获得之前选中的照片的信息if isempty(img) msgbox('请先选择一张图片!') breakendtestface=img(:)';set(edit2,'string','测试数据降维......')drawnowdisp('测试数据特征降维...')disp('.................................................')Z=double(testface)-mA;pcatestface=Z*V;set(edit2,'string','测试特征数据规范化......')drawnowdisp('测试特征数据规范化...')disp('.................................................')scaledtestface=-1+(pcatestface-lowvec)./(upvec-lowvec)*2;set(edit2,'string','SVM样本识别......')drawnowdisp('SVM样本识别...')disp('.................................................')voting=zeros(1,npersons);for i=1:npersons-1 for j=i+1:npersons class=svmclassify(multiSVMstruct{i}{j},scaledtestface); voting(i)=voting(i)+(class==1); voting(j)=voting(j)+(class==0); endend[~,class]=max(voting);set(edit2,'string','识别完成!')drawnowaxes(h_axes2);imshow(imread(['E:\ORL_face\s',num2str(class),'\1.pgm']));msgbox(['样本识别为第',num2str(class),'个人'])
欢迎您参与讨论~让我们共同进步~
5 0
- Matlab PCA+SVM人脸识别(二)——GUI界面设计
- Matlab PCA+SVM人脸识别(二)——GUI界面设计
- Matlab PCA+SVM人脸识别(一)
- Matlab PCA+SVM人脸识别(一)
- (11)MATLAB PCA+SVM 人脸识别
- 基于PCA和SVM人脸识别之二.MATLAB实现
- PCA + SVM 人脸识别
- pca svm识别人脸
- PCA+SVM人脸识别
- opencv 中SVM + PCA 人脸识别
- opencv 中SVM + PCA 人脸识别
- 人脸识别中的PCA-SVM和BOW-SVM
- Python scikit-learn 学习笔记—PCA+SVM人脸识别
- (12)MATLAB PCA+adaboost人脸识别
- PCA的人脸识别(含matlab代码)
- PCA人脸识别 MATLAB 源代码
- 基于PCA和SVM的人脸识别
- 基于PCA和SVM的人脸识别系统
- Java接口和抽象类用法总结
- 计算字符串的相似度
- Android 如何让EditText不自动获取焦点
- 物品展示必备代码(旋转与缩放代码)
- Java静态变量和构造函数的执行顺序
- Matlab PCA+SVM人脸识别(二)——GUI界面设计
- 基于8051的扫描式键盘驱动和串并转换式显示编程实现人机I/O(键盘输入,数码管输出)
- TCP有限状态机
- Java内部类简介
- 打印菱形
- android 去掉listview之间的黑线
- 剑指Offer:从尾到头打印链表
- Unity打开外部文件 exe
- Android基于HTTP协议的多线程断点下载器的实现