当前位置: 首页 > news >正文

使用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网络便捷得多。

 A10-26

相关文章:

  • 微信小程序|基于小程序实现透明背景人像分割
  • React中编写CSS的常见方案
  • 利用HFS软件一分钟搭建好ESP8266基于Arduino开发环境
  • MongoDB必备知识点全面总结
  • 【Linux操作系统】进程详解(下)
  • three.js入门 1 介绍和基础代码
  • pytorch-实现天气识别
  • Unity2D学习———角色移动两种方式+小怪追随+Unity演示+C#代码
  • 拓展上机-3题解:哥德巴赫猜想
  • 如果你看不懂别人画的 UML 类图,看这一篇文章就够了
  • 【论文】论文阅读记录
  • 【第三十九讲】Boot 启动流程
  • ApkScan-PKID 查壳工具下载使用以及相关技术介绍
  • 从BNB遭黑客攻击(跨链桥BSC Token Hub遭到攻击),看公链中心化问题
  • 【多线程实践】一、为何使用多线程三种线程创建方式利弊分析
  • JavaScript-如何实现克隆(clone)函数
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 08.Android之View事件问题
  • AHK 中 = 和 == 等比较运算符的用法
  • create-react-app做的留言板
  • ES6 ...操作符
  • es6--symbol
  • GraphQL学习过程应该是这样的
  • JavaScript对象详解
  • LeetCode18.四数之和 JavaScript
  • leetcode98. Validate Binary Search Tree
  • Linux各目录及每个目录的详细介绍
  • PHP的类修饰符与访问修饰符
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring-boot 启动时碰到的错误
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 分布式任务队列Celery
  • 分布式事物理论与实践
  • ------- 计算机网络基础
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 十年未变!安全,谁之责?(下)
  • 原生js练习题---第五课
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​你们这样子,耽误我的工作进度怎么办?
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (分布式缓存)Redis持久化
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (全注解开发)学习Spring-MVC的第三天
  • (三十五)大数据实战——Superset可视化平台搭建
  • (转)母版页和相对路径
  • (转)一些感悟
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • ../depcomp: line 571: exec: g++: not found
  • .net CHARTING图表控件下载地址