C# 人脸检测 人脸比对 活体检测 口罩检测 年龄预测 性别预测 眼睛状态检测
基于以下开源软件做了一个Demo
GitHub - ViewFaceCore/ViewFaceCore: C# 超简单的离线人脸识别库。( 基于 SeetaFace6 )
效果


代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ViewFaceCore.Core;
using ViewFaceCore.Model;
using System.Drawing;
using System.Diagnostics;
namespace ViewFaceCoreDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
private void btnSelect_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = fileFilter;
if (ofd.ShowDialog() != DialogResult.OK) return;
pictureBox1.ImageLocation = ofd.FileName;
}
private void button5_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = fileFilter;
if (ofd.ShowDialog() != DialogResult.OK) return;
pictureBox2.ImageLocation = ofd.FileName;
}
/// <summary>
/// 人脸检测
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
string msg = "";
if (pictureBox1.Image == null)
{
msg = "图片1不能为空";
richTextBox1.Text += msg + "\r\n";
return;
}
FaceDetector faceDetector = new FaceDetector();
Bitmap bitmap = new Bitmap(pictureBox1.Image);
FaceImage faceImage = bitmap.ToFaceImage();
FaceInfo[] infos = faceDetector.Detect(faceImage);
if (infos.Length == 0)
{
msg = "图片1未检测到人脸";
richTextBox1.Text += msg + "\r\n";
return;
}
//Console.WriteLine("识别到的人脸数量:" + infos.Length + " 个人脸信息:\n");
//Console.WriteLine("No.\t人脸置信度\t位置信息");
//for (int i = 0; i < infos.Length; i++)
//{
// Console.WriteLine(String.Format("{0}\t{1}\t{2}", i, infos[i].Score, infos[i].Location));
//}
//画方框,标记人脸
using (Graphics g = Graphics.FromImage(bitmap))
{
g.DrawRectangles(new Pen(Color.Red, 2), infos.Select(p => new RectangleF(p.Location.X, p.Location.Y, p.Location.Width, p.Location.Height)).ToArray());
}
pictureBox1.Image = bitmap;
}
/// <summary>
/// 活体检测
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
string msg = "";
if (pictureBox1.Image == null)
{
msg = "图片1不能为空";
richTextBox1.Text += msg + "\r\n";
return;
}
FaceImage bitmap = new Bitmap(pictureBox1.Image).ToFaceImage();
FaceDetector faceDetector = new FaceDetector();
FaceLandmarker faceMark = new FaceLandmarker();
FaceAntiSpoofing faceAntiSpoofing = new FaceAntiSpoofing();
if (faceDetector.Detect(bitmap).Length == 0)
{
msg = "图片1未检测到人脸";
richTextBox1.Text += msg + "\r\n";
return;
}
var info = faceDetector.Detect(bitmap).First();
var markPoints = faceMark.Mark(bitmap, info);
Stopwatch sw = Stopwatch.StartNew();
sw.Start();
var result = faceAntiSpoofing.AntiSpoofing(bitmap, info, markPoints);
msg = "活体检测,结果:" + result.Status + ",清晰度:" + result.Clarity + ",真实度:" + result.Reality + ",耗时:" + sw.ElapsedMilliseconds + "ms";
richTextBox1.Text += msg + "\r\n";
Console.WriteLine(msg);
sw.Stop();
}
/// <summary>
/// 人脸比对
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
String msg = "";
if (pictureBox1.Image == null)
{
msg = "图片1不能为空";
richTextBox1.Text += msg + "\r\n";
return;
}
if (pictureBox2.Image == null)
{
msg = "图片2不能为空";
richTextBox1.Text += msg + "\r\n";
return;
}
Stopwatch sw = Stopwatch.StartNew();
sw.Start();
var faceImage0 = new Bitmap(pictureBox1.Image).ToFaceImage();
var faceImage1 = new Bitmap(pictureBox2.Image).ToFaceImage();
//检测人脸信息
FaceDetector faceDetector = new FaceDetector();
FaceInfo[] infos0 = faceDetector.Detect(faceImage0);
FaceInfo[] infos1 = faceDetector.Detect(faceImage1);
if (infos0.Length == 0)
{
msg = "图片1未检测到人脸";
richTextBox1.Text += msg + "\r\n";
sw.Stop();
return;
}
if (infos1.Length == 0)
{
msg = "图片2未检测到人脸";
richTextBox1.Text += msg + "\r\n";
sw.Stop();
return;
}
//标记人脸位置
FaceLandmarker faceMark = new FaceLandmarker();
FaceMarkPoint[] points0 = faceMark.Mark(faceImage0, infos0[0]);
FaceMarkPoint[] points1 = faceMark.Mark(faceImage1, infos1[0]);
//提取特征值
FaceRecognizer faceRecognizer = new FaceRecognizer();
float[] data0 = faceRecognizer.Extract(faceImage0, points0);
float[] data1 = faceRecognizer.Extract(faceImage1, points1);
//对比特征值
bool isSelf = faceRecognizer.IsSelf(data0, data1);
//计算相似度
float similarity = faceRecognizer.Compare(data0, data1);
msg = "识别到的人脸是否为同一人:" + isSelf + ",相似度:" + similarity + ",对比耗时:" + sw.ElapsedMilliseconds + "ms";
richTextBox1.Text += msg + "\r\n";
Console.WriteLine(msg);
sw.Stop();
}
/// <summary>
/// 口罩检测
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
string msg = "";
if (pictureBox1.Image == null)
{
msg = "图片1不能为空";
richTextBox1.Text += msg + "\r\n";
return;
}
FaceImage bitmap = new Bitmap(pictureBox1.Image).ToFaceImage();
FaceDetector faceDetector = new FaceDetector();
MaskDetector maskDetector = new MaskDetector();
if (faceDetector.Detect(bitmap).Length == 0)
{
msg = "图片1未检测到人脸";
richTextBox1.Text += msg + "\r\n";
return;
}
var info = faceDetector.Detect(bitmap).First();
PlotMaskResult plotMaskResult = maskDetector.PlotMask(bitmap, info);
if (plotMaskResult.Masked)
{
richTextBox1.Text += "口罩:是 \r\n";
}
else
{
richTextBox1.Text += "口罩:否 \r\n";
}
Console.WriteLine(msg);
}
/// <summary>
/// 年龄预测
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button6_Click(object sender, EventArgs e)
{
string msg = "";
if (pictureBox1.Image == null)
{
msg = "图片1不能为空";
richTextBox1.Text += msg + "\r\n";
return;
}
FaceImage bitmap = new Bitmap(pictureBox1.Image).ToFaceImage();
FaceDetector faceDetector = new FaceDetector();
if (faceDetector.Detect(bitmap).Length == 0)
{
msg = "图片1未检测到人脸";
richTextBox1.Text += msg + "\r\n";
return;
}
var info = faceDetector.Detect(bitmap).First();
AgePredictor agePredictor = new AgePredictor();
FaceLandmarker faceMark = new FaceLandmarker();
var markPoints = faceMark.Mark(bitmap, info);
int age = agePredictor.PredictAge(bitmap, markPoints);
richTextBox1.Text += "年龄:" + age + " \r\n";
Console.WriteLine(msg);
}
/// <summary>
/// 性别预测
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button7_Click(object sender, EventArgs e)
{
string msg = "";
if (pictureBox1.Image == null)
{
msg = "图片1不能为空";
richTextBox1.Text += msg + "\r\n";
return;
}
FaceImage bitmap = new Bitmap(pictureBox1.Image).ToFaceImage();
FaceDetector faceDetector = new FaceDetector();
if (faceDetector.Detect(bitmap).Length == 0)
{
msg = "图片1未检测到人脸";
richTextBox1.Text += msg + "\r\n";
return;
}
var info = faceDetector.Detect(bitmap).First();
GenderPredictor genderPredictor = new GenderPredictor();
FaceLandmarker faceMark = new FaceLandmarker();
var markPoints = faceMark.Mark(bitmap, info);
Gender gender = genderPredictor.PredictGender(bitmap, markPoints);
richTextBox1.Text += "性别:" + gender + " \r\n";
Console.WriteLine(msg);
}
/// <summary>
/// 眼睛状态
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button8_Click(object sender, EventArgs e)
{
string msg = "";
if (pictureBox1.Image == null)
{
msg = "图片1不能为空";
richTextBox1.Text += msg + "\r\n";
return;
}
FaceImage bitmap = new Bitmap(pictureBox1.Image).ToFaceImage();
FaceDetector faceDetector = new FaceDetector();
if (faceDetector.Detect(bitmap).Length == 0)
{
msg = "图片1未检测到人脸";
richTextBox1.Text += msg + "\r\n";
return;
}
var info = faceDetector.Detect(bitmap).First();
EyeStateDetector eyeStateDetector = new EyeStateDetector();
FaceLandmarker faceMark = new FaceLandmarker();
var markPoints = faceMark.Mark(bitmap, info);
EyeStateResult eyeStateResult = eyeStateDetector.Detect(bitmap, markPoints);
richTextBox1.Text += "眼睛状态:" + eyeStateResult + " \r\n";
Console.WriteLine(msg);
}
}
}
C# 人脸检测 人脸比对 活体检测 口罩检测 年龄预测 性别预测 眼睛状态检测的更多相关文章
- python——进行年龄和性别检测
年龄和性别检测 使用Python编程语言带你完成使用机器学习进行年龄和性别检测的任务. 首先需要编写用于检测人脸的代码,因为如果没有人脸检测,我们将无法进一步完成年龄和性别预测的任务. 下一步是预测图 ...
- 虹软人脸识别 - faceId及IR活体检测的更新介绍
虹软人脸识别 - faceId及IR活体检测的介绍 前几天虹软推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下: VIDEO模式新增faceId(类 ...
- python3 百度AI-v3之 人脸对比 & 人脸检测 & 在线活体检测 接口
#!/usr/bin/python3 # 百度人脸对比 & 人脸检测api-v3 import sys, tkinter.messagebox, ast import ssl, json,re ...
- 虹软人脸识别 - faceId及IR活体检测的介绍
虹软人脸识别 - faceId及IR活体检测的介绍 前几天虹软推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下: VIDEO模式新增faceId(类 ...
- iOS开发中使用CIDetector检测人脸
在iOS5 系统中,苹果就已经有了检测人脸的api,能够检测人脸的位置,包括左右眼睛,以及嘴巴的位置,返回的信息是每个点位置.在 iOS7中,苹果又加入了检测是否微笑的功能.通过使用 CIDetect ...
- UWP 使用Windows.Media.FaceAnalysis.FaceDetector检测人脸
话说现在检测人脸的技术有很多.有在线AI服务,比如Megvii Face++,Microsoft Cognitive Services,Tencent AI等等.还有本地的库实现的,比如OpenCV. ...
- python opencv3 静态图片检测人脸
git:https://github.com/linyi0604/Computer-Vision # coding:utf-8 import cv2 filename = "../data/ ...
- PCA检测人脸的简单示例_matlab实现
PCA检测人脸的简单示例,matlab R2009b上实现训练:训练用的20副人脸: %训练%Lx=X'*Xclear;clc;train_path='..\Data\TrainingSet\';ph ...
- 使用dlib基于CNN(卷积神经网络)的人脸检测器来检测人脸
基于机器学习CNN方法来检测人脸比之前介绍的效率要慢很多 需要先下载一个训练好的模型数据: 地址点击下载 // dlib_cnn_facedetect.cpp: 定义控制台应用程序的入口点. // # ...
- 20行Python代码检测人脸是否佩戴口罩
最近,口罩成为绝对热门的话题,在疫情之下,出门不戴口罩不仅对自己不负责,对他人而言也是一种潜在的威胁.所以许多小区都有保安在门口守着,谁要是不戴口罩就吼回去(吓死我了). 很多人学习python,不知 ...
随机推荐
- DS18B20数字温度计 (二) 测温, ROM和CRC算法
目录 DS18B20数字温度计 (一) 电气特性, 寄生供电模式和远距离接线 DS18B20数字温度计 (二) 测温, ROM和CRC算法 DS18B20数字温度计 (三) 1-WIRE总线 ROM搜 ...
- 【Unity3D】血条(HP)
1 需求实现 人机交互Input 中实现了通过键盘控制坦克运动,通过鼠标控制坦克发射炮弹,本文将在此基础上,增加血条(HP)功能.炮弹命中后,HP 值会减少,因此需要应用到 刚体组件Rigidbo ...
- Python之初级RPG小游戏
在国外网站上找到一个练习Python的小游戏感觉不错,自己实现了一下. 通过该练习你能学到: 元组 字典 简单定义函数和封装 条件控制语句 游戏说明 以下是3个房间和1个花园: Hall 客厅 有一把 ...
- 服务端高性能网络IO编程模型简析
服务端高性能网络IO编程模型简析 一.客户端与服务器端 多数网络应用可以分为客户端(client)和服务器端(server)模型,然后中间通过各种定义的协议来进行两端的通信. 比如常用的 Nginx ...
- time模块,os操作系统及os模块和shutil模块用法---day16
1.时间模块 import time time.time() 获取本地时间戳 localtime() 获取本地时间元组,参数是时间戳,默认不写是当前 ***** mktime() 通过时间元组获取时间 ...
- vscode添加gitbash终端方法
1.打开vscode 2.点击文件,ctrl+, 3.搜索shell windows { ... // 添加如下代码 "terminal.integrated.profiles.window ...
- django学习第十一天---django操作cookie和session
Cookie cookie解析 会话 http协议是无状态的,无连接的 导致每次客户端访问服务端需要登录成功之后才能访问的页面,都需要用户再重新登录一遍,用户体验极差. 客户端想了个办法,cookie ...
- Flask学习(三)
数据库操作 数据库驱动(drivers)模块:pymysql.MySQLDB ORM ORM 全拼Object-Relation Mapping,中文意为 对象-关系映射.主要实现模型对象到关系数据库 ...
- 【Azure Redis 缓存】Redis 连接失败
问题描述 Azure Redis 出现连接失败,过一会儿后,又能自动恢复. 问题解答 其实,因为Azure Redis服务一直都有升级维护的操作(平均每月一次),Redis服务更新是平台自动进行的计划 ...
- Java toString的使用
1 package com.bytezreo.objectclass; 2 3 import java.util.Date; 4 5 /** 6 * 7 * @Description Object类中 ...