然后点击取得连接,蓝色区域将会显示远程摄像头采集的视频图像,
此时将捕捉人脸,并识别,
侧脸时,由于我使用的是之前训练的识别库,这个角度没法识别出我的脸,
调整角度后结果就如下图,识别出我的脸,并显示出在识别库对应的我的名字。
当点击训练识别时将调用笔记本的摄像头进行训练,界面如下(此段是参考别人的训练方法)
在训练框中的名字栏填写要的存储对应头像的人名。
训练完成后,关闭窗口,自动回调出远程视频连接。
再来测试一下识别能力
同为侧面角度,就能识别出人脸并检测了。
public partial class VideoForm : Form
{
private Image<Bgr, byte>currentImage//设置当前画面
Image<Gray, byte>result = null//返回帧
Image<Gray, byte>gray_frame = null//灰度帧
public HaarCascade Face = new HaarCascade(Application.StartupPath + "/Cascades/haarcascade_frontalface_alt2.xml")//载入训练库数据
MCvFont font = new MCvFont(FONT.CV_FONT_HERSHEY_COMPLEX, 0.5, 0.5)//设置摄像头字体
//Classifier with default training location
Classifier_Train Eigen_Recog = new Classifier_Train()//实例化一个分类训练器
public VideoForm()
{
InitializeComponent()
}
private void showVideo(object sender, EventArgs e)
{ MyCaputre myCap = new MyCaputre()
string sourceURL = this.textBox1.Text
Bitmap bmp = myCap.myCaputre(sourceURL)
currentImage = new Image<Bgr, byte>(bmp)
markFace(currentImage)
pictureBox1.Image = new System.Drawing.Bitmap(currentImage.ToBitmap(), 850, 660)
}
private Image<Bgr, byte>markFace(Image<Bgr, byte>pic)
{
currentImage =currentImage.Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC)
if (currentImage != null)
{
gray_frame = currentImage.Convert<Gray, Byte>()
MCvAvgComp[][] facesDetected = gray_frame.DetectHaarCascade(Face, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(50, 50))
emgucv是一些基础的视觉算法库,并提供一些简单应用的Demo,人脸识别是一个较为复杂的应用,emgucv中没有现成的能直接实现人脸识别的方法。但你可以借助emgucv提供的基础方法,加上你自己的算法实现。另外.emgucv有一个找出人脸并框出人脸的Demo。你也可以看一看。但是和人脸识别比那差远了。“Emgu.CV.CvInvoke”的类型初始值设定项引发异常的解决方法具体步骤如下:
1.运行程序直接崩溃, 然后debug时找到了在这里崩溃的。
2.查看详细信息, 点看左边的小三角, 发现了根源。
上面有一句: "{"无法加载 DLL“opencv_core231”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。"}"从网上下一个opencv_core231.dll放到debug文件夹中可以解决问题, 但毕竟不是长久之计。
3.重新点开引用添加界面。
4.把2.9的引用进来就解决问题了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)