人脸认证源码faceIdentify详解

本文实例为大家分享了人脸认证源码faceIdentify的具体代码,供大家参考,具体内容如下

人脸认证:

using AForge.Video.DirectShow;
using face;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Camtest
{
 public partial class faceIdentify : Form
 {
  public faceIdentify()
  {
   InitializeComponent();
   //启动默认在屏幕中间
   this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
  }
  //Api_Key
  public static string Api_Key = "OVYw5Ok0y9U8n6CfVPYt0wfZ";
  //Secret_Key
  public static string Secret_Key = "aCN3lupCarq3rC9G8Rylqz1d36Towp8G";
  FilterInfoCollection videoDevices;
  VideoCaptureDevice videoSource;
  public int selectedDeviceIndex = 0;
  public int selectedPICIndex = 0;

  //窗体加载
  private void faceIdentify_Load(object sender, EventArgs e)
  {
   //显示为正在检测
   this.label1.Text = this.label2.Text = this.label6.Text = this.label9.Text = "正在识别";

   // 刷新可用相机的列表
   videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
   comboBoxCameras.Items.Clear();

   for (int i = 0; i < videoDevices.Count; i++)
   {
    comboBoxCameras.Items.Add(videoDevices[i].Name.ToString());
   }

   if (comboBoxCameras.Items.Count > 0)
    comboBoxCameras.SelectedIndex = 0;
   picsize.SelectedIndex = 0;

   //打开摄像头
   openCamera();
  }

  //打开摄像头
  public void openCamera()
  {
   selectedPICIndex = picsize.SelectedIndex;

   selectedDeviceIndex = comboBoxCameras.SelectedIndex;
   //连接摄像头。
   videoSource = new VideoCaptureDevice(videoDevices[selectedDeviceIndex].MonikerString);
   videoSource.VideoResolution = videoSource.VideoCapabilities[selectedDeviceIndex];
   // 枚举所有摄像头支持的像素,设置拍照为1920*1080
   foreach (VideoCapabilities capab in videoSource.VideoCapabilities)
   {
    if (selectedPICIndex == 0)
    {
     if (capab.FrameSize.Width == 1920 && capab.FrameSize.Height == 1080)
     {
      videoSource.VideoResolution = capab;
      break;
     }
     if (capab.FrameSize.Width == 1280 && capab.FrameSize.Height == 720)
     {
      videoSource.VideoResolution = capab;
      break;
     }
    }
    else
    {
     if (capab.FrameSize.Width == 1280 && capab.FrameSize.Height == 720)
     {
      videoSource.VideoResolution = capab;
      break;
     }
    }
   }
   videoSourcePlayer1.VideoSource = videoSource;

   // set NewFrame event handler
   videoSourcePlayer1.Start();
  }

  /// <summary>
  /// 签到的按钮
  /// 先保存图片,然后进行比较,获取的id,查询
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void qiandao_Click(object sender, EventArgs e)
  {
   Users users = FaceIdentifys(SavePicture());
   this.label1.Text = users.age.ToString();
   this.label2.Text = users.name;
   this.label6.Text = users.phone;
   this.label9.Text = users.address;
   if (users.picture != null)
   {
    this.pictureBox1.Image = Image.FromFile(users.picture, false);
   }

  }

  //关闭窗口
  private void faceIdentify_FormClosing(object sender, FormClosingEventArgs e)
  {
   DialogResult r = MessageBox.Show("确定要退出程序?", "操作提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
   if (r != DialogResult.OK)
   {

    e.Cancel = true;
   }
   videoSourcePlayer1.Stop();//停止摄像头
   videoSourcePlayer1.Dispose();
  }

  /// <summary>
  /// 人脸识别
  /// </summary>
  /// <param name="filename"></param>
  public static Users FaceIdentifys(string filename)
  {
   long id = 0;
   string ids = "";
   double scores_num = 0;
   Users user = new Users();
   var client = new Baidu.Aip.Face.Face(Api_Key, Secret_Key);
   var image1 = File.ReadAllBytes(filename);
   var result = client.User.Identify(image1, new[] { "gr_test" }, 1, 1);
   //先判断脸是不是在上面,在继续看有匹配的没,否则提示放上脸
   //得到根节点
   JObject jo_result = (JObject)JsonConvert.DeserializeObject(result.ToString());
   if ((string)jo_result["error_msg"] != null)
   {
    MessageBox.Show("对不起,请把脸放上!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
   }
   else
   {
    //检测到脸
    //得到result节点
    JArray jo_age = (JArray)JsonConvert.DeserializeObject(jo_result["result"].ToString());
    foreach (var val in jo_age)
    {
     id = long.Parse(((JObject)val)["uid"].ToString()); //获取uid
     string scores = ((JObject)val)["scores"].ToString();//获取scores
     int num1 = scores.IndexOf("\n") + 2;
     int num2 = scores.LastIndexOf("]")-8;
     ids = scores.Substring(num1, num2);
     scores_num =double.Parse(ids);
    }
    if (scores_num > 80)
    {
     user = QueryUsersById(id);
     if (user.id != 0)
     {
      MessageBox.Show("签到成功,已检测到您的信息", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     else
     {
      MessageBox.Show("对不起,系统根据您的脸未检测到信息", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
     }
    }
    else {
     MessageBox.Show("对不起,系统根据您的脸未检测到信息", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
    }

   }
   return user;

  }

  /// <summary>
  /// 保存图片
  /// </summary>
  public string SavePicture()
  {
   if (videoSource == null)
   {
    return null;
   }

   Bitmap bitmap = videoSourcePlayer1.GetCurrentVideoFrame();
   //图片名称,年月日时分秒毫秒.jpg
   string fileName = DateTime.Now.ToString("yyyyMMddHHmmssff") + ".jpg";

   //获取项目的根目录
   string path = AppDomain.CurrentDomain.BaseDirectory;
   string picture = path + "\\picture\\" + fileName;
   //将图片保存在服务器里面
   bitmap.Save(picture, ImageFormat.Jpeg);
   bitmap.Dispose();
   return picture;
  }

  /// <summary>
  /// 根据编号查询用户信息
  /// </summary>
  /// <param name="id"></param>
  /// <returns></returns>
  public static Users QueryUsersById(long id)
  {

   Users user = new Users();
   string sql = "select * from users where id = @id";
   using (SqlDataReader reader = SqlHelper.ExcuteReader(sql, CommandType.Text, new SqlParameter("@id", id)))
   {
    if (reader.Read())
    {
     user.id = long.Parse(reader[0].ToString());
     user.name = reader[1].ToString();
     user.age = Convert.ToInt32(reader[2]);
     user.phone = reader[3].ToString();
     user.password = reader[4].ToString();
     user.address = reader[5].ToString();
     user.picture = reader[6].ToString();
    }
   }
   return user;
  }

  //取消的按钮
  private void close_Click(object sender, EventArgs e)
  {
   //停止摄像头
   videoSourcePlayer1.Stop();
   this.Close();
   welcome we = new welcome();
   we.Show();
  }

 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C# 10分钟完成百度人脸识别(入门篇)

    嗨咯,小编在此祝大家新年快乐财多多! 今天我们来盘一盘人脸注册.人脸识别等相关操作,这是一个简单入门教程. 话不多说,我们进入主题: 完成人脸识别所需的步骤: 注册百度账号api,创建自己的应用: 创建vs控制台应用程序,引入动态链接库: 编写代码调试,效果图查看: 总结. 1.注册百度账号api,创建自己的应用 注册地址: https://login.bce.baidu.com/ 注册登录之后,在"产品服务" 菜单下找到人脸识别 ,如下图: 点击去创建自己的应用名称,其实最主要的就是

  • C#开发的人脸左右相似度计算软件源码分析

    本文实例讲述了C#开发的人脸左右相似度计算软件.分享给大家供大家参考.具体分析如下: 模仿湖南卫视快乐大本营中所使用的一款人脸左右对称相似度计算软件,自己写的一个小软件,使用语言是C#,希望跟喜欢这个软件的同志们共享! 1. FaceClass类程序 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Dra

  • C#实现基于ffmpeg加虹软的人脸识别的示例

    关于人脸识别 目前的人脸识别已经相对成熟,有各种收费免费的商业方案和开源方案,其中OpenCV很早就支持了人脸识别,在我选择人脸识别开发库时,也横向对比了三种库,包括在线识别的百度.开源的OpenCV和商业库虹软(中小型规模免费). 百度的人脸识别,才上线不久,文档不太完善,之前联系百度,官方也给了我基于Android的Example,但是不太符合我的需求,一是照片需要上传至百度服务器(这个是最大的问题),其次,人脸的定位需要自行去实现(捕获到人脸后上传进行识别). OpenCV很早以前就用过,

  • 人脸认证源码faceIdentify详解

    本文实例为大家分享了人脸认证源码faceIdentify的具体代码,供大家参考,具体内容如下 人脸认证: using AForge.Video.DirectShow; using face; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using S

  • java TreeMap源码解析详解

    java TreeMap源码解析详解 在介绍TreeMap之前,我们来了解一种数据结构:排序二叉树.相信学过数据结构的同学知道,这种结构的数据存储形式在查找的时候效率非常高. 如图所示,这种数据结构是以二叉树为基础的,所有的左孩子的value值都是小于根结点的value值的,所有右孩子的value值都是大于根结点的.这样做的好处在于:如果需要按照键值查找数据元素,只要比较当前结点的value值即可(小于当前结点value值的,往左走,否则往右走),这种方式,每次可以减少一半的操作,所以效率比较高

  • IOS身份证识别(OCR源码)详解及实例代码

    IOS身份证识别(OCR源码)详解 最近项目用到身份证识别,在github上搜了一堆demo,在Google上找了一堆代码,有能识别出证件照的,但是都是打包成.a的静态库,没有源码,我努力吃了几天书,有了一点研究成果,现在贴出来与大家分享,要是有更好的方法,希望大神指正,共同探讨解决方案.(以下代码本人亲测可用,正在进一步探索智能识别,如有兴趣,请加入) 这里用到了两个开源库:OpenCV.TesseractOCRiOS,两个语言包chi_sim.eng.身份证识别的流程主要有:灰度化,阀值二值

  • Python日志打印里logging.getLogger源码分析详解

    实践环境 WIN 10 Python 3.6.5 函数说明 logging.getLogger(name=None) getLogger函数位于logging/__init__.py脚本 源码分析 _loggerClass = Logger # ...略 root = RootLogger(WARNING) Logger.root = root Logger.manager = Manager(Logger.root) # ...略 def getLogger(name=None): "&quo

  • Vue之vue.$set()方法源码案例详解

    在使用vue开发项目的过程中,经常会遇到这样的问题:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的. 这是因为新加入的属性不是响应式的,因此不会触发视图的更新,通常使用静态方法Vue.set()或者实例方法this.$set()解决 ,使用方式: 对象:this.$set(target,key,  value) 数组:this.$set(target,index,  value) 但不管是静态方法Vue.

  • Java Spring @Lazy延迟注入源码案例详解

    前言 有时候我们会在属性注入的时候添加@Lazy注解实现延迟注入,今天咱们通过阅读源码来分析下原因 一.一个简单的小例子 代码如下: @Service public class NormalService1 { @Autowired @Lazy private MyService myService; public void doSomething() { myService.getName(); } } 作用是为了进行延迟加载,在NormalService1进行属性注入的时候,如果MyServ

  • Android Handler,Message,MessageQueue,Loper源码解析详解

    本文主要是对Handler和消息循环的实现原理进行源码分析,如果不熟悉Handler可以参见博文< Android中Handler的使用>,里面对Android为何以引入Handler机制以及如何使用Handler做了讲解. 概括来说,Handler是Android中引入的一种让开发者参与处理线程中消息循环的机制.我们在使用Handler的时候与Message打交道最多,Message是Hanlder机制向开发人员暴露出来的相关类,可以通过Message类完成大部分操作Handler的功能.但

  • Spring源码BeanFactoryPostProcessor详解

    Spring源码分析-BeanFactoryPostProcessor BeanFactoryPostProcessor接口是Spring提供的对Bean的扩展点,它的子接口是BeanDefinitionRegistryPostProcessor @FunctionalInterface public interface BeanFactoryPostProcessor { void postProcessBeanFactory(ConfigurableListableBeanFactory b

  • kotlin源码结构层次详解

    目录 协程源码的结构 基础层 中间层 平台层 协程源码的结构 在研究Kotlin源码之前,得先搞懂Kotlin源码结构分布.不然找不到该看哪里的代码.看源码之前当然先得有一个目标,最好是带着这个目标去看源码才比较有针对性,抓主流程,不然可能会陷入浩瀚的源码细节中. 协程源码,按道理可以分成2个仓库,一个是Kotlin仓库,一个是Kotlin协程仓库. Kotlin仓库 https://github.com/JetBrains/kotlin 协程仓库 kotlinx.coroutines http

  • React commit源码分析详解

    目录 总览 commitBeforeMutationEffects commitMutationEffects 插入 dom 节点 获取父节点及插入位置 判断当前节点是否为单节点 在对应位置插入节点 更新 dom 节点 更新 HostComponent 更新 HostText 删除 dom 节点 unmountHostComponents commitNestedUnmounts commitUnmount commitLayoutEffects 执行生命周期 处理回调 总结 总览 commit

随机推荐