基于emgu.CV(C#)实现人脸识别的探索,基于本机、IP(未完)两方面

     近期做一个有关人脸识别的任务,首先肯定是基于前人探索的前提下,找到一个很好的案例

https://blog.csdn.net/u011616825/article/details/51620061  

源代码要50积分,下载下来了可以用,放到这里https://download.csdn.net/download/lsc_hei/10861111 自行下载

一、  基于本地计算机人脸识别的实现

经调试,这个可以实现对当前电脑端摄像头的人脸识别,这与我这做摄像头的相关需求不符合,所以自己自行完善,期间又出现了许多的问题,在此简单记录一下:

1.Emgu.CV.CvInvoke”的类型初始值设定项引发异常"

解决办法:下载对应版本的emgu.cv  本次是我是直接把Emgu的bin目录下的x64和x86文件夹复制到debug目录下的 。

emgu.cv的版本3.10下载   https://download.csdn.net/download/lsc_hei/10860950   

2.试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)这个错误。

解决方法:

一般情况下是C#目标平台跟C++dll不兼容,64位跟32位兼容性问题,a.客户端调用C++dll报的错则,

1)允许的话把C#客户端项目平台修改为32位

2)客户端平台不允许修改,则选择AnyCPU,勾选首选32位(在.netFramework4.5上,勾选32位才可以进行选择)

b.服务端调用C++ dll的话,则

1).生成时选择AnyCPU。

2).在IIS配置里面启用32位应用程序。

3.使用c#封装海康SDK出现无法加载 DLL“..\bin\HCNetSDK.dll”: 找不到指定的模块

解决方法:

调试随机自带的demo时,程序运行正常,但当把该程序引入到我自己的程序中时,就开始报错。根据提示,将调试所需的DLL文件拷贝到bin文件下,仍然报错。

根据错误提示,发现程序在该路径下无法找到所需的DLL文件。

因此我将DLL文件全部拷贝到我自己程序的bin文件夹下,调试程序,仍然报错。继续调试demo程序的特征,发现demo程序的bin文件夹下没有debug文件夹,故添加的DLL文件与程序运行文件exe为同一路径。

我将DLL文件拷贝到我自己程序的bin文件里的debug文件夹中,在 程序中调用DLL文件的代码中,修改引用路径:DLL“..\Debug\HCNetSDK.dll”

4.在 System.Drawing.dll 中发生,尝试读取或写入受保护的内存。这通常指示其他内存已损坏

解决方法:在KingFaceDetect.cs类中的public faceDetectedObjfaceRecognize(Mat emguImage)方法的末尾加入了GC.Collect();对垃圾进行回收。

来源

二、创新开发:基于海康摄像头的人脸识别开发(能识别但卡顿严重,还有内存性问题)

1.首先把 capture = new Capture();改为

   capture = new Capture("rtsp:账号:密码@192.168.0.0:554/MPEG-4/ch1/main/av_stream");
    这一步是以流式接收视频信号,验证没有问题。

接下来就遇到了问题,在没有开始人脸识别的情况下,视频流传输正常,软件也可以运行,但是在点击人脸识别之后,会出现卡顿,闪退现象,或者报错内存已损坏,经过思考,认为是在主线程运行接收视频流时,100mms一判断会造成进程卡死,所以引入多线程,在子线程中引入对视频流的判断分析算法,但还是会造成视频卡死,后来发现在pictureBox1控件进行画面算法时会对Capture进行判断(因为视频流有时会中断,还会造成那一瞬间人脸监测为空图片,引发异常)

  picShow.Image = kfd.faceRecognize(capture.QueryFrame()).originalImg.Bitmap;

直接改为 pictureBox1.Image = kfd.faceRecognize(matImg).originalImg.Bitmap;

其中     capture.ImageGrabbed += frameProcess;

private void frameProcess(object sender, EventArgs arg)
        {
            matImg = new Mat();
            if (capture == null)
            {
                return;
            }
            else
            {
                capture.Retrieve(matImg, 0);
                picShow.Image = matImg.Bitmap;
            }
        }

修改代码段已经贴出,都修改完后再运行点击人脸识别会卡十几秒然后出来人脸识别模块,正常运行三四十秒还会造成程序的卡死状态,无法再次运行,还有一个其他错

最后还是没有成功,但是一直找不到具体的原因出现在哪里。把源代码贴出,希望哪位大神帮下忙。

https://download.csdn.net/download/lsc_hei/10864666

展开阅读全文

没有更多推荐了,返回首页