[C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测

【官方框架地址】

https://github.com/ViewFaceCore/ViewFaceCore
【算法介绍】

SeetaFace6是由中国科技公司自主研发的一款人脸识别技术,它基于深度学习算法,能够快速、准确地识别出人脸,并且支持多种应用场景,如门禁系统、移动支付、安全监控等。SeetaFace6的识别准确率高达99%以上,并且可以在各种复杂的环境下进行工作,如不同的光照条件、面部朝向、面部表情等。

SeetaFace6的研发背景是基于中国科技公司对于人脸识别技术的长期研究和探索。在过去的几年中,随着深度学习技术的不断发展,人脸识别技术也取得了长足的进步。然而,由于人脸识别的技术难度较大,很多算法和模型都存在着准确率不高、容易受到环境影响等问题。因此,开发一种高效、稳定的人脸识别技术一直是人工智能领域的热门话题。

SeetaFace6的设计原理是通过深度学习算法对大量的人脸数据进行训练,从而得到一个能够自动识别出人脸的模型。这个模型可以自动提取出人脸的特征,并且与数据库中的数据进行比对,最终得到识别结果。SeetaFace6采用了多种技术手段来提高识别准确率和稳定性,如使用卷积神经网络进行特征提取、使用数据增强技术增加训练数据量、使用迁移学习等技术来优化模型等。

SeetaFace6的应用场景非常广泛。在门禁系统方面,它可以用于企业的安全防范、学校的校园安全、小区的住宅管理等场景,通过人脸识别技术来控制人员的进出和访问权限。在移动支付方面,它可以用于手机银行、第三方支付等场景,通过人脸识别技术来完成身份验证和支付操作。在安全监控方面,它可以用于公共场所的安全监控、交通监控等场景,通过人脸识别技术来追踪嫌疑人的行踪和身份。

除了以上应用场景外,SeetaFace6还可以应用于人脸美颜、人脸表情识别、人脸合成等领域。例如,在人脸美颜方面,它可以自动识别出人的面部特征和表情,并且根据不同的场景和需求进行美颜处理,让人像更加美丽动人。在人脸表情识别方面,它可以自动识别出人的面部表情和情感状态,并且根据不同的情感状态进行相应的处理和反馈。在人脸合成方面,它可以自动生成与目标人物相似的虚拟人脸图像,并且可以应用于虚拟现实、游戏开发等领域。

总之,SeetaFace6是一款高效、稳定的人脸识别技术,具有广泛的应用前景和市场前景。它的出现将为人脸识别技术的发展和应用带来新的机遇和挑战。未来,随着人工智能技术的不断发展,我们相信SeetaFace6将会在更多的领域得到应用和发展,并且将不断推动人脸识别技术的创新和进步。

【效果展示】

人脸检测

年龄预测 

口罩检测 

性别判断 

眼睛状态判断 

活体检测(局部) 


【官方部分代码】

注意以下是官方实例,不是我示范代码

using SkiaSharp;
using System;
using System.Diagnostics;
using System.Linq;
using System.Numerics;
using ViewFaceCore.Configs;
using ViewFaceCore.Core;
using ViewFaceCore.Extensions;
using ViewFaceCore.Model;

namespace ViewFaceCore.Example.ConsoleApp
{
    internal class Program
    {
        private readonly static string imagePath0 = @"images/Jay_3.jpg";
        private readonly static string imagePath1 = @"images/Jay_4.jpg";
        private readonly static string maskImagePath = @"images/mask_01.jpeg";

        static void Main(string[] args)
        {
            Console.WriteLine("Hello, ViewFaceCore!\n");

            //人脸识别Demo
            FaceDetectorDemo();

            //关键点标记
            FaceMarkDemo();

            //戴口罩识别Demo
            MaskDetectorDemo();

            //质量检测Demo
            FaceQualityDemo();

            //活体检测Demo
            AntiSpoofingDemo();

            //提取并对比特征值
            FaceRecognizerDemo();

            Console.ReadKey();
        }

        static void FaceDetectorDemo()
        {
            using var bitmap = SKBitmap.Decode(imagePath0);
            using FaceDetector faceDetector = new FaceDetector();
            FaceInfo[] infos = faceDetector.Detect(bitmap);
            Console.WriteLine($"识别到的人脸数量:{infos.Length} 个人脸信息:\n");
            Console.WriteLine($"No.\t人脸置信度\t位置信息");
            for (int i = 0; i < infos.Length; i++)
            {
                Console.WriteLine($"{i}\t{infos[i].Score:f8}\t{infos[i].Location}");
            }
            Console.WriteLine();
        }

        static void MaskDetectorDemo()
        {
            using var bitmap0 = SKBitmap.Decode(imagePath0);
            using var bitmap_mask = SKBitmap.Decode(maskImagePath);

            using MaskDetector maskDetector = new MaskDetector();
            using FaceDetector faceDetector = new FaceDetector();
            //FaceType需要用口罩模型
            using FaceRecognizer faceRecognizer = new FaceRecognizer(new FaceRecognizeConfig()
            {
                FaceType = FaceType.Mask
            });
            using FaceLandmarker faceMark = new FaceLandmarker();

            var info0 = faceDetector.Detect(bitmap0).First();
            var result0 = maskDetector.PlotMask(bitmap0, info0);
            Console.WriteLine($"是否戴口罩:{(result0.Status ? "是" : "否")},置信度:{result0.Score}");

            var info1 = faceDetector.Detect(bitmap_mask).First();
            var result1 = maskDetector.PlotMask(bitmap_mask, info1);
            Console.WriteLine($"是否戴口罩:{(result1.Status ? "是" : "否")},置信度:{result1.Score}");

            var result = faceRecognizer.Extract(bitmap_mask, faceMark.Mark(bitmap_mask, info1));
            Console.WriteLine($"是否识别到人脸:{(result != null && result.Sum() > 1 ? "是" : "否")}");
            Console.WriteLine();
        }

        static void FaceMarkDemo()
        {
            using var bitmap0 = SKBitmap.Decode(imagePath0);
            using var faceImage = bitmap0.ToFaceImage();
            using FaceDetector faceDetector = new FaceDetector();
            using FaceLandmarker faceMark = new FaceLandmarker();
            Stopwatch sw = new Stopwatch();

            var infos = faceDetector.Detect(faceImage);
            var markPoints = faceMark.Mark(faceImage, infos[0]);

            sw.Stop();
            Console.WriteLine($"识别到的关键点个数:{markPoints.Length},耗时:{sw.ElapsedMilliseconds}ms");
            foreach (var item in markPoints)
            {
                Console.WriteLine($"X:{item.X}\tY:{item.Y}");
            }
            Console.WriteLine();
        }

        static void FaceQualityDemo()
        {
            using var bitmap = SKBitmap.Decode(imagePath0);
            using FaceQuality faceQuality = new FaceQuality();
            using FaceDetector faceDetector = new FaceDetector();
            using FaceLandmarker faceMark = new FaceLandmarker();

            var info = faceDetector.Detect(bitmap).First();
            var markPoints = faceMark.Mark(bitmap, info);

            Stopwatch sw = Stopwatch.StartNew();

            var brightnessResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Brightness);
            Console.WriteLine($"{QualityType.Brightness}评估,结果:{brightnessResult},耗时:{sw.ElapsedMilliseconds}ms");
            sw.Restart();
            var resolutionResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Resolution);
            Console.WriteLine($"{QualityType.Resolution}评估,结果:{resolutionResult},耗时:{sw.ElapsedMilliseconds}ms");
            sw.Restart();
            var clarityResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Clarity);
            Console.WriteLine($"{QualityType.Clarity}评估,结果:{clarityResult},耗时:{sw.ElapsedMilliseconds}ms");
            sw.Restart();
            var clarityExResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.ClarityEx);
            Console.WriteLine($"{QualityType.ClarityEx}评估,结果:{clarityExResult},耗时:{sw.ElapsedMilliseconds}ms");
            sw.Restart();
            var integrityExResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Integrity);
            Console.WriteLine($"{QualityType.Integrity}评估,结果:{integrityExResult},耗时:{sw.ElapsedMilliseconds}ms");
            sw.Restart();
            var structureeResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Structure);
            Console.WriteLine($"{QualityType.Structure}评估,结果:{structureeResult},耗时:{sw.ElapsedMilliseconds}ms");
            sw.Restart();
            var poseResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Pose);
            Console.WriteLine($"{QualityType.Pose}评估,结果:{poseResult},耗时:{sw.ElapsedMilliseconds}ms");
            sw.Restart();
            var poseExeResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.PoseEx);
            Console.WriteLine($"{QualityType.PoseEx}评估,结果:{poseExeResult},耗时:{sw.ElapsedMilliseconds}ms");

            sw.Stop();
            Console.WriteLine();
        }

        static void AntiSpoofingDemo()
        {
            using var bitmap = SKBitmap.Decode(imagePath0);

            using FaceDetector faceDetector = new FaceDetector();
            using FaceLandmarker faceMark = new FaceLandmarker();
            using FaceAntiSpoofing faceAntiSpoofing = new FaceAntiSpoofing();

            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);
            Console.WriteLine($"活体检测,结果:{result.Status},清晰度:{result.Clarity},真实度:{result.Reality},耗时:{sw.ElapsedMilliseconds}ms");

            sw.Stop();
            Console.WriteLine();
        }

        static void FaceRecognizerDemo()
        {
            Stopwatch sw = Stopwatch.StartNew();

            using var faceImage0 = SKBitmap.Decode(imagePath0).ToFaceImage();
            using var faceImage1 = SKBitmap.Decode(imagePath1).ToFaceImage();
            //检测人脸信息
            using FaceDetector faceDetector = new FaceDetector();
            FaceInfo[] infos0 = faceDetector.Detect(faceImage0);
            FaceInfo[] infos1 = faceDetector.Detect(faceImage1);
            //标记人脸位置
            using FaceLandmarker faceMark = new FaceLandmarker();
            FaceMarkPoint[] points0 = faceMark.Mark(faceImage0, infos0[0]);
            FaceMarkPoint[] points1 = faceMark.Mark(faceImage1, infos1[0]);
            //提取特征值
            using FaceRecognizer faceRecognizer = new FaceRecognizer();
            float[] data0 = faceRecognizer.Extract(faceImage0, points0);
            float[] data1 = faceRecognizer.Extract(faceImage1, points1);
            //对比特征值
            bool isSelf = faceRecognizer.IsSelf(data0, data1);

            Console.WriteLine($"识别到的人脸是否为同一人:{isSelf},对比耗时:{sw.ElapsedMilliseconds}ms");
            Console.WriteLine();
            sw.Stop();
        }

        static void FaceTrackDemo()
        {
            using var faceImage = SKBitmap.Decode(imagePath0).ToFaceImage();
            using FaceLandmarker faceMark = new FaceLandmarker();
            using FaceTracker faceTrack = new FaceTracker(new FaceTrackerConfig(faceImage.Width, faceImage.Height));
            var result = faceTrack.Track(faceImage);
            if (result == null || !result.Any())
            {
                Console.WriteLine("未追踪到任何人脸!");
                return;
            }
            foreach (var item in result)
            {
                FaceInfo faceInfo = item.ToFaceInfo();
                //标记人脸
                var points = faceMark.Mark(faceImage, faceInfo);
            }
        }
    }
}


【视频演示】

https://www.bilibili.com/video/BV1eK411x7wo/
【示范源码下载】

https://download.csdn.net/download/FL1623863129/88713155
【测试环境】

vs2019

netframework4.7.2或者netframework4.8

ViewFaceCore

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过Kuboard部署Nginx服务并映射挂载NFS服务器

这里写目录标题 一、项目概述二、环境三、样式nginx运行页面nginx挂载存储页面nginx服务service页面index代理网页 四、部署流程集群导入NFS服务器搭建新建nginx工作负载配置拷贝配置信息到NFS 五、总结 一、项目概述 使用Kuboard图形化页面部署Nginx工作负载&#xff0c;代理…

FineBI实战项目一(8):每天每小时订单笔数

1 明确数据分析目标 统计每个小时产生的订单个数 2 创建用于保存数据分析结果的表 create table app_hour_orders(id int primary key auto_increment,daystr varchar(20),hourstr varchar(20),cnt int ); 3 编写SQL语句进行数据分析 selectsubstring(createTime,1,10) as …

SpringBoot pom.xml文件标签含义

Pom文件 基本构成 通过最简单的一个SpringBoot项目的 Pom文件来了解一下Pom文件的基本构成 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XML…

Failed to create CUDAExecutionProvider 使用onnxruntime-gpu未成功调用gpu

最近在使用GPU对onnx模型进行加速过程中&#xff08;仅针对N卡&#xff0c;毕竟也没有别的显卡了。。&#xff09;&#xff0c;遇到了点问题&#xff1a;就是明明在安装了合适版本的显卡驱动和CUDA后&#xff0c;onnx还是不能够成功调用GPU&#xff0c;并且还出现了先导入torch…

专属定制适合个人的知识付费平台,打造个性化品牌与自主管理体验

明理信息科技知识付费saas租户平台 在当今数字化时代&#xff0c;知识付费平台已经成为人们获取专业知识、提升自身素质的重要渠道。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。因此&#xff0c;我们提出了专属定…

代码随想录算法训练营day6|242.有效的字母异位词、349.两个数组的交集、202.快乐数

哈希表理论基础 建议&#xff1a;大家要了解哈希表的内部实现原理&#xff0c;哈希函数&#xff0c;哈希碰撞&#xff0c;以及常见哈希表的区别&#xff0c;数组&#xff0c;set 和map。 什么时候想到用哈希法&#xff0c;当我们遇到了要快速判断一个元素是否出现集合里的时…

大图切片预览

文章目录 前言处理流程完整代码前端预览 前言 最近有需求&#xff0c;前端要预览百兆以上的大图&#xff0c;这直接访问应该就不太行了&#xff0c;系统打开都在加载好一会儿&#xff0c;刚好从事的又是 gis 行业&#xff0c;于是打算用类似加载地图的方式来切片加载大图。这里…

视频做成二维码查看?多格式视频二维码生成器的使用方法

现在音视频是工作和生活中经常需要使用的一种内容表现形式&#xff0c;很多人都通过这种方式来查看视频内容&#xff0c;比如产品介绍、使用说明、安装教程等。通过一个二维码就可以来承载视频内容&#xff0c;与传统的方式相比拥有更快的内容传播速度&#xff0c;简化用户获取…

04.SpringCloud网关-gateway

1.Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式…

Stm32cube keil5配置串口printf 蓝牙打印不出来

1.检查cube里面波特率是否与AT蓝牙设置一致 2.keil里面设置是否打开Use MicroLIB 3、stm32cube是否开启串口中断 4.检测线路是否接触不良&#xff0c;读写线插反等。

这一次技术学习分享,超过苦读30本书

同学们&#xff0c;做个问卷调查&#xff0c;你参加了这次由腾讯云主办的第四期“云梯计划”了不&#xff1f; “云梯计划”已连续举办三年&#xff0c;免费为超过1万名大学生提供了腾讯云认证培训和考试名额&#xff0c;帮助其提升就业竞争力。 想要得到免费的系统性、实战性…

SpringBoot集成 Websocket 实现服务与客户端进行消息发送和接收

介绍 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。 效果 客户端效果 服务端日志 pom依赖 <!-- websocket --> <dependency><groupId>org.springfram…

APM32F035有感矢量控制方案

一、先来几句废话 首先这两年公司越来越多的开始使用国产的MCU&#xff0c;用过GD32、AT32、APM32等等&#xff0c;目前稳定使用的是APM32,包括身边朋友工作室&#xff0c;也开始从TI、STM、NXP换成APM32。上个月有幸拿到APM32F035电路控制板&#xff0c;非常感谢面包板社区提供…

Pytest自动化测试框架

1、pytest简介 pytest是Python的一种单元测试框架&#xff0c;与python自带的unittest测试框架类似&#xff0c;但是比unittest框架使用起来更简洁&#xff0c;效率更高。 执行测试过程中可以将某些测试跳过&#xff0c;或者对某些预期失败的case标记成失败能够支持简单的单元…

服务器网卡介绍

本篇文章对服务器网卡进行基础介绍&#xff0c;包括基本概念、网卡厂商及网卡绑定策略等。 1、基本概念 服务器网卡&#xff08;Network Interface Card&#xff09;是一种用于连接服务器与网络之间的硬件设备。它允许服务器通过网络与其他设备进行通信&#xff0c;包括传输数…

九州金榜孩子厌学原因及解决方法

厌学是根据不同类型孩子&#xff0c;表现也有差异&#xff0c;但是者都会对成绩产生很大的影响。那么作为家长&#xff0c;我们应该怎么面对不同类型孩子的厌学&#xff0c;又该怎么样去解决呢&#xff0c;我们要如何让孩子重拾学习的信心呢&#xff1f;下面&#xff0c;我们从…

如何查看崩溃日志

​ 目录 描述 思路 查看ipa包崩溃日志 简单查看手机崩溃信息几种方式 方式1:手机设置查看崩溃日志 方式2: Xocde工具 方式3: 第三方软件克魔助手 环境配置 实时日志 奔溃日志分析 方式四&#xff1a;控制台资源库 线上崩溃日志 线上监听crash的几种方式 方式1: 三…

SQLServer设置端口,并设置SQLServer和SQLServer Browser服务

SQLServer默认使用动态端口&#xff0c;即每次启动sqlserver.exe时&#xff0c;端口port都会动态变化。若要使用静态端口&#xff0c;比如port1433&#xff0c;则需要在SQL Server Configuration Manager(简称SSMS&#xff09;里配置。这里以SQL Server 2005 Configuration Man…

计算机基础面试题 |16.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

2024年【安全员-A证】及安全员-A证证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-A证考前必练&#xff01;安全生产模拟考试一点通每个月更新安全员-A证证考试题目及答案&#xff01;多做几遍&#xff0c;其实通过安全员-A证复审模拟考试很简单。 1、【多选题】《建设工程安全生产管理条例》…