【官方框架地址】
https://github.com/ViewFaceCore/ViewFaceCore
【算法介紹】
SeetaFace6是由中國科技公司自主研發(fā)的一款人臉識別技術(shù),它基于深度學(xué)習(xí)算法,能夠快速、準(zhǔn)確地識別出人臉,并且支持多種應(yīng)用場景,如門禁系統(tǒng)、移動支付、安全監(jiān)控等。SeetaFace6的識別準(zhǔn)確率高達99%以上,并且可以在各種復(fù)雜的環(huán)境下進行工作,如不同的光照條件、面部朝向、面部表情等。
SeetaFace6的研發(fā)背景是基于中國科技公司對于人臉識別技術(shù)的長期研究和探索。在過去的幾年中,隨著深度學(xué)習(xí)技術(shù)的不斷發(fā)展,人臉識別技術(shù)也取得了長足的進步。然而,由于人臉識別的技術(shù)難度較大,很多算法和模型都存在著準(zhǔn)確率不高、容易受到環(huán)境影響等問題。因此,開發(fā)一種高效、穩(wěn)定的人臉識別技術(shù)一直是人工智能領(lǐng)域的熱門話題。
SeetaFace6的設(shè)計原理是通過深度學(xué)習(xí)算法對大量的人臉數(shù)據(jù)進行訓(xùn)練,從而得到一個能夠自動識別出人臉的模型。這個模型可以自動提取出人臉的特征,并且與數(shù)據(jù)庫中的數(shù)據(jù)進行比對,最終得到識別結(jié)果。SeetaFace6采用了多種技術(shù)手段來提高識別準(zhǔn)確率和穩(wěn)定性,如使用卷積神經(jīng)網(wǎng)絡(luò)進行特征提取、使用數(shù)據(jù)增強技術(shù)增加訓(xùn)練數(shù)據(jù)量、使用遷移學(xué)習(xí)等技術(shù)來優(yōu)化模型等。
SeetaFace6的應(yīng)用場景非常廣泛。在門禁系統(tǒng)方面,它可以用于企業(yè)的安全防范、學(xué)校的校園安全、小區(qū)的住宅管理等場景,通過人臉識別技術(shù)來控制人員的進出和訪問權(quán)限。在移動支付方面,它可以用于手機銀行、第三方支付等場景,通過人臉識別技術(shù)來完成身份驗證和支付操作。在安全監(jiān)控方面,它可以用于公共場所的安全監(jiān)控、交通監(jiān)控等場景,通過人臉識別技術(shù)來追蹤嫌疑人的行蹤和身份。
除了以上應(yīng)用場景外,SeetaFace6還可以應(yīng)用于人臉美顏、人臉表情識別、人臉合成等領(lǐng)域。例如,在人臉美顏方面,它可以自動識別出人的面部特征和表情,并且根據(jù)不同的場景和需求進行美顏處理,讓人像更加美麗動人。在人臉表情識別方面,它可以自動識別出人的面部表情和情感狀態(tài),并且根據(jù)不同的情感狀態(tài)進行相應(yīng)的處理和反饋。在人臉合成方面,它可以自動生成與目標(biāo)人物相似的虛擬人臉圖像,并且可以應(yīng)用于虛擬現(xiàn)實、游戲開發(fā)等領(lǐng)域。
總之,SeetaFace6是一款高效、穩(wěn)定的人臉識別技術(shù),具有廣泛的應(yīng)用前景和市場前景。它的出現(xiàn)將為人臉識別技術(shù)的發(fā)展和應(yīng)用帶來新的機遇和挑戰(zhàn)。未來,隨著人工智能技術(shù)的不斷發(fā)展,我們相信SeetaFace6將會在更多的領(lǐng)域得到應(yīng)用和發(fā)展,并且將不斷推動人臉識別技術(shù)的創(chuàng)新和進步。
【效果展示】
人臉檢測
年齡預(yù)測?
口罩檢測?
性別判斷?
眼睛狀態(tài)判斷?
活體檢測(局部)?
【官方部分代碼】
注意以下是官方實例,不是我示范代碼
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();
//關(guān)鍵點標(biāo)記
FaceMarkDemo();
//戴口罩識別Demo
MaskDetectorDemo();
//質(zhì)量檢測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($"識別到的人臉數(shù)量:{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($"識別到的關(guān)鍵點個數(shù):{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}評估,結(jié)果:{brightnessResult},耗時:{sw.ElapsedMilliseconds}ms");
sw.Restart();
var resolutionResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Resolution);
Console.WriteLine($"{QualityType.Resolution}評估,結(jié)果:{resolutionResult},耗時:{sw.ElapsedMilliseconds}ms");
sw.Restart();
var clarityResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Clarity);
Console.WriteLine($"{QualityType.Clarity}評估,結(jié)果:{clarityResult},耗時:{sw.ElapsedMilliseconds}ms");
sw.Restart();
var clarityExResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.ClarityEx);
Console.WriteLine($"{QualityType.ClarityEx}評估,結(jié)果:{clarityExResult},耗時:{sw.ElapsedMilliseconds}ms");
sw.Restart();
var integrityExResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Integrity);
Console.WriteLine($"{QualityType.Integrity}評估,結(jié)果:{integrityExResult},耗時:{sw.ElapsedMilliseconds}ms");
sw.Restart();
var structureeResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Structure);
Console.WriteLine($"{QualityType.Structure}評估,結(jié)果:{structureeResult},耗時:{sw.ElapsedMilliseconds}ms");
sw.Restart();
var poseResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Pose);
Console.WriteLine($"{QualityType.Pose}評估,結(jié)果:{poseResult},耗時:{sw.ElapsedMilliseconds}ms");
sw.Restart();
var poseExeResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.PoseEx);
Console.WriteLine($"{QualityType.PoseEx}評估,結(jié)果:{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($"活體檢測,結(jié)果:{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);
//標(biāo)記人臉位置
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();
//標(biāo)記人臉
var points = faceMark.Mark(faceImage, faceInfo);
}
}
}
}
【視頻演示】
https://www.bilibili.com/video/BV1eK411x7wo/
【示范源碼下載】
https://download.csdn.net/download/FL1623863129/88713155
【測試環(huán)境】
vs2019
netframework4.7.2或者netframework4.8文章來源:http://www.zghlxwxcb.cn/news/detail-810434.html
ViewFaceCore文章來源地址http://www.zghlxwxcb.cn/news/detail-810434.html
到了這里,關(guān)于[C#]winform利用seetaface6實現(xiàn)C#人臉檢測活體檢測口罩檢測年齡預(yù)測性別判斷眼睛狀態(tài)檢測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!