baiduAIFaceIdentify项目是C#语言,集成百度AI的SDK利用AForge开发的实时人脸识别的小demo,里边包含了人脸检测识别,人脸注册,人脸登录等功能

人脸实时检测识别功能

思路是利用AForge打开摄像头,通过摄像头获取到的图像显示在winform窗体中AForge的控件中,利用AForge控件中的NewFrame事件获取要显示的每一帧的图像,获取图像传输到百度AI平台进行人脸检测,并且将检测结果反馈到界面显示的图像中。在这个过程中有两个问题,获取图像上传到百度AI平台进行分析需要时间,这个时间跟网络有关,所以需要单独一个线程进行人脸识别,第二个问题,百度人脸识别接口开发者一秒内只能掉用2次接口,所以需要控制不是每一帧的图像都要上传。所以基于以上思路

首先页面初始化的时候获取视频设备、启动一个单独线程控制1秒内人脸检测的次数:

private void Form1_Load(object sender, EventArgs e){/// 获取电脑已经安装的视频设备videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);if (videoDevices!=null && videoDevices.Count>0){foreach (FilterInfo device in videoDevices){comboBox1.Items.Add(device.Name);}comboBox1.SelectedIndex = 0;}videoSourcePlayer1.NewFrame += VideoSourcePlayer1_NewFrame;// 开发者在百度AI平台人脸识别接口只能1秒中调用2次,所以需要做 定时开始检测,每个一秒检测2次ThreadPool.QueueUserWorkItem(new WaitCallback(p => {while (true){IsStart = true;Thread.Sleep(500);}}));}

其次,在NewFrame的回调方法中,根据IsStart判断是否要开始人脸识别,并且另外启动一个线程进行人脸识别操作,判断如果已经有识别过的结构,根据返回的人脸的位置,在当前的一帧图像中绘制方框指示出识别出的人脸位置

private void VideoSourcePlayer1_NewFrame(object sender, ref Bitmap image){try{if (IsStart){IsStart = false;// 在线程池中另起一个线程进行人脸检测,这样不会造成界面视频卡顿现象ThreadPool.QueueUserWorkItem(new WaitCallback(this.Detect), image.Clone());}if (location != null){try{// 绘制方框套住人脸Graphics g = Graphics.FromImage(image);g.DrawLine(new Pen(Color.Black), new System.Drawing.Point(location.left, location.top), new System.Drawing.Point(location.left + location.width, location.top));g.DrawLine(new Pen(Color.Black), new System.Drawing.Point(location.left, location.top), new System.Drawing.Point(location.left, location.top + location.height));g.DrawLine(new Pen(Color.Black), new System.Drawing.Point(location.left, location.top + location.height), new System.Drawing.Point(location.left + location.width, location.top + location.height));g.DrawLine(new Pen(Color.Black), new System.Drawing.Point(location.left + location.width, location.top), new System.Drawing.Point(location.left + location.width, location.top + location.height));g.Dispose();}catch (Exception ex){ClassLoger.Error("VideoSourcePlayer1_NewFrame", ex);}}} catch (Exception ex){ClassLoger.Error("VideoSourcePlayer1_NewFrame1", ex);}}

人脸注册。

在一些类似刷脸签到、刷脸登录的应用场景中,根据人脸获取人物信息,前提就是人脸注册,人脸注册就是获取当前摄像头的一帧图像,调用百度AI的人脸注册接口进行注册

// 用户IDstring uid = "1";// 用户资料,长度限制256Bstring userInfo = textBox6.Text.Trim();// 用户组IDstring groupId = textBox5.Text.Trim();if (comboBox1.Items.Count <= 0){MessageBox.Show("请插入视频设备");return;}try{if (videoSourcePlayer1.IsRunning){BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(videoSourcePlayer1.GetCurrentVideoFrame().GetHbitmap(),IntPtr.Zero,Int32Rect.Empty,BitmapSizeOptions.FromEmptyOptions());var img = BitmapSource2Byte(bitmapSource);var options = new Dictionary<string, object>{{"action_type", "replace"}};var result = client.UserAdd(uid, userInfo, groupId, img, options);if (result.ToString().Contains("error_code")){MessageBox.Show("注册失败:" + result.ToString());}else{MessageBox.Show("注册成功");}}}catch (Exception ex){MessageBox.Show("摄像头异常:" + ex.Message);}

人脸登录

人脸登录和人脸注册的方式一样,只不过调用的是百度AI的人脸登录接口

// 用户IDstring uid = "1";// 用户资料,长度限制256Bstring userInfo = textBox6.Text.Trim();// 用户组IDstring groupId = textBox5.Text.Trim();if (comboBox1.Items.Count <= 0){MessageBox.Show("请插入视频设备");return;}try{if (videoSourcePlayer1.IsRunning){BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(videoSourcePlayer1.GetCurrentVideoFrame().GetHbitmap(),IntPtr.Zero,Int32Rect.Empty,BitmapSizeOptions.FromEmptyOptions());var img = BitmapSource2Byte(bitmapSource);// 如果有可选参数//var options = new Dictionary<string, object>{//    {"ext_fields", "faceliveness"},//    {"user_top_num", 3}//};var result = client.Identify(groupId, img);FaceIdentifyInfo info = JsonHelper.DeserializeObject<FaceIdentifyInfo>(result.ToString());if (info!=null && info.result!=null && info.result.Length>0){textBox7.Text = info.result[0].user_info;}}}catch (Exception ex){MessageBox.Show("摄像头异常:" + ex.Message);}

源码地址:https://github.com/liemei/baiduAIFaceIdentify

转载于:https://www.cnblogs.com/liemei/p/8318414.html

c# 利用AForge和百度AI开发实时人脸识别相关推荐

  1. 人脸检测颜值软件_AI人脸颜值测颜版下载-百度ai测试颜值人脸识别源码下载v1.0 免费版-西西软件下载...

    百度ai测试颜值人脸识别源码这是由官方百度AI精心打造出来的,这款软件将人脸识别氛围V2和V3两个接口,而且用户使用可以参考相应的文档权限来选择接口类型,让广大用户学习到百度AI人脸识别测颜值相关知识 ...

  2. Python利用百度AI平台实现人脸识别

    前言 百度AI平台提供的接口十分丰富,对于做项目来说,百度是一个很好的开放平台.本文利用百度提供的接口来实现人脸识别,而且可以无限制调用.博客参考人脸识别-Python-SDK 安装 pip inst ...

  3. 基于百度AI平台的人脸识别评分小程序

    face-recognition-scoring-applet 开放源代码,遵循Apache License 2.0 效果展示 可切换摄像头.拍照.从相册选择 效果预览 小程序账号注册及配置 地址:h ...

  4. 【人脸识别】调用百度AI开放平台人脸识别接口,获取图片结果

    1.获取接口权限 (1)获取AppID,API Key和Secret Key 进入百度云人脸识别平台,点击"应用列表"一栏,创建应用: 创建完应用,就可以看到相应的"Ap ...

  5. 如何使用百度 AI 去实现人脸识别?

    注册百度 AI 开发者账号:前往百度 AI 开放平台(https://ai.baidu.com/)进行注册,并创建自己的应用. 获取 API Key 和 Secret Key:在应用管理页面中获取 A ...

  6. python+百度ai平台实现人脸识别

    python调用百度AI开放平台真的好简单啊,之前试过c++调用,但是配置那三个库已经把我心态搞崩了,尼玛还有两个是嵌套的.所以python大法好.        言归正传,我用的是百度的sdk,对应 ...

  7. java通过百度AI开发平台提取身份证图片中的文字信息

    废话不多说,直接上代码... IdCardDemo.java 1 package com.wulss.baidubce; 2 3 import java.io.BufferedReader; 4 im ...

  8. Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别

    Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 # -*- codin ...

  9. 微信小程序+百度AI OCR二代身份证识别

    微信小程序内虽然有OCR识别功能 但是收费是按次计费的,还是选用了百度ai提供的OCR识别二代身份证. // 上传人面像upFileFront:function(e){let type = e.cur ...

最新文章

  1. 文件传输:二进制文件传输与文本传输(file transfer)
  2. 【SF】开源的.NET CORE 基础管理系统 -介绍篇
  3. 一个屌丝程序猿的人生(七十七)
  4. css中 Span 元素的 width 属性无效果原因及多种解决方案
  5. ES_BoolQueryBuilder
  6. 242.有效的字母异位词
  7. 用adb pull命令从android系统中读取文件失败的原因及解决办法
  8. 计算机辅助药物设计中的分子动力学模拟
  9. MybatisPlus学习笔记
  10. php-java-net-python-刺绣添加厂商信息计算机毕业设计程序
  11. 模式串匹配Aho–Corasic算法 python实现
  12. 关于笔记本加固态硬盘装系统的问题的解决办法
  13. 【云和恩墨大讲堂】高凯 | Oracle 12c 新特性-多租户的维护管理
  14. 酒链世界为何会火起来?酒链世界是什么?
  15. 通许县中等职业学校计算机,2021通许县中等职业学校招生简章
  16. 信号采样基本概念 —— 1. 冲激函数
  17. lopa分析_保护层分析(LOPA)
  18. 【车辆计数】基于matlab GUI背景差分法道路行驶多车辆检测【含Matlab源码 1911期】
  19. 安卓逆向Xposed HOOK TB直播APP的x-sign参数
  20. Linux安装Elasticsearch详细教程

热门文章

  1. linux视音频解码教程,音视频编解码:NVIDIA Jetson Linux Multimedia API(总结)
  2. 查询 service monitor 时发生内部错误_通过Service访问应用 (1)
  3. vue设置标签自定义属性_Vue组件化开发之插槽
  4. 【RTMP协议分析与抓包实测】
  5. 【C语言笔记】指定初始化器
  6. dz自动开起html,discuz论坛开启markdown 允许html代码嵌入js
  7. mysql ondelete_MySQL on delete cascade语句
  8. jsp标签 判断 余数_舟山铝箔纸不干胶标签制作-雷宝实业
  9. W10关闭不必要的服务
  10. 视频光端机在安防监控工程中的常见技术问题