百度ai人脸识别项目C#

一、项目描述

本项目通过集成百度AI人脸识别API,实现了人脸检测和识别功能。用户可以上传图片,系统将自动识别人脸并返回识别结果。

二、开发环境

  • Visual Studio 2019或更高版本
  • .NET Framework 4.7.2或更高版本
  • AForge.NET库
  • 百度AI平台人脸识别API

三、具体实现

1.界面设计

1.1所用的库

  1. AForge.Controls
    • VideoSourcePlayer
  2. AForge.Video
    • VideoCaptureDevice
  3. AForge.Video.DirectShow
    • FilterInfoCollection
    • FilterInfo
  4. Baidu.Aip.Face
    • Face
  5. BaiduAI.Common
    • ClassLoger
    • JsonHelper
  6. Newtonsoft.Json.Linq
    • JArray
    • JObject
  7. System
    • 各种基本的系统功能和类型(如 Exception, EventArgs, 等等)
  8. System.Collections.Generic
    • Dictionary
  9. System.ComponentModel
    • BackgroundWorker 和其他组件模型支持
  10. System.Data
    • 数据处理
  11. System.Drawing
    • Image, Bitmap, Graphics, Pen, Point
  12. System.Drawing.Imaging
    • ImageFormat
  13. System.IO
    • 文件操作,如 File, FileStream, MemoryStream, Path, 等等
  14. System.Linq
    • LINQ 查询
  15. System.Security.Policy
    • 安全策略
  16. System.Text
    • StringBuilder
  17. System.Threading
    • Thread, ThreadPool, WaitCallback
  18. System.Windows.Forms
    • 各种 WinForms 控件(如 Form, Button, TextBox, OpenFileDialog, MessageBox, ComboBox, 等等)
  19. System.Windows.Interop
    • Imaging
  20. System.Windows.Media.Imaging
    • BitmapSource, BitmapFrame, BitmapSizeOptions, JpegBitmapEncoder, PngBitmapEncoder

1.2所用到的控件

  1. Form1
    • WinForms 窗体类
  2. Button
    • button1, button2, button3, button4, button5, button6, button7, button8, button9
  3. TextBox
    • textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, textBox7
  4. ComboBox
    • comboBox1
  5. OpenFileDialog
    • 文件打开对话框
  6. MessageBox
    • 信息框
  7. VideoSourcePlayer
    • 来自 AForge.Controls,用于视频显示
  8. WindowsMediaPlayer
    • axWindowsMediaPlayer1,用于播放音频(使用 AxWindowsMediaPlayer 控件)

1.3最终设计界面显示如下:

2.代码实现

2.0初始化

首先要在百度AI官网注册账号然后再人脸识别项目中申请创建应用,就可以获得自己的APP_ID,API_KEY,SECRET_KEY。

using AForge.Controls;
using AForge.Video;
using AForge.Video.DirectShow;
using Baidu.Aip.Face;
using BaiduAI.Common;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Text;
using System.Threading;
using System.Windows.Forms;namespace BaiduAI
{public partial class Form1 : Form{private readonly string APP_ID = "8xxx0583";private readonly string API_KEY = "Chxxxx3evL5rPW3skOL";private readonly string SECRET_KEY = "VT2FxxxxqEH1ZYcJSw";private Face client = null;private bool IsStart = false;private FaceLocation location = null;private FilterInfoCollection videoDevices = null;private VideoCaptureDevice videoSource;public Form1(){InitializeComponent();axWindowsMediaPlayer1.uiMode = "Invisible";client = new Face(API_KEY, SECRET_KEY);}}
}

2.1人脸检测

1.下面的自己的图片文件路径替换进去的话,使用应用的时候点击按钮就会先进入这个文件夹里面找图片,如果不更改的话,系统找不到文件路径,可能会按默认的进去。

2.设置参数这里,可以去官网的人脸识别技术文档里面查看具体有哪些token可以设置,也有一些参数有默认值。

private void button1_Click(object sender, EventArgs e)
{OpenFileDialog dialog = new OpenFileDialog();dialog.InitialDirectory = "C:\\";//自己的图片文件路径dialog.Filter = "所有文件|*.*";dialog.RestoreDirectory = true;dialog.FilterIndex = 1;if (dialog.ShowDialog() == DialogResult.OK){string filename = dialog.FileName;try{Image im = Image.FromFile(filename);var image = ConvertImageToBase64(im);string imageType = "BASE64";var options = new Dictionary<string, object>{{"max_face_num", 2},{"face_field", "age,beauty"},{"face_fields", "age,qualities,beauty"}};var result = client.Detect(image, imageType, options);textBox1.Text = result.ToString();}catch (Exception ex){MessageBox.Show(ex.Message);}}
}public string ConvertImageToBase64(Image file)
{using (MemoryStream memoryStream = new MemoryStream()){file.Save(memoryStream, file.RawFormat);byte[] imageBytes = memoryStream.ToArray();return Convert.ToBase64String(imageBytes);}
}

2.2人脸对比

通过选择两张图片,调用百度AI的人脸比对接口,比较两张图片中的人脸。

private void button2_Click(object sender, EventArgs e)
{if (string.IsNullOrEmpty(textBox2.Text) || string.IsNullOrEmpty(textBox3.Text)){MessageBox.Show("请选择要对比的人脸图片");return;}try{string path1 = textBox2.Text;string path2 = textBox3.Text;var faces = new JArray{new JObject{{"image", ReadImg(path1)},{"image_type", "BASE64"},{"face_type", "LIVE"},{"quality_control", "LOW"},{"liveness_control", "NONE"},},new JObject{{"image", ReadImg(path2)},{"image_type", "BASE64"},{"face_type", "LIVE"},{"quality_control", "LOW"},{"liveness_control", "NONE"},}};var result = client.Match(faces);textBox1.Text = result.ToString();}catch (Exception ex){MessageBox.Show(ex.Message);}
}public string ReadImg(string img)
{return Convert.ToBase64String(File.ReadAllBytes(img));
}

2.3获取系统摄像头

通过AForge库获取摄像头设备,并显示实时视频。

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;ThreadPool.QueueUserWorkItem(new WaitCallback(p =>{while (true){IsStart = true;Thread.Sleep(500);}}));
}private void VideoSourcePlayer1_NewFrame(object sender, ref Bitmap image)
{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 Point(location.left, location.top), new Point(location.left + location.width, location.top));g.DrawLine(new Pen(Color.Black), new Point(location.left, location.top), new Point(location.left, location.top + location.height));g.DrawLine(new Pen(Color.Black), new Point(location.left, location.top + location.height), new Point(location.left + location.width, location.top + location.height));g.DrawLine(new Pen(Color.Black), new Point(location.left + location.width, location.top), new Point(location.left + location.width, location.top + location.height));g.Dispose();}catch (Exception ex){MessageBox.Show("绘制方框出错:" + ex.Message);}}
}

2.4摄像头拍照

实现拍照功能,并保存图像到本地。

private void button5_Click(object sender, EventArgs e)
{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());PngBitmapEncoder pE = new PngBitmapEncoder();pE.Frames.Add(BitmapFrame.Create(bitmapSource));string picName = GetImagePath() + "\\" + DateTime.Now.ToFileTime() + ".jpg";if (File.Exists(picName)){File.Delete(picName);}using (Stream stream = File.Create(picName)){pE.Save(stream);}//拍照完成后刷新界面,不关闭窗体if (videoSourcePlayer1 != null && videoSourcePlayer1.IsRunning){videoSourcePlayer1.SignalToStop();videoSourcePlayer1.WaitForStop();}MessageBox.Show("拍照成功,请进行人脸注册!");}}catch (Exception ex){MessageBox.Show("摄像头异常:" + ex.Message);}
}

三、结果

人脸检测:

人脸对比:

四、结语

通过以上步骤,我们成功实现了一个使用百度AI进行人脸识别的项目。该项目包括人脸检测、人脸比对、摄像头拍照、人脸注册和人脸登录等功能,展示了如何结合百度AI平台和AForge库实现实用的人脸识别应用。希望本博客能对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从网络配置文件中提取PEAP凭据

我的一位同事最近遇到了这样一种情况&#xff1a;他可以物理访问使用802.1X连接到有线网络的Windows计算机&#xff0c;同时保存了用于身份验证的用户凭据&#xff0c;随后他想提取这些凭据&#xff0c;您可能认为这没什么特别的&#xff0c;但是事情却有点崎岖波折…… 如何开…

攻防世界-5-1

下载文件发现是一个没有尾缀的文件&#xff0c;扔winhex&#xff0c;emmmm还是没看出来 搜了一圈&#xff0c;发现用xortool 得到key之后&#xff0c;跑一下脚本 得到flag&#xff1a; wdflag{You Are Very Smart}

pytest测试框架pytest-sugar插件生成进度条

Pytest提供了丰富的插件来扩展其功能&#xff0c;介绍下插件pytest-sugar&#xff0c;可以帮助我们在控制台中显示彩色的测试结果和进度条&#xff0c;提供失败的堆栈回溯信息。 为了使用 pytest-sugar&#xff0c;需要满足以下条件&#xff1a; Python 3.8 或更高版本pytest…

并行计算之SIMD与SPMD

SIMD (Single Instruction Multiple Data) SIMD&#xff0c;也就是单指令多数据计算&#xff0c;一条指令可以处理多个数据。通过向量寄存器存储多个数据元素&#xff0c;并使用单条指令同时对这些数据元素进行处理&#xff0c;从而提高了计算效率。 代码示例&#xff1a; fl…

联想Y7000P 2023款拆机教程及升级内存教程

0.电脑参数介绍 联想Y7000P 2023电脑&#xff0c;笔者电脑CPU为i7-13700H&#xff0c;14核20线程&#xff1b;标配内存为三星的DDR5-5600MHz-8GB*2&#xff0c;由于电脑CPU限制&#xff0c;实际内存跑的频率为5200MHz; 2个内存插槽&#xff0c;2个固态硬盘插槽。每个内存插槽最…

FineReport报表案例

普通报表 保存的文件类型为 cpt&#xff0c;依靠着单元格的扩展与父子格的关系来实现模板效果&#xff0c;可进行参数查询&#xff0c;填报报表&#xff0c;图表设计等等&#xff0c;但是在分页预览模式下不能在报表主体中展示控件&#xff0c;而且单元格间相互影响&#xff0c…

1.2 DataX 数据同步工具详细介绍

DataX 是阿里巴巴开源的一款高效的数据同步工具&#xff0c;旨在实现多种异构数据源之间的高效数据同步。以下是对 DataX 的详细介绍&#xff1a; 架构 DataX 的架构主要包括以下几个核心组件&#xff1a; DataX Core&#xff1a;负责任务调度、插件加载、日志管理等核心功能…

鞋子分类数据集17399张69类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;17399 分类类别数&#xff1a;69 类别名称:[“0”,“1”,“2”,“3”,“4”…

VisualBox 虚拟机 Ubunut 18.04 在大显示器上黑屏的问题

在小屏幕上显示没有问题&#xff0c;但是移动到大显示器上就黑屏了&#xff0c;并且不能铺满&#xff0c;如下所示 如果我希望它铺满整个屏幕&#xff0c;如何解决呢&#xff1f; 下面是解决方法&#xff1a; 虚拟机底部这个按钮&#xff0c;右键 产生菜单&#xff0c;按这个选…

09--keepalived高可用集群

前言&#xff1a;高可用集群配置是大型网站的一个基础&#xff0c;网站可用性的基础保障之一&#xff0c;这里将对应的概念知识和实操步骤进行整理与收集。 1、基础概念详解 1.1、高可用集群 高可用集群&#xff08;High Availability Cluster&#xff0c;简称HA Cluster&am…

用友U9-UBF自定义报表-打印模板开发学习笔记

自定义报表、打印模板开发学习笔记 一、基础了解 1、UBF开发工具的了解 Ideconfig.xml配置 True&#xff1a;打印、报表设计模式 False&#xff1a;单据设计模式 2、开发环境试用 BE&#xff1a;实体项目 BF&#xff1a;操作项目 SV&#xff1a;服务项目 分析项目&am…

NGINX_六 nginx 日志文件详解

六 nginx 日志文件详解 nginx 日志文件分为 **log_format** 和 **access_log** 两部分log_format 定义记录的格式&#xff0c;其语法格式为log_format 样式名称 样式详情配置文件中默认有log_format main $remote_addr - $remote_user [time_local] "req…

jQuery 基本操作

01-简介 jQuery 是一个功能丰富且广泛使用的 JavaScript 库&#xff0c;它简化了 HTML 文档遍历和操作、事件处理、动画和 Ajax 操作。jQuery 通过其易用的 API&#xff0c;使复杂的 JavaScript 编程任务变得更加简单&#xff0c;并且兼容各种浏览器。 1、jQuery特点 简化 DOM …

【Mac】Pixelmator Pro for Mac(媲美PS的修图软件)软件介绍

软件介绍 Pixelmator Pro是一款功能强大的图像编辑软件&#xff0c;专为macOS平台设计。它结合了丰富的图像编辑功能和直观的用户界面&#xff0c;适合专业摄影师、设计师以及图像编辑爱好者。以下是Pixelmator Pro的一些主要特点和功能介绍&#xff1a; 功能特色 非破坏性编…

MSPM0G3507——创建新的.c.h文件

在项目处点击右键&#xff0c;再点击New File 再命名.c.h即可

JavaWeb——MySQL:DML对表数据的修改

2.DML对表数据的修改 2.1 修改表的数据 (1) 修改单行单列 SQL语句&#xff1a;update 表名 set 列名1数值1 where 列名2数值2&#xff1b; 将sql_student表姓名为吕小布的那行&#xff0c;性别设置为女&#xff1b; (2) 修改单行多列 SQL语句&#xff1a;update 表名 set 列…

Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的

文章目录 Elasticsearch聚合查询说明空值率查询DSL Elasticsearch聚合基础知识扩展Elasticsearch聚合概念Script 用法Elasticsearch聚合查询语法指标聚合&#xff08;Metric Aggregations&#xff09;桶聚合&#xff08;Bucket Aggregations&#xff09;矩阵聚合&#xff08;Ma…

IDEA插件开发,国际化处理

1.resources目录新增国际化资源文件 我项目默认英文&#xff0c;增加了一个zh中文的,en-英语 cn-中文 2.参数定义&#xff0c;中文需转为Unicode编码&#xff0c;推荐Unicode编码转换 - 站长工具 (chinaz.com) 3.新增类CodeChronoBundle继承AbstractBundle package com.codech…

牛顿迭代法(求解整数的近似平方根)

情景再现 面试官&#xff1a;给你一个整数怎样最快求解他的近似平方根&#xff1f; 小白&#xff1a;可以用while循环呀&#xff01; 面试官&#xff1a;有没有更好的方法&#xff1f; 小白&#xff1a;可以从这个数的左右两边开始迭代。 面试官&#xff1a;除了这个呢&#xf…

【从0实现React18】 (一) 项目初始化

Multi-repo 和 Mono-repo 由于需要同时管理多个包&#xff0c;如React、React-dom等&#xff0c;所以选择**Mono-repo** 选择使用pnpm-workspace搭建Mono-repo环境的原因 依赖安装快更规范 Pnpm初始化 npm install -g pnpm pnpm init配置pnpm-workspace.yml文件 pnpm-work…