unity+opencv实时检测人脸及眼睛区域检测
这是最近做的一个工作,由于要调用电脑摄像头实时检测人眼主要是检测闭眼睁眼
**
1.工具
**
1.1unity(作者用的是2020.3.25 大部分版本都ok
1.2opencv for unity(可从这个链接下载链接:https://pan.baidu.com/s/1Wti9m57-pe1et4U8LNgoCA 提取码:b0un
1.3haar模型
2.实现
2.1首先新建一个项目
然后将opencv for unity导入
2.2
新建一个脚本这里命名为EyeDetect
using OpenCVForUnity;
using OpenCVForUnityExample;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class EyeDetect : MonoBehaviour
{//WebCamTextureToMatExample webcamTexToMat = new WebCamTextureToMatExample();//获取摄像头画面的辅助类//PoseEstimator poseEstimator = new PoseEstimator();string face_Xml_path;//人脸识别训练数据文件XML的路径string eye_Xml_path;//人眼识别训练数据文件XML的路径Mat gray;//灰度图MatOfRect faceRect;//识别到的人脸区域CascadeClassifier classifier;//人脸识别分类器public static int EyesChecked=0;//是否检测到眼睛void Start(){//webcamTexToMat = transform.GetComponent<WebCamTexToMat>();//获取Quad上挂载的WebCamTextureToMatExample脚本组件//poseEstimator = transform.GetComponent<PoseEstimator>();face_Xml_path = Application.streamingAssetsPath + "/haarcascade_frontalface_alt2.xml";//获取人脸识别训练数据XMLeye_Xml_path = Application.streamingAssetsPath + "/haarcascade_eye.xml";//获取人眼识别训练数据XMLgray = new Mat();//初始化MatfaceRect = new MatOfRect();//初始化识别到的人脸区域classifier = new CascadeClassifier(face_Xml_path);//初始化人脸识别分类器 }public void EyesFace(){Imgproc.cvtColor(transform.GetComponent<PoseEstimator>().rgbaMat, gray, Imgproc.COLOR_RGBA2GRAY); //将获取到的摄像头画面转化为灰度图并赋值给grayclassifier.detectMultiScale(gray, faceRect, 1.1d, 4, 2, new Size(20, 20), new Size());//检测到gray灰度图中的人脸/*1.1d为scaleFactor,必须大于1,值越大速度越快精度越低,反之值越小速度越慢精度越高2为minNeighbors,最少检测到两次才认为是被检测到2为flags,性能参数new Size(20, 20)为检测目标的最小尺寸,低于这个尺寸的不检测,或者不设置阈值new Size(100, 100)为检测目标的最大尺寸,高于这个尺寸的不检测,或者不设置阈值*/OpenCVForUnity.Rect[] rects = faceRect.toArray();//faceRect为被检测到物体的矩形向量组,保存x、y、w、h四个参数,rects[i].x和rects[i].y为框左上角顶点rects[i].width和rects[i].height为框的宽和高for (int i = 0; i < rects.Length; i++){Imgproc.rectangle(transform.GetComponent<PoseEstimator>().rgbaMat, new Point(rects[i].x, rects[i].y),new Point(rects[i].x + rects[i].width, rects[i].y + rects[i].height),new Scalar(0, 255, 0, 255), 2);//在原本的画面上框出人脸位置/*****************************************************************/Mat roi_gray_img = new Mat(gray, new OpenCVForUnity.Rect(0, 0, rects[i].x + rects[i].width, rects[i].y + rects[i].height));//Mat roi_img = new Mat(faceRect, new OpenCVForUnity.CoreModule.Rect(0, 0, rects[i].x + rects[i].width, rects[i].y + rects[i].height));MatOfRect eyes = new MatOfRect();CascadeClassifier eyecascade = new CascadeClassifier(eye_Xml_path);eyecascade.detectMultiScale(roi_gray_img, eyes, 1.3d, 8, 2, new Size(20, 20), new Size());//Debug.Log(eyes.elemSize());if (eyes.elemSize() > 0){// OpenCVForUnity.Rect[] eye_rects = eyes.toArray();// for (int t = 0; t < eye_rects.Length; t++)// {//Debug.Log("detect eyes " + rects[t]);// Imgproc.rectangle(roi_img, new Point(eye_rects[t].x, eye_rects[t].y), new Point(eye_rects[t].x + eye_rects[t].width, eye_rects[t].y + eye_rects[t].height), new Scalar(255, 255, 0, 255), 2); //黄// Point center = new Point((eye_rects[t].x + eye_rects[t].x + eye_rects[t].width) / 2, (eye_rects[t].y + eye_rects[t].y + eye_rects[t].height) / 2);//Imgproc.circle(poseEstimator.rgbaMat, center, eye_rects[t].width / 2, new Scalar(255, 255, 0, 255), 2);//}// Debug.Log("已检测到人眼");EyesChecked = 1;}else{EyesChecked = 0;}}}
}
到这个路径下打开并修改UPdate
void Update(){if (hasInitDone && webCamTexture.isPlaying && webCamTexture.didUpdateThisFrame){Utils.webCamTextureToMat(webCamTexture, rgbaMat, colors);//注释掉Imgproc.putText (rgbaMat, "W:" + rgbaMat.width () + " H:" + rgbaMat.height () + " SO:" + Screen.orientation, new Point (5, rgbaMat.rows () - 10), Core.FONT_HERSHEY_SIMPLEX, 1.0, new Scalar (255, 255, 255, 255), 2, Imgproc.LINE_AA, false);//transform.GetComponent<FaceDetect>().DetectFace();//添加调用FaceDetect脚本中DetectFace画线函数的语句transform.GetComponent<EyeDetect>().EyesFace();//添加调用FaceDetect脚本中DetectFace画线函数的语句Utils.matToTexture2D(rgbaMat, texture, colors);}}
最后运行结果如图所示:
unity+opencv实时检测人脸及眼睛区域检测相关推荐
- C# 人脸检测 人脸比对 活体检测 口罩检测 年龄预测 性别预测 眼睛状态检测
基于以下开源软件做了一个Demo GitHub - ViewFaceCore/ViewFaceCore: C# 超简单的离线人脸识别库.( 基于 SeetaFace6 ) 效果 代码 using Sy ...
- 常用的表格检测识别方法-表格区域检测方法(上)
常用的表格检测识别方法 表格检测识别一般分为三个子任务:表格区域检测.表格结构识别和表格内容识别.本章将围绕这三个表格识别子任务,从传统方法.深度学习方法等方面,综述该领域国内国外的发展历史和最新进展 ...
- 常用的表格检测识别方法 - 表格区域检测方法(下)
--书接上文 Training 半监督网络的训练分两步进行:a)对标记数据独立训练学生模块,由教师模块生成伪标签:b)结合两个模块的训练,得到最终的预测结果. 伪标签框架 实验 数据集: TableB ...
- 使用Python,dlib中新型、更快、更小的5点面部标志检测器检测人脸、眼睛、鼻子
这篇博客将介绍一个新的dlib面部标志检测器--5点人脸标志模型,它比原始版本更快(提高了8-10%),效率更高,模型更小(降低了10倍). 该5点面部标志检测器被认为是最初随dlib库一起分发的68 ...
- python+OpenCv+dlib实现人脸68个关键点检测
pip install dlib==19.7.0 下载地址: http://dlib.net/files/ dlib中为我们提供了关于人脸检测标注训练好的文件可在http://dlib.net/fil ...
- python人脸识别防小偷_基于python的人脸识别(检测人脸、眼睛、嘴巴、鼻子......)...
本文链接:https://blog.csdn.net/James_Ray_Murphy/article/details/79209172 import numpy as np import cv2 # ...
- 基于matlab活体检测,人脸识别中活体检测算法综述.PDF
人脸识别中的活体检测算法综述 SIGAI 2018.9.19 原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不能用于商业目的. 1. 什么是活体检测? --> 判断捕捉到的 ...
- 使用OpenCV在Python中进行人脸和眼睛检测
Modules Used: 使用的模块: python-opencv(cv2) python-opencv(cv2) python-opencv(cv2) Opencv(Open source com ...
- 基于OpenCV的摄像头人脸检测
一.选题背景 二.设计目的和意义 三.设计方案 四.特征分类器的选择 4.1 常用人脸检测的特征分类器 4.2 人脸的Haar特征分类器介绍 4.3 人脸的Haar特征分类器使用 五.设计中主要函数介 ...
最新文章
- AltiumDesigner 热焊盘铺铜
- [Js]删除数组指定元素
- java将日期作为文件名_获取当前时间作为文件名
- 配置 docker0 网桥
- ubuntu 下安装memcache 以及php扩展
- c0000005错误怎么解决_iTunes提示3194未知错误怎么办【解决方法】
- 继续深入更新shell脚本容易出错的地方
- MySQL 示例数据库 employees 详解
- Spring2.5整合Ibatis入门级开发实例
- gd32 定时器时钟_漫谈LiteOS之开发板-Timer(基于GD32450i-EVAL)
- 关于EL表达式中requestScope和param区别
- 通过编写纯代码与JDBC实现对mysql的数据实现增删改查案例,jdbc连接数据库六步完整步骤详解,适合编程新手,通俗易懂
- HanLP里使用DAT存取字典的方法
- 问卷分析SPSS+AMOS实证步骤
- 冰箱android10,智能手机 篇十:手机冻冰箱总共分几步?AGM推出金嗓子手机H2,超大声音超长待机...
- 李宏毅2022机器学习hw5
- powerdesigner16 license key
- base64编码图片替换url图片
- 基于ZYNQ的光纤-以太网高速传输系统设计
- (前端)HTML之CSS(选择器字体排版背景)