星空网 > 软件开发 > ASP.net

C# 通过Emgu CV 人脸检测

1、Emgu CV使用opencv人脸检测,C#使用代码(转载于Emgu CV Example):

using System;using System.Collections.Generic;using System.Diagnostics;using System.Drawing;using Emgu.CV;using Emgu.CV.Structure;#if !IOSusing Emgu.CV.Cuda;#endifnamespace FaceDetection{  public static class DetectFace  {   public static void Detect(    Mat image, String faceFileName, String eyeFileName,     List<Rectangle> faces, List<Rectangle> eyes,     bool tryUseCuda, bool tryUseOpenCL,    out long detectionTime)   {     Stopwatch watch;         #if !IOS     if (tryUseCuda && CudaInvoke.HasCuda)     {      using (CudaCascadeClassifier face = new CudaCascadeClassifier(faceFileName))      using (CudaCascadeClassifier eye = new CudaCascadeClassifier(eyeFileName))      {        watch = Stopwatch.StartNew();        using (CudaImage<Bgr, Byte> gpuImage = new CudaImage<Bgr, byte>(image))        using (CudaImage<Gray, Byte> gpuGray = gpuImage.Convert<Gray, Byte>())        {         Rectangle[] faceRegion = face.DetectMultiScale(gpuGray, 1.1, 10, Size.Empty);         faces.AddRange(faceRegion);         foreach (Rectangle f in faceRegion)         {           using (CudaImage<Gray, Byte> faceImg = gpuGray.GetSubRect(f))           {            //For some reason a clone is required.            //Might be a bug of CudaCascadeClassifier in opencv            using (CudaImage<Gray, Byte> clone = faceImg.Clone(null))            {              Rectangle[] eyeRegion = eye.DetectMultiScale(clone, 1.1, 10, Size.Empty);              foreach (Rectangle e in eyeRegion)              {               Rectangle eyeRect = e;               eyeRect.Offset(f.X, f.Y);               eyes.Add(eyeRect);              }            }           }         }        }        watch.Stop();      }     }     else     #endif     {      //Many opencl functions require opencl compatible gpu devices.       //As of opencv 3.0-alpha, opencv will crash if opencl is enable and only opencv compatible cpu device is presented      //So we need to call CvInvoke.HaveOpenCLCompatibleGpuDevice instead of CvInvoke.HaveOpenCL (which also returns true on a system that only have cpu opencl devices).      CvInvoke.UseOpenCL = tryUseOpenCL && CvInvoke.HaveOpenCLCompatibleGpuDevice;      //Read the HaarCascade objects      using (CascadeClassifier face = new CascadeClassifier(faceFileName))      using (CascadeClassifier eye = new CascadeClassifier(eyeFileName))      {        watch = Stopwatch.StartNew();        using (UMat ugray = new UMat())        {         CvInvoke.CvtColor(image, ugray, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);         //normalizes brightness and increases contrast of the image         CvInvoke.EqualizeHist(ugray, ugray);         //Detect the faces from the gray scale image and store the locations as rectangle         //The first dimensional is the channel         //The second dimension is the index of the rectangle in the specific channel         Rectangle[] facesDetected = face.DetectMultiScale(           ugray,           1.1,           10,           new Size(20, 20));                    faces.AddRange(facesDetected);         foreach (Rectangle f in facesDetected)         {           //Get the region of interest on the faces           using (UMat faceRegion = new UMat(ugray, f))           {            Rectangle[] eyesDetected = eye.DetectMultiScale(              faceRegion,              1.1,              10,              new Size(20, 20));                        foreach (Rectangle e in eyesDetected)            {              Rectangle eyeRect = e;              eyeRect.Offset(f.X, f.Y);              eyes.Add(eyeRect);            }           }         }        }        watch.Stop();      }     }     detectionTime = watch.ElapsedMilliseconds;   }  }}

 

2、参数说明,人脸检测耗时影响,精度影响

Rectangle[] facesDetected = face.DetectMultiScale(           ugray, //灰度图像,单通道图片           1.1,  //scaleFactor 1.1~1.5 越大耗时越低、检测精度越低           10,  //minNeighbors 3~15 越高耗时越低           new Size(20, 20)); //最小脸部大小? //最大脸部大小, 越大耗时越低

 

DetectMultiScale支持多线程

加载人脸识别模型可以全局初始化,减小耗时。

using (CudaCascadeClassifier face = new CudaCascadeClassifier(faceFileName))
using (CudaCascadeClassifier eye = new CudaCascadeClassifier(eyeFileName))

 

 




原标题:C# 通过Emgu CV 人脸检测

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

亚马逊全球开店:https://www.ikjzd.com/w/1299
亚马逊送货上门Prime Now:https://www.ikjzd.com/w/130
亚马逊的启航计划介绍:https://www.ikjzd.com/w/1300
卖家成长:https://www.ikjzd.com/w/1301
CaresPAy公司介绍:https://www.ikjzd.com/w/1302
大龙网:https://www.ikjzd.com/w/1303
武陵山大裂谷周围景点 武陵山大裂谷周围景点图片:https://www.vstour.cn/a/411233.html
南美旅游报价(探索南美洲的旅行费用):https://www.vstour.cn/a/411234.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流