当前位置:首页 > 每日看点 > 正文内容

“人脸识别”功能如何用java或c#编写?

卡卷网9个月前 (02-18)每日看点280

ViewFaceCore 是一个开源的、人脸识别 SDK,支持 .NET/.NET Core/.NET Framework 平台。它提供了高效且准确的人脸检测和特征提取功能,可以用于各种与人脸识别相关的应用场景中。本文将探讨如何在 C# 应用程序中使用 ViewFaceCore 实现基本的人脸识别功能,并通过一些实际例子来展示其使用方法。

安装 ViewFaceCore 包

首先,我们需要将 ViewFaceCore 导入到我们的项目中。可以使用 NuGet 包管理器来安装它。

在终端中运行以下命令:

dotnet add package 以下包

ViewFaceCore ViewFaceCore.all_models ViewFaceCore.Extension.SkiaSharp ViewFaceCore.runtime.win.x64


“人脸识别”功能如何用java或c#编写?  第1张


或者在 Visual Studio 中,通过 NuGet 包管理器搜索 ViewFaceCore 并安装。

基本使用

在开始之前,我们需要引入相关的命名空间:

using SkiaSharp; using System.Drawing; using System.Reflection; using System.Windows.Forms; using ViewFaceCore; using ViewFaceCore.Core; using ViewFaceCore.Model;

人脸检测

载入图片

private void btnLoad_Click(object sender, EventArgs e) { using (OpenFileDialog openFileDialog = new OpenFileDialog()) { openFileDialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;"; if (openFileDialog.ShowDialog() == DialogResult.OK) { pic.Image = Image.FromFile(openFileDialog.FileName); pic.ImageLocation = openFileDialog.FileName; } } }

首先,我们进行人脸检测,识别图像中的人脸。

private async void btnStatisticsFaces_Click(object sender, EventArgs e) { // 使用 SKBitmap.Decode 方法从图片路径中加载图像 // 这里使用的是 SkiaSharp 库来处理图片 var bitmap = SKBitmap.Decode(pic.ImageLocation); // 从 PictureBox 控件中加载图像并转换为 Bitmap 对象 Bitmap bitmap2 = new Bitmap(pic.Image); // 初始化一个 FaceDetector 对象 FaceDetector faceDetector = new FaceDetector(); // 将 SkiaSharp 的 Bitmap 对象转换为 FaceImage 对象 FaceImage faceImage = bitmap.ToFaceImage(); // 异步检测图像中的面部 var faces = await faceDetector.DetectAsync(bitmap); // 在 bitmap2 图像上绘制矩形框以标记检测到的面部 using (Graphics g = Graphics.FromImage(bitmap2)) { foreach (var face in faces) { // 绘制红色矩形框标记面部区域 g.DrawRectangle(Pens.Red, new Rectangle() { X = face.Location.X, Y = face.Location.Y, Height = face.Location.Height, Width = face.Location.Height }); } } // 将处理后的图像重新赋值给 PictureBox 控件 pic.Image = bitmap2; // 释放 bitmap 对象 bitmap.Dispose(); // 显示包含检测到的面部数量的消息框 MessageBox.Show($"找到了 {faces.Length} 张人脸!"); }


“人脸识别”功能如何用java或c#编写?  第2张


提取特征值

一旦检测到人脸,我们需要提取人脸的特征值,以便后续的比对。

public float[] ExtractFeature(string imagePath) { using var faceImage = SKBitmap.Decode(imagePath); //检测人脸信息 FaceDetector faceDetector = new FaceDetector(); FaceInfo[] fi = faceDetector.Detect(faceImage); //标记人脸位置 FaceLandmarker faceMark = new FaceLandmarker(); FaceMarkPoint[] points = faceMark.Mark(faceImage, fi[0]); FaceRecognizer faceRecognizer = new FaceRecognizer(); float[] data0 = faceRecognizer.Extract(faceImage, points); return data0; }

比对人脸

最后,我们可以通过比较两个人脸的特征值来确定两张图片是否是同一个人。

private void btnMatching_Click(object sender, EventArgs e) { DrawFace(pic); DrawFace(pic1); float[] f1 = ExtractFeature(pic.ImageLocation); float[] f2 = ExtractFeature(pic1.ImageLocation); FaceRecognizer faceRecognizer = new FaceRecognizer(); //对比特征值 bool isSelf = faceRecognizer.IsSelf(f1, f2); //计算相似度 float similarity = faceRecognizer.Compare(f1, f2); string msg = "识别到的人脸是否为同一人:" + isSelf + ",相似度:" + similarity; MessageBox.Show(msg); }


“人脸识别”功能如何用java或c#编写?  第3张


年龄预测

private void btnAgePrediction_Click(object sender, EventArgs e) { // 从 PictureBox 控件的图像路径加载图像,并将其转换为 FaceImage 对象 FaceImage img = SKBitmap.Decode(pic.ImageLocation).ToFaceImage(); // 初始化一个 FaceDetector 对象,用于检测人脸 FaceDetector faceDetector = new FaceDetector(); // 检测图像中的人脸,返回的结果取第一个人脸信息 var info = faceDetector.Detect(img).First(); // 初始化一个 AgePredictor 对象,用于预测年龄 AgePredictor agePredictor = new AgePredictor(); // 初始化一个 FaceLandmarker 对象,用于标记人脸的特征点 FaceLandmarker faceMark = new FaceLandmarker(); // 获取人脸的特征点 var points = faceMark.Mark(img, info); // 使用 AgePredictor 对象预测年龄 int age = agePredictor.PredictAge(img, points); // 显示预测的年龄 MessageBox.Show(age.ToString()); }

性别预测

private void btnGenderPrediction_Click(object sender, EventArgs e) { // 从 PictureBox 控件的图像路径加载图像,并将其转换为 FaceImage 对象 FaceImage img = SKBitmap.Decode(pic.ImageLocation).ToFaceImage(); // 初始化一个 FaceDetector 对象,用于检测人脸 FaceDetector faceDetector = new FaceDetector(); // 检测图像中的人脸,返回的结果取第一个人脸信息 var info = faceDetector.Detect(img).First(); // 初始化一个 genderPredictor 对象,用于预测性别 GenderPredictor genderPredictor = new GenderPredictor(); // 初始化一个 FaceLandmarker 对象,用于标记人脸的特征点 FaceLandmarker faceMark = new FaceLandmarker(); // 获取人脸的特征点 var points = faceMark.Mark(img, info); // 使用 GenderPredictor 对象预测性别 Gender gender = genderPredictor.PredictGender(img, points); // 显示预测的年龄 MessageBox.Show(gender.ToString()); }

5. 结论

通过本文,我们学习了如何使用 ViewFaceCore 在 C# 中进行人脸识别。我们探讨了初始化、检测人脸、提取特征值和比较人脸特征的基本流程,并提供了完整的示例代码来演示这些方法的使用。希望这篇文章能帮助你在实际项目中应用 ViewFaceCore 实现人脸识别功能。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/02/10826.html

分享给朋友:

相关文章

短视频如何快速变现?

短视频如何快速变现?

单人日产200条视频,一晚狂赚上千元,过程却简单到荒唐。只要你像这只猥琐的海鸥一样,做到这3点就行↓↓点开有惊喜速度快、不讲武德、不被发现那做短视频如何做到这3点?答案是养一只会叼视频的海鸥不是让你养真的海鸥而是用 ai 运营方法,类似于“...

手机用久了,垃圾都在哪里,总是内存显示不够,还很卡,这可怎么解决?

手机用久了,垃圾都在哪里,总是内存显示不够,还很卡,这可怎么解决?

大家的手机在使用一段时间之后啊,是不是都会出现又卡又慢的情况,尤其是安卓手机,这种现象更是非常明显,而且很多朋友啊,也都知道手机之所以会出现这些问题,一般都是手机安装了大量软件,而这些软件在使用过程中会产生大量的缓存垃圾,因此啊时间久了就会...

为什么微服务一定要有网关?

为什么微服务一定要有网关?

网关一句话总结,网关的作用是上浮公共逻辑,下沉差异逻辑。公共逻辑就是所有接口都需要做的事,比如权限校验,限流算法等,这样业务就只需要关心业务逻辑即可。下面是一个对比图: 当然除了一些公共逻辑外,路由也是网关的核心功能,它可以进行流量转发。...

为什么大家都说手机性能永远超不过PC?

最新的天玑9400牛逼吧,堪称PC级CPU,测试成绩16W功耗能跑9500分,1.8W能跑3000分,GPU也差不多是这个情况。手机电池一般是4000-5000毫安时,电压3.7V。也就是说,手机正常满载5W功耗下,这个电池能支持运行4个小...

为什么工资五千的人会一下花八九千买手机呢?

这其实是一个何不食肉糜的问题,这个问题其实很现实,越是月薪5000越需要高档手机。 前段时间看了一个纪录片,讲外卖小哥都用什么手机,结果发现绝大多数外卖小哥用的手机都是旗舰机型,有的时候宁可买二手也要买旗舰。 因为1外卖小哥对ip6...

只有我一个人后悔升级鸿蒙next吗?

只有我一个人后悔升级鸿蒙next吗?

我有一台mate 60 pro,第一时间升级了“纯血鸿蒙”。虽然功能并不完善,甚至有些简陋,但是我非常~非常不后悔升级鸿蒙next系统。因为.... 这就是一款“大型养成系游戏“,给我平淡的生活提供了源源不断的情绪价值。我每天特别...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。