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人脸检测识别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Matlab处理图像后实现简单的人脸检测

    1.人脸检测原理框图 整体思路是寻找图片中最大的连通域,将其认定为人脸. 第一个环节均值滤波,是为了减弱图像的相关细节部分,以免毛刺影响后期连通域的形成,二值化方便形态学处理,减少运算量.考虑到人脸有黑人和白人黄种人,黑人肤色较深,在二值化之后面部区域不容易形成较大的连通域,如果采取形态学边界提取的办法,就可以避免这个问题,形态学边界提取,只要结构元素够大,也可以形成较大的封闭连通域. 然后就是纵向闭合操作,这一步我选择采用竖向长条状的结构元素进行闭合运算,因为人的脸部和颈部以及头发和衣物等等都

  • 手把手教会你双目摄像头Matlab参数定标

    目录 一.前期准备 二.使用双目摄像头(左+右)拍摄棋盘图 1.注意事项 2.双目拍照代码(python) 3.双目左右照片分割(python) 三.Matlab双目参数标定 四.双目参数提取 总结 一.前期准备 1.安装好python3,可以在anaconda中安装python3. 2.一个合适的双目摄像头. 3.一台可以运行Matlab的电脑. 4.一张棋盘图(可A4打印,若效果不佳,则可A3打印). 棋盘图如下图所示:需要测量小方框的边长(一般单位为毫米:mm). 二.使用双目摄像头(左+

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

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

  • Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例

    1. 引言 在某些场景下,我们不仅需要进行实时人脸检测追踪,还要进行再加工:这里进行摄像头实时人脸检测,并对于实时检测的人脸进行初步提取: 单个/多个人脸检测,并依次在摄像头窗口,实时平铺显示检测到的人脸: 图 1 动态实时检测效果图 检测到的人脸矩形图像,会依次平铺显示在摄像头的左上方: 当多个人脸时候,也能够依次铺开显示: 左上角窗口的大小会根据捕获到的人脸大小实时变化: 图 2 单个/多个人脸情况下摄像头识别显示结果 2. 代码实现 主要分为三个部分: 摄像头调用,利用 OpenCv 里面

  • FreeRTOS实时操作系统的任务应用函数详解

    目录 1.获取任务系统状态 1.1函数描述 1.2参数描述 1.3返回值 1.4用法举例 2.获取当前任务句柄 2.1函数描述 2.2返回值 3.获取空闲任务句柄 3.1函数描述 3.2返回值 4.获取任务堆栈最大使用深度 4.1函数描述 4.2参数描述 4.3返回值 4.4用法举例 5.获取任务状态 5.1函数描述 5.2参数描述 5.3返回值 6.获取任务描述内容 6.1函数描述 6.2参数描述 6.3返回值 7.获取系统节拍次数 7.1函数描述 7.2返回值 8.获取调度器状态 8.1函数

  • Python数据分析之缺失值检测与处理详解

    目录 检测缺失值 缺失值处理 删除缺失值 填补缺失值 检测缺失值 我们先创建一个带有缺失值的数据框(DataFrame). import pandas as pd df = pd.DataFrame( {'A': [None, 2, None, 4], 'B': [10, None, None, 40], 'C': [100, 200, None, 400], 'D': [None, 2000, 3000, None]}) df 数值类缺失值在 Pandas 中被显示为 NaN (Not A N

  • Python OpenCV学习之特征点检测与匹配详解

    目录 背景 一.Harris角点 二.Shi-Tomasi角点检测 三.SIFT关键点 四.SIFT描述子 五.SURF 六.ORB 七.暴力特征匹配(BF) 八.FLANN特征匹配 九.图像查找 总结 背景 提取图像的特征点是图像领域中的关键任务,不管在传统还是在深度学习的领域中,特征代表着图像的信息,对于分类.检测任务都是至关重要的: 特征点应用的一些场景: 图像搜索:以图搜图(电商.教育领域) 图像拼接:全景拍摄(关联图像拼接) 拼图游戏:游戏领域 一.Harris角点 哈里斯角点检测主要

  • Apache Pulsar 微信大流量实时推荐场景下实践详解

    目录 导语 作者简介 实践 1:大流量场景下的 K8s 部署实践 实践 2:非持久化 Topic 的应用 实践 3:负载均衡与 Broker 缓存优化 实践 4:COS Offloader 开发与应用 未来展望与计划 导语 本文整理自 8 月 Apache Pulsar Meetup 上,刘燊题为<Apache Pulsar 在微信的大流量实时推荐场景实践>的分享.本文介绍了微信团队在大流量场景下将 Pulsar 部署在 K8s 上的实践与优化.非持久化 Topic 的应用.负载均衡与 Bro

  • php登录超时检测功能实例详解

    php登录超时检测功能实例详解 前言: php登录超时问题,当用户超过一定时间没有操作页面时自动退出登录,原理是通过js进行访问判断的!代码如下(以thinkphp5.0版本为例) 1.创建登录版块控制器: <?php namespace app\manage\control; use \think\Controller; class Main extends Controller{ protected $request; public function _initialize(){ $this

  • C++ opencv霍夫圆检测使用案例详解

    本程序是一个最简单的霍夫圆检测函数的使用案例,刚刚学会的用法,发一下,可以参考,参数啥的可根据图片调节. #pragma once #include<quickopencv.h> #include<vector> #include <stdio.h> #include <iostream> #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgpr

  • OpenCV形状检测的示例详解

    目录 1.基于OpenCV的形状检测Python版本 1.1.定义我们的形状检测器类ShapeDetector 1.2.基于OpenCV的形状检测器 2.基于OpenCV的形状检测C++版本 2.1代码实现 2.2主要函数解析 2.3结果展示 1.基于OpenCV的形状检测Python版本 目录结构 1.1.定义我们的形状检测器类ShapeDetector 开始定义我们的 ShapeDetector 类.我们将跳过这里的 init 构造函数,因为不需要初始化任何东西. # 导入必要的包 impo

  • JavaScript数据类型检测实现方法详解

    目录 一.typeof 二.instanceof 三.Object.prototype.toString.call() 面试问题 一.typeof 优点:能快速判断基本数据类型,除了 Null: 缺点:不能判别 Object.Array.Null ,都返回 object:判别引用类型除函数显示 function外,其他显示为 object console.log(typeof 55); // number console.log(typeof true); // boolean console.

随机推荐