asp.net core 使用 tensorflowjs实现 face recognition的源代码

 更新时间:2021年06月24日 11:34:27   作者:阿新  
tensorflowjs,在该项目中使用了ml5js这个封装过的机器学习JavaScript类库, 使用起来更简单,本文给大家分享asp.net core 使用 tensorflowjs实现 face recognition的源代码,需要的朋友参考下吧

功能描述

  1. 上传照片文件名及是系统要识别标签或是照片的名称(人物标识)
  2. 提取照片脸部特征值(调用 facemesh模型)
  3. 保存特征值添加样本(调用 knnClassifier)
  4. 测试上传的图片是否识别正确

项目依赖的库

源代码(neozhu/smartadmin.core.urf: Domain Driven Design (DDD) ultra-lightweight rapid development architecture(support .net 5.0) (github.com)

tensorflowjs,在该项目中我使用了ml5js这个封装过的机器学习JavaScript类库, 使用起来更简单

Demo

http://106.52.105.140:6200/photos/index

demo/123456

代码实现

上传照片功能

asp.net core 参考CleanArchitecture 结构实现后台代码,

参考代码如下(具体请看源代码):

namespace SmartAdmin.Application.Photos.Commands
{
  public partial class AddPhotoCommand : IRequest<Result<int>>
  {
    public Stream Stream { get; set; }
    public string FileName { get; set; }
    public decimal Size { get; set; }
    public string Path { get; set; }
 
  }
  internal class AddPhotoCommandHandler : IRequestHandler<AddPhotoCommand, Result<int>>
  {
    private readonly IUnitOfWork unitOfWork;
    private readonly IPhotoService photoService;
 
    public AddPhotoCommandHandler(IUnitOfWork unitOfWork,
      IPhotoService photoService)
    {
      this.unitOfWork = unitOfWork;
      this.photoService = photoService;
    }
    public async Task<Result<int>> Handle(AddPhotoCommand request, CancellationToken cancellationToken)
    {
      var info = new DirectoryInfo(request.Path);
      if (!info.Exists)
      {
        info.Create();
      }
      using (FileStream outputFileStream = new FileStream(Path.Combine(request.Path,request.FileName), FileMode.Create))
      {
        request.Stream.CopyTo(outputFileStream);
        outputFileStream.Close();
      }
      var photo = new Photo()
      {
        Name = Path.GetFileNameWithoutExtension(request.FileName),
        Size = request.Size,
        Path = $"/photos/{request.FileName}",
      };
      this.photoService.Insert(photo);
      await this.unitOfWork.SaveChangesAsync();
      return await Result<int>.SuccessAsync(0, "保存成功");
    }
 
  }
}

facemesh模型提取照片中脸部特特信息

扫描图片获取图片中脸部的特征信息以一个多维数组的形式保存到数据库中,这些特征值将用与下一步的KNN分类识别使用

完成每一张照片中脸部信息的数字转化

参考代码如下:

function predict() {
     const img = document.getElementById('photo-canvas');
     facemesh.predict(img).then(faces => {
       console.log(faces)
       if (faces) {
         const canvas = document.getElementById("photo-canvas");
         const photoId=canvas.getAttribute("photo-id");
         const photoName=canvas.getAttribute("photo-name");
         console.log(canvas)
         var draw = canvas.getContext("2d");
         var mesh = faces[0].scaledMesh;
         console.log(mesh);
         /* highlight facial landmark points on canvas board */
         draw.fillStyle = "#00FF00";
         for (i = 0; i < mesh.length; i++) {
           var [x, y, z] = mesh[i];
           draw.fillRect(Math.round(x), Math.round(y), 2, 2);
         }
         updateLandmarks(photoId,JSON.stringify(mesh));
         knnClassifier.addExample(mesh, photoName);
         canvas.setAttribute("photo-mesh", JSON.stringify(mesh));
         $('#testbutton').attr('disabled', false);
       }
     });
   }
 
  function updateLandmarks(id,landmarks){
    $.post('/Photos/Update',{Id:id,Landmarks:landmarks}).done(res=>{
     console.log(res);
     reload();
    }).fail(res=>{
     $.messager.alert('更新失败', res, 'error');
    })
   } 

添加分类识别样本数据

facemesh模型只负责把照片中面部特征转换成一个数组,如果需要对每一张照片的数据再进行分类就需要用到KNN模型,添加的样本数据越多,识别的就越正确。

参考代码:

let knnClassifier =ml5.KNNClassifier();
    function training(){
       $.messager.progress({msg:'training....'});
       $.get('/Photos/GetAll').done(res=>{
        for(let i=0;i<50;i++){
        res.map(item=>{
        if(item.Landmarks){
        knnClassifier.addExample(JSON.parse(item.Landmarks), item.Name);
        }
        });
        }
        $.messager.progress('close')
           if(knnClassifier.getNumLabels()>0){
           knnClassifier.classify(JSON.parse(res[2].Landmarks),(err,result)=>{
             console.log(result);
         })
       $('#testbutton').attr('disabled', false);
       }
       })
    }

测试照片识别结果

上传一张照片匹配维护的照片库中照片名称是否正确

参考代码:

function testPredict(){
      const img = document.getElementById('testphoto_img');
      facemesh.predict(img).then(faces => {
        console.log(faces)
        if (faces) {
          knnClassifier.classify(faces[0].scaledMesh,(err,result)=>{
          console.log(result);
          $.messager.alert('Result:',result.label);
          $('#testresult').text(result.label);
         })
        }
      });
    }

到这里就全部完成了,对tensorflow感兴趣的朋友可以留言,下面有时间会继续更新,实现利用摄像头来识别人脸。

对asp.net coreCleanArchitecture 感兴趣的朋友可以从github下载,也可以留言交流,这个项目我也会继续更新,如果喜欢,请给个星星。

以上就是asp.net core 使用 tensorflowjs实现 face recognition(源代码)的详细内容,更多关于asp.net core实现face recognition的资料请关注脚本之家其它相关文章!

相关文章

  • C# string格式的日期时间字符串转为DateTime类型的方法

    C# string格式的日期时间字符串转为DateTime类型的方法

    这篇文章主要介绍了C# string格式的日期时间字符串转为DateTime类型的方法,需要的朋友可以参考下
    2017-02-02
  • WPF中图像处理的方法介绍

    WPF中图像处理的方法介绍

    这篇文章介绍了WPF中图像处理的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • c# List和Dictionary常用的操作

    c# List和Dictionary常用的操作

    这篇文章主要介绍了c# List和Dictionary常用的操作,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-04-04
  • C#使用foreach语句搜索数组元素的方法

    C#使用foreach语句搜索数组元素的方法

    这篇文章主要介绍了C#使用foreach语句搜索数组元素的方法,涉及C#使用foreach语句遍历数组实现搜索功能的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • Unity利用UGUI制作提示框效果

    Unity利用UGUI制作提示框效果

    这篇文章主要为大家详细介绍了Unity利用UGUI制作提示框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • C#实现餐饮管理系统

    C#实现餐饮管理系统

    这篇文章主要为大家详细介绍了C#实现餐饮管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • c# 实现位图算法(BitMap)

    c# 实现位图算法(BitMap)

    这篇文章主要介绍了c# 如何实现位图算法(BitMap),文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C#实现AddRange为数组添加多个元素的方法

    C#实现AddRange为数组添加多个元素的方法

    这篇文章主要介绍了C#实现AddRange为数组添加多个元素的方法,实例分析了AddRange方法的使用技巧,需要的朋友可以参考下
    2015-06-06
  • WPF使用WinSCP实现FTP下载

    WPF使用WinSCP实现FTP下载

    这篇文章主要为大家详细介绍了WPF如何使用WinSCP实现FTP下载,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下
    2023-01-01
  • C#实现Word转换TXT的方法详解

    C#实现Word转换TXT的方法详解

    这篇文章主要为大家详细介绍了如何利用C#实现Word转换TXT的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12

最新评论