Conmajia

Stop stealing sheep!

导航

🙃️ 学习型人脸识别程序

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

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

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

如果还不OK,试试把dll复制到程序目录(\Debug)下。

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

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

当然,这给我这样图像处理还给老师很多年的差生来说,是个福音。

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

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

我预期的设计目标是

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

做了1个多小时,目前只支持摄像头。已经完成了1、2、3功能,有些使用上的细节还没有调整。

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

已知bug

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

使用方法

  1. 确定你要有摄像头
  2. 选择webcam模式
  3. 建议选择「auto stop」在识别出内容后会自动停止
  4. 「start/stop」开始/暂停
  5. 「Learn」可以吧识别到的(如果你觉得效果好)脸存起来
  6. 给脸改名字(Emgu CV的Draw方法绘制的文字是不支持中文的,使用下面的代码完成中文人名绘制)
  7. 在摄像头面前跑跑,看能不能认出你来。
绘制中文人名
 1         Dictionary<string, Rectangle> foundPeople = new Dictionary<string, Rectangle>();
 2 
 3         float xfactor;
 4         float yfactor;
 5 
 6         private void imageBox_Paint(object sender, PaintEventArgs e)
 7         {
 8             if (foundPeople.Count > 0)
 9             {
10                 // 缩放
11                 xfactor = (float)imageBox.Width / (float)current.Bitmap.Width;
12                 yfactor = (float)imageBox.Height / (float)current.Bitmap.Height;
13 
14                 foreach (string name in foundPeople.Keys)
15                 {
16                     e.Graphics.DrawString(
17                         name,
18                         this.Font,
19                         Brushes.Red,
20                         foundPeople[name].X * xfactor,
21                         foundPeople[name].Y * yfactor);
22                 }
23             }
24         }

效果如下 

 

(全文完)

posted on 2012-05-12 01:45  Conmajia  阅读(6409)  评论(0编辑  收藏  举报