前面文章写了基于c#+虹软进行的人脸识别,最后获取到人脸的特征值(byte[]数组)将其保存起来(人脸识别之虹软_苜蓿草的博客-CSDN博客),接下来在登录的时候与其进行比较。

程序是基于winform实现的人脸自动检测,因此可以借助于VideoSourcePlayer的Paint方法来实现,Paint主要是控件重绘时调用。

private void VideoSourcePlayer1_Paint(object sender, PaintEventArgs e){//逻辑实现
}

程序的内容主要包括以下功能:

  • 判断摄像头状态

只有状态时running的时候才进入程序

if (videoSourcePlayer1.IsRunning&& resultShowImgRect){
}
  • 获取摄像头图像
Bitmap source = videoSourcePlayer1.GetCurrentVideoFrame();
  • 图像的处理,对于特别大的图像需要处理到响应范围内
        /// <summary>/// 最大宽度/// </summary>private int maxWidth = 1536;/// <summary>/// 最大高度/// </summary>private int maxHeight = 1536;/// <summary>/// 检查图片宽高/// </summary>/// <param name="bitmap"></param>/// <returns></returns>private void CheckBitmapWidthAndHeight(ref Bitmap bitmap){if (bitmap == null){return;}try{if (bitmap.Width > maxWidth || bitmap.Height > maxHeight){bitmap = (Bitmap)ImageUtil.ScaleImage(bitmap, maxWidth, maxHeight);}}catch { }}
  • 检测人脸并标识出来
//检测人脸,得到Rect框
ASF_MultiFaceInfo multiFaceInfo = FaceUtil.DetectFace(engine.ImageEngine, bitmap);
ASF_SingleFaceInfo maxFace = FaceUtil.GetMaxFace(multiFaceInfo);
MRECT rect = maxFace.faceRect;
Graphics g = e.Graphics;float offsetX = videoSourcePlayer1.Width * 1f / bitmap.Width;
float offsetY = videoSourcePlayer1.Height * 1f / bitmap.Height;
float x = rect.left * offsetX;
float width = rect.right * offsetX - x;
float y = rect.top * offsetY;
float height = rect.bottom * offsetY - y;
//根据Rect进行画框
g.DrawRectangle(Pens.Red, x, y, width, height);
  • 提取特征
ASF_SingleFaceInfo singleFaceInfo = new ASF_SingleFaceInfo();
image1Feature = FaceUtil.ExtractFeature(engine.ImageEngine, bitmap, out singleFaceInfo);
  • 与数据库里的图像进行比较,设置阈值来进行辅助判断
int ret = ASFFunctions.ASFFaceFeatureCompare(engine.ImageEngine, image1Feature, feature, ref similarity);
if (similarity > threshold)
{LogUtil.WriteLog("检测成功");
}

完整代码

private void VideoSourcePlayer1_Paint(object sender, PaintEventArgs e){try{if (videoSourcePlayer1.IsRunning&& resultShowImgRect){//得到当前RGB摄像头下的图片Bitmap source = videoSourcePlayer1.GetCurrentVideoFrame();//校验图片宽高if (source == null){return;}Bitmap bitmap = new Bitmap(source.Width, source.Height, source.PixelFormat);CheckBitmapWidthAndHeight(ref bitmap);CopyBitmap(source, bitmap);//检测人脸,得到Rect框ASF_MultiFaceInfo multiFaceInfo = FaceUtil.DetectFace(engine.ImageEngine, bitmap);//得到最大人脸ASF_SingleFaceInfo maxFace = FaceUtil.GetMaxFace(multiFaceInfo);//得到RectMRECT rect = maxFace.faceRect;//检测RGB摄像头下最大人脸Graphics g = e.Graphics;float offsetX = videoSourcePlayer1.Width * 1f / bitmap.Width;float offsetY = videoSourcePlayer1.Height * 1f / bitmap.Height;float x = rect.left * offsetX;float width = rect.right * offsetX - x;float y = rect.top * offsetY;float height = rect.bottom * offsetY - y;//根据Rect进行画框g.DrawRectangle(Pens.Red, x, y, width, height);if (!isRGBLock){if (multiFaceInfo.faceNum <= 0){LogUtil.WriteLog("没有人脸\r\n");return;}if (multiFaceInfo.faceNum > 1){LogUtil.WriteLog("检测到多个人脸\r\n");return;}LogUtil.WriteLog("开始检测人脸");//保证只检测一帧,防止页面卡顿以及出现其他内存被占用情况isRGBLock = true;//异步处理提取特征值和比对,不然页面会比较卡ThreadPool.QueueUserWorkItem(new WaitCallback(delegate{ASF_SingleFaceInfo singleFaceInfo = new ASF_SingleFaceInfo();image1Feature = FaceUtil.ExtractFeature(engine.ImageEngine, bitmap, out singleFaceInfo);//获取用户String sql = "select * from members where face_feature is not null";DataTable dt = MySqlHelper.GetDataSet(CommandType.Text, sql, null).Tables[0];Boolean issuccess = false;foreach (DataRow dr in dt.Rows){byte[] bs = (byte[])dr["face_feature"];String name = dr["name"].ToString();String memberid = dr["id"].ToString();IntPtr feature = MemoryUtil.Malloc(MemoryUtil.SizeOf<ASF_FaceFeature>());float similarity = 0f;try{ASF_FaceFeature localFeature = new ASF_FaceFeature();localFeature.feature = MemoryUtil.Malloc(bs.Length);MemoryUtil.Copy(bs, 0, localFeature.feature, bs.Length);localFeature.featureSize = bs.Length;MemoryUtil.StructureToPtr(localFeature, feature);int ret = ASFFunctions.ASFFaceFeatureCompare(engine.ImageEngine, image1Feature, feature, ref similarity);//增加异常值处理if (similarity.ToString().IndexOf("E") > -1)similarity = 0f;}catch (Exception eee){LogUtil.WriteErrorLog("byte转换指针", eee.Message);}finally{if (feature != null)MemoryUtil.Free(feature);}if (similarity > threshold){LogUtil.WriteLog("检测成功");issuccess = true;resultShowImgRect = false;//保存图片String imgPath = System.Configuration.ConfigurationManager.AppSettings["FTImg"];if (!System.IO.Directory.Exists(imgPath)) System.IO.Directory.CreateDirectory(imgPath);break;}}if (!issuccess){LogUtil.WriteLog("人脸检测失败,没有匹配的!");Thread.Sleep(2000);isRGBLock = false;}bitmap.Dispose();}));}}}catch (Exception ex){LogUtil.WriteErrorLog("检测1!", ex.Message);}}

人脸识别之虹软-登录功能的实现相关推荐

  1. springBoot redis开发的Java快递代拿系统(含人脸识别,验证码登录)

     源码获取:我的博客资源页面可以下载!!!! 项目名称 springBoot redis开发的Java快递代拿系统(含人脸识别,验证码登录) 系统介绍 快递代拿系统 > 该项目使用当前最为流行的 ...

  2. 校园人脸识别安全系统有哪些功能

    在智慧校园人脸识别应用中,有效识别校外人员以及不法人员,是保障师生安全的关键.随着人脸识别技术的提升以及在各个行业应用落地成熟,智慧校园.平安校园的建设,人脸识别技术逐渐被引入到校园场景中应用. 校园 ...

  3. php百度人脸识别做登陆,php调用百度人脸识别接口查询数据库人脸信息实现验证登录功能...

    博主在进行鼎食城毕业设计时,需要实现一个人脸识别登录功能,想到可以利用百度的人脸识别接口来完成,于是便去下载了百度的识别SDK,我用的是PHP,需要的的可以去下载其他版本,以下是识别效果: 用户在开始 ...

  4. php 人脸识别接口,php调用百度人脸识别接口查询数据库人脸信息实现验证登录功能...

    博主在进行鼎食城毕业设计时,需要实现一个人脸识别登录功能,想到可以利用百度的人脸识别接口来完成,于是便去下载了百度的识别SDK,我用的是PHP,需要的的可以去下载其他版本,以下是识别效果: 用户在开始 ...

  5. VB6.0人脸识别(使用虹软人脸识别SDK)

    需求:现有VB6.0的项目需要实现人脸识别功能. 问题:  自身完成VB6.0人脸识别不行.故借助虹软SDK.虹软SDK没有Demo可看.所以下载C#2.2版本Demo. 解决:  1.虹软SDK使用 ...

  6. 人脸识别算法虹软arcface和Dlib对比

    我司最近要做和人脸识别相关的产品,原来使用的是其他的在线平台,识别率和识别速度很满意,但是随着量起来的话,成本也是越来越不能接受(目前该功能我们是免费给用户使用的),而且一旦我们的设备掉线了就无法使用 ...

  7. php刷脸登录,PHP实现微信小程序人脸识别刷脸登录功能

    首先我们先确认我们的百度云人脸库里已经上传了我们的个人信息照片  关注cs代写,有帮助! 然后我们在后台写刷脸登陆的接口login我们要把拍照获取的照片存储到服务器 public function l ...

  8. 人脸识别属于特异大脑功能

    人具有根据他人的面部特征来区分不同人的能力,但这种识别人脸的能力和识别其他类似物体的能力是否来自同一大脑功能,过去一直存在争议.最近美国科学家研究发现,人类识别人面的能力和识别非人脸目标不是同样的大脑 ...

  9. 人脸识别智能服务器,【功能实测】大华股份DH-IVS-F7300 动态人脸识别服务器

    大华人脸识别服务器 DH-IVS-F7300系列是大华研发的新一代智能视频分析服务器,产品具有人脸实时抓拍.实时建库.布控报警.抓拍库检索历史轨迹和注册库检索.人像库相互比对等功能,可应用于重点通道出 ...

最新文章

  1. 《zabbix用户权限分配管理》-8
  2. 34 个火爆全网的Python开源框架
  3. 解决DeferredResult 使用 @ResponseBody 注解返回中文乱码
  4. 查看计算机.net环境版本,windows7系统查看NET Framework版本的两种方法
  5. 【OpenCV 例程200篇】44. 图像的灰度变换(伽马变换)
  6. java适配器模式_适配器模式的设计,你get到了吗?
  7. 服务器网站管理页面打不开解决方法
  8. laravel ::all() 选择字段_Laravel 性能优化:优化 ORM 性能使应用程序高可用
  9. 计算机三级数据库:课本知识点总结以及备考方案建议
  10. 蓝牙耳机测试软件apk_蓝牙5.0手机如何测试检测分辨?这款免费APP帮大忙
  11. 整理一下第一次参加华为大数据挑战赛自己的一些收获吧(正式赛篇阶段一)
  12. QT视频采集之编码Enc和录像Rec
  13. 苹果电脑一直密码错误_您可能一直都在犯的安全和密码错误
  14. fastadmin 邮件配置
  15. 【eBay大赛专访特辑3】华北、中西部赛区人才济济,看他们如何乘风破浪!
  16. 基于Pytorch实现的快速人脸识别模型
  17. 做网站需要用到哪些开发软件——心得分享
  18. JMeter基础系列(八) JMeter断言之JSON断言
  19. windows下sass开发环境的搭建
  20. xp计算机限制打开u盘,winxp电脑提示U盘拒绝访问怎么修复

热门文章

  1. CDN和双线机房相比有何优势
  2. Python 开发速度快,你不得不承认!
  3. 牛仔激光烧花,牛仔激光洗水设备
  4. 华硕服务器显示b7是什么意思,技嘉G1.Sniper B7
  5. 新浪微博粉丝通推广简介
  6. C语言文件操作-总是打不开文本文档
  7. Youtube DoubleClick 阿里妈妈 FreeWheel?
  8. 电信网阵营 互联网阵营
  9. JavaWeb - Servlet实现文件下载漂亮小姐姐视频(文末有小姐姐视频Gif图哦)
  10. 软件工程实习面试总结(Java开发方向)