当前位置:主页 > c/c++教程 > Matlab人脸检测识别

Matlab控制电脑摄像实现实时人脸检测和识别详解

发布:2023-03-03 09:00:01 59


给大家整理了相关的编程文章,网友杨志强根据主题投稿了本篇教程内容,涉及到Matlab、摄像头、人脸检测、Matlab、人脸检测识别、Matlab、人脸检测、Matlab、人脸识别、Matlab人脸检测识别相关内容,已被506网友关注,下面的电子资料对本篇知识点有更加详尽的解释。

Matlab人脸检测识别

一、理论基础

人脸识别过程主要由四个阶段组成:人脸检测、图像预处理、面部特征提取和特征识别。首先系统从视频或者相机中捕获图像,检测并分割出其中的人脸区域;接下来通过归一化、对齐、滤波等方法改善图像的质量,这里的质量主要由最终的人脸识别率决定;特征提取(降维)环节尤为重要,其初衷是减少数据量从而减轻计算负担,但良好的特征选取可以降低噪音和不相关数据在识别中的贡献度,从而提高识别精度;特征识别阶段需要根据提取的特征训练一个分类器,对于给定的测试样本,根据训练器对其进行分类。

当定位好人脸的时候,我们进行识别,识别的主要原理如下:

GRNN广义回归神经网络的理论基础是非线性核回归分析,非独立变量y相对于独立变量x的回归分析实际上是计算具有最大概率值的y。设随机变量x和y的联合概率密度函数为f (x ,y),已知x的观测值为X,则y相对于X的回归,即条件均值为:

对于未知的概率密度函数f (x, y),可由x和y的观测样本经非参数估计得:

GRNN通常被用来进行函数逼近。它具有一个径向基隐含层和一个特殊的线性层。第一层和第二层的神经元数目都与输入的样本向量对的数目相等。GRNN结构如图2-3所示,整个网络包括四层神经元:输入层、模式层、求和层与输出层。 

GRNN广义回归神经网络进行映射学习达到了很好的效果.这些流形的方法都建立在一个假设上:同一个人不同姿态的图像是高维空间中的一个低维流形.基于这个假设,不同人在姿态变化下可以获得较好的识别效果。

在matlab中,通过如下的驱动程序控制笔记本电脑的摄像头:

%Set up video object. Note: to change to a different camera (or camera setup) change the following line:
vid = videoinput('winvideo',1,'YUY2_640x480');
%Set the video object to always return rgb images:
set(vid, 'ReturnedColorSpace', 'rgb');
triggerconfig(vid,'manual');
start(vid)
%Initialize frame Frm and fps variable
Frm     = 0;
fps     = 0;
%Set the total runtime in seconds 
runtime = 100;
h       = figure(1);
tic;
timeTracker = toc;

通过程序vid = videoinput('winvideo',1,'YUY2_640x480');完成摄像头图像的采集。

二、核心程序

clc;
clear;
close all;
warning off;
addpath 'func\'
addpath 'facebase\'
 
 
delete(imaqfind);
%Set up video object. Note: to change to a different camera (or camera setup) change the following line:
vid = videoinput('winvideo',1,'YUY2_640x480');
%Set the video object to always return rgb images:
set(vid, 'ReturnedColorSpace', 'rgb');
triggerconfig(vid,'manual');
start(vid)
%Initialize frame Frm and fps variable
Frm     = 0;
fps     = 0;
%Set the total runtime in seconds 
runtime = 100;
h       = figure(1);
tic;
timeTracker = toc;
 
 
load grnns.mat
while toc < runtime 
      toc
      Frm = Frm + 1;
      %获得摄像头图像
      I   = getsnapshot(vid);
 
 
      %人脸跟踪
      [segment,f,R0,R1] = func_face_track(I);
      %获得人脸区域
      figure(1);
      subplot(221);
      imshow(uint8(I));
      title('摄像头视频获取');
      subplot(222);
      imshow(f);
      subplot(223);
      imshow(R1);
      title('脸部定位');
      
      %人脸识别(测试前需要加入自己所要测试的人脸的相关库。比如你要测试你自己的脸,那么需要加入你的脸道库中)
       
      R0re    = imresize(R0,[220,160]);
      Ttest   = func_yuchuli(R0re);%读入数字
      wordsss = sim(net,Ttest');
      [V,I]   = max(wordsss);
    
      %显示识别结论
      Icheck  = imread(['facebase\',num2str(I-1),'.jpg']);
      
      subplot(224);
      imshow(Icheck);
      title('识别结论');
      pause(0.5);
end
stop(vid)
 
 
 
clc;
clear;
close all;
warning off;
addpath 'func\'
addpath 'facebase\'
I = imread('1.jpg');
 
%%
%人脸跟踪
[segment,f,R0,R1] = func_face_track(I);
%获得人脸区域
figure
subplot(221);
imshow(I);
subplot(222);
imshow(f);
subplot(223);
imshow(R1);
title('脸部定位');
 
%%
%人脸识别(测试前需要加入自己所要测试的人脸的相关库。比如你要测试你自己的脸,那么需要加入你的脸道库中)
%人脸库的离线训练
R0re    = imresize(R0,[220,160]);
Ttest   = func_yuchuli(R0re);%读入数字
 
load grnns.mat
wordsss = sim(net,Ttest');
[V,I]   = max(wordsss);
%显示识别结论
Icheck  = imread(['facebase\',num2str(I-1),'.jpg']);
subplot(224);
imshow(Icheck);
title('识别结论');

三、仿真测试结果

由此可以看出,当选择出学习样本之后,GRNN网络的结构与权值都是完全确定的,因而训练GRNN网络要比训练BP网络和RBF网络便捷得多。

到此这篇关于Matlab控制电脑摄像实现实时人脸检测和识别详解的文章就介绍到这了,更多相关Matlab人脸检测识别内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!


参考资料

相关文章

  • 利用Matlab绘制甘特图的方法详解

    发布:2023-03-06

    这篇文章主要为大家详细介绍了如何利用Matlab实现甘特图(gantt chart)的绘制,文中的示例代码讲解详细,对我们学习Matlab有一定帮助,需要的可以参考一下


  • 利用Matlab绘制优美的k线图

    发布:2023-03-03

    本期又是一个花里胡哨的数据可视化,前两天刷到了耐克的视觉设计师Gladys Orteza绘制的k线图作品,把沉闷的股票图变成了精彩的风景,但是那些大部分是真的完全看不清,我这里挑选了几个能看清的k线图风格将其用MATLAB进行了实现


  • OpenCV Matlab生成视频倒放功能

    OpenCV Matlab生成视频倒放功能

    发布:2022-09-07

    给大家整理一篇关于OpenCV的教程,这篇文章主要介绍了OpenCV Matlab生成视频倒放功能,大家都知道不少带声音视频的后缀名往往都是.mp4,那么如何获取里面的音频呢?本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧


  • python opencv调用笔记本摄像头

    python opencv调用笔记本摄像头

    发布:2022-12-09

    为网友们分享了关于python的教程,这篇文章主要为大家详细介绍了python opencv调用笔记本摄像头,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • python 基于opencv操作摄像头

    python 基于opencv操作摄像头

    发布:2023-01-11

    给大家整理一篇关于python的教程,这篇文章主要介绍了python 基于opencv操作摄像头的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下


  • Python与Matlab混合编程的实现案例

    发布:2023-03-11

    本文主要介绍了Python与Matlab混合编程的实现案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • 关于matlab图像滤波详解(二维傅里叶滤波)

    发布:2023-04-03

    这篇文章主要介绍了关于matlab图像滤波详解(二维傅里叶滤波),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


  • Matlab利用prim算法实现迷宫的生成

    发布:2023-03-05

    普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。本文将利用prim算法迷宫生成及其艺术渲染,感兴趣的可以了解一下


网友讨论