可学习的多人人脸识别程序(基于Emgu CV)

源代码下载(须要安装Emgu CV,安装方法请百度) web

不少朋友使用Emgu CV遇到CvInvoke()的报错,我找到一种解决方法。ide

把EmguCV目录下bin里面的全部dll复制到C:\WINDOWS\SYSTEM32文件夹下,这样就OK了。post

若是还不OK,试试把dll复制到程序目录(\Debug)下。学习

我这是玩玩而已,欢迎高手指教,但别说我这没意思。hello world也没意思,天天无数人照写。this

刚刚学着老外的做品作了一个。嗯,没错,自从有了Emgu CV,模式识别的作法和模式简直成了标准。spa

固然,这给我这样图像处理还给老师不少年的差生来讲,是个福音。.net

人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术。设计

人脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生物体(通常特指人)自己的生物特征来区分生物体个体。 3d

我预期的设计目标是code

  1. 检测人脸
  2. 学习检测到的人脸
  3. 利用学习库认人
  4. 支持摄像头和图片文件输入

作了1个多小时,目前只支持摄像头。已经完成了一、二、3功能,有些使用上的细节尚未调整。

效果以下(用了火箭队的图,其实我真心不是篮球迷)

已知bug

  1. 误识,若是学习库容量太少,那么会出现把好几我的认成同一我的,随着容量增大问题消失
  2. 重复识别,对认人来讲不影响(认出2次和认出1次有太大区别吗)
  3. 功能不全(我只能说请看本贴标题)

使用方法

  1. 肯定你要有摄像头
  2. 选择webcam模式
  3. 建议选择「auto stop」在识别出内容后会自动中止
  4. 「start/stop」开始/暂停
  5. 「Learn」能够吧识别到的(若是你以为效果好)脸存起来
  6. 给脸更名字(Emgu CV的Draw方法绘制的文字是不支持中文的,使用下面的代码完成中文人名绘制)
  7. 在摄像头面前跑跑,看能不能认出你来。
绘制中文人名
        Dictionary<string, Rectangle> foundPeople = new Dictionary<string, Rectangle>();

        float xfactor;
        float yfactor;

        private void imageBox_Paint(object sender, PaintEventArgs e)
        {
            if (foundPeople.Count > 0)
            {
                // 缩放
                xfactor = (float)imageBox.Width / (float)current.Bitmap.Width;
                yfactor = (float)imageBox.Height / (float)current.Bitmap.Height;

                foreach (string name in foundPeople.Keys)
                {
                    e.Graphics.DrawString(
                        name,
                        this.Font,
                        Brushes.Red,
                        foundPeople[name].X * xfactor,
                        foundPeople[name].Y * yfactor);
                }
            }
        }
View Code

 

效果以下 

 

(全文完)

 
 
 
标签:   C#,   图形,   机器视觉
相关文章
相关标签/搜索