c# 利用AForge和百度AI开发实时人脸识别
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>)
{
foreach (FilterInfo device in videoDevices)
{
comboBox1.Items.Add(device.Name);
}
comboBox1.SelectedIndex = ;
}
videoSourcePlayer1.NewFrame += VideoSourcePlayer1_NewFrame; // 开发者在百度AI平台人脸识别接口只能1秒中调用2次,所以需要做 定时开始检测,每个一秒检测2次
ThreadPool.QueueUserWorkItem(new WaitCallback(p => {
while (true)
{
IsStart = true;
Thread.Sleep();
}
}));
}
其次,在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的人脸注册接口进行注册
// 用户ID
string uid = "";
// 用户资料,长度限制256B
string userInfo = textBox6.Text.Trim();
// 用户组ID
string groupId = textBox5.Text.Trim(); if (comboBox1.Items.Count <= )
{
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的人脸登录接口
// 用户ID
string uid = "";
// 用户资料,长度限制256B
string userInfo = textBox6.Text.Trim();
// 用户组ID
string groupId = textBox5.Text.Trim(); if (comboBox1.Items.Count <= )
{
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>)
{
textBox7.Text = info.result[].user_info;
}
}
}
catch (Exception ex)
{
MessageBox.Show("摄像头异常:" + ex.Message);
}
源码地址:https://github.com/liemei/baiduAIFaceIdentify
c# 利用AForge和百度AI开发实时人脸识别的更多相关文章
- python基于百度AI开发文字识别
很多场景都会用到文字识别,比如app或者网站里都会上传身份证等证件以及财务系统识别报销证件等等 第一步,你需要去百度AI里去注册一个账号,然后新建一个文字识别的应用 然后你将得到一个API Key 和 ...
- java通过百度AI开发平台提取身份证图片中的文字信息
废话不多说,直接上代码... IdCardDemo.java package com.wulss.baidubce; import java.io.BufferedReader; import jav ...
- 利用PHP和百度ai实现文本以及图片的审核
步骤: 首先打开百度ai 开发平台 注册一个账号: 注册账号,进入控制台 创建自己的应用,获取apikey 和秘钥 进入文档页 文本审核: 图像审核: 代码实例: class Sentive { pr ...
- Asp.net+WebSocket+Emgucv实时人脸识别
上个月在网上看到一个用web实现简单AR效果的文章,然后自己一路折腾,最后折腾出来一个 Asp.net+WebSocket+Emgucv实时人脸识别的东西,网上也有不少相关资料,有用winform的也 ...
- 使用dlib中的深度残差网络(ResNet)实现实时人脸识别
opencv中提供的基于haar特征级联进行人脸检测的方法效果非常不好,本文使用dlib中提供的人脸检测方法(使用HOG特征或卷积神经网方法),并使用提供的深度残差网络(ResNet)实现实时人脸识别 ...
- 百度AI开发平台简介
AIstudio https://aistudio.baidu.com/aistudio/index 关于AI Studio AI Studio是基于百度深度学习平台飞桨的一站式AI开发平台,提供在线 ...
- 初探机器学习之使用百度AI服务实现图片识别与相似图片
一.百度云AI服务 最近在调研一些云服务平台的AI(人工智能)服务,了解了一下阿里云.腾讯云和百度云.其中,百度云提供了图像识别及图像搜索,而且还细分地提供了相似图片这项服务,比较符合我的需求,且百度 ...
- 用百度AI的OCR文字识别结合JAVA实现了图片的文字识别功能
第一步可定要获取百度的三个东西 要到百度AI网站(http://ai.baidu.com/)去注册 然后获得 -const APP_ID = '请填写你的appid'; -const API_KEY ...
- django--调用百度AI接口实现人脸注册登录
面部识别----考勤打卡.注册登录.面部支付等等...感觉很高大上,又很方便,下面用python中的框架--django完成一个注册登录的功能,调用百度AI的接口,面部识别在网上也有好多教程,可以自己 ...
随机推荐
- ruby中Regexp用法
Regexp 正则表达式的类.正则表达式的字面值是以双斜线内夹表达式的形式生成的. /^this is regexp/ 还可以使用Regexp.new(string)来动态地生成正则表达式对象. 超类 ...
- Beta阶段——Scrum 冲刺博客第四天
一.当天站立式会议照片一张 二.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中 昨天已完成的工作 完成对question界面的制作,完善随机出题界面,能够流畅的切换下一题与 ...
- [BJOI 2018]求和
Description 题库链接 给你一棵 \(n\) 个结点的有根树, \(m\) 次询问这棵树上一段路径上所有节点深度的 \(k\) 次方和. \(1\leq n\leq 300000,1\leq ...
- Linux多线程 - 基本操作
0. 线程 vs 进程 何为线程?线程即轻量级进程,如何理解轻量级这个概念? 我们知道,Linux的资源分为用户空间资源和内核空间资源: 用户空间资源:用来存放用户自定义的一些数据,用户可直接控制: ...
- office中把标题之后的空格去掉
调整列表缩进--编号之后不特别标注可以把标题之后的空格去掉
- @EnableAutoConfiguration和@SpringbootApplication注解
一.@EnableAutoConfiguration 这个注释告诉SpringBoot“猜”你将如何想配置Spring,基于你已经添加jar依赖项.如果spring-boot-starter-web已 ...
- 谷歌旗下专业图片编辑Snapseed获重大更新
谷歌旗下的图片编辑应用Snapseed今天获得重大更新,承诺为用户的手机或者平板带来“精确和卓越控制的专业图片编辑软件”.Android和iOS版本同时获得更新,新增包括镜头模糊.色条对比.更加灵活的 ...
- 读取配置文件-AppConfig
using System.Xml; using System.IO; using System; namespace Framework.Common { /// <summary> // ...
- HTML杂项和HTML废弃标签
一.HTML杂项 1.HTML注释 <!-- 里边放要注释的文字 --> 1)html的注释是为了方便后期的维护,方便后期更改时能够快速的定位到所需更改的部分 2)html的注释在页面的 ...
- xib Nib IB 可视化编程详解
简单的说,Xib就是拖控件编程,也可以说是可视化编程. 相对于代码,使用IB和xib文件来组织UI,可以省下大量代码和时间,从而得到更快的开发速度. 如果你曾经受到过微软家Visual Basic或者 ...