最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

asp.net core 使用 tensorflowjs實(shí)現(xiàn) face recognition的源代碼

 更新時(shí)間:2021年06月24日 11:34:27   作者:阿新  
tensorflowjs,在該項(xiàng)目中使用了ml5js這個(gè)封裝過的機(jī)器學(xué)習(xí)JavaScript類庫, 使用起來更簡單,本文給大家分享asp.net core 使用 tensorflowjs實(shí)現(xiàn) face recognition的源代碼,需要的朋友參考下吧

功能描述

  1. 上傳照片文件名及是系統(tǒng)要識(shí)別標(biāo)簽或是照片的名稱(人物標(biāo)識(shí))
  2. 提取照片臉部特征值(調(diào)用 facemesh模型)
  3. 保存特征值添加樣本(調(diào)用 knnClassifier)
  4. 測試上傳的圖片是否識(shí)別正確

項(xiàng)目依賴的庫

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

tensorflowjs,在該項(xiàng)目中我使用了ml5js這個(gè)封裝過的機(jī)器學(xué)習(xí)JavaScript類庫, 使用起來更簡單

Demo

http://106.52.105.140:6200/photos/index

demo/123456

代碼實(shí)現(xiàn)

上傳照片功能

asp.net core 參考CleanArchitecture 結(jié)構(gòu)實(shí)現(xiàn)后臺(tái)代碼,

參考代碼如下(具體請(qǐng)看源代碼):

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模型提取照片中臉部特特信息

掃描圖片獲取圖片中臉部的特征信息以一個(gè)多維數(shù)組的形式保存到數(shù)據(jù)庫中,這些特征值將用與下一步的KNN分類識(shí)別使用

完成每一張照片中臉部信息的數(shù)字轉(zhuǎn)化

參考代碼如下:

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');
    })
   } 

添加分類識(shí)別樣本數(shù)據(jù)

facemesh模型只負(fù)責(zé)把照片中面部特征轉(zhuǎn)換成一個(gè)數(shù)組,如果需要對(duì)每一張照片的數(shù)據(jù)再進(jìn)行分類就需要用到KNN模型,添加的樣本數(shù)據(jù)越多,識(shí)別的就越正確。

參考代碼:

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);
       }
       })
    }

測試照片識(shí)別結(jié)果

上傳一張照片匹配維護(hù)的照片庫中照片名稱是否正確

參考代碼:

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);
         })
        }
      });
    }

到這里就全部完成了,對(duì)tensorflow感興趣的朋友可以留言,下面有時(shí)間會(huì)繼續(xù)更新,實(shí)現(xiàn)利用攝像頭來識(shí)別人臉。

對(duì)asp.net coreCleanArchitecture 感興趣的朋友可以從github下載,也可以留言交流,這個(gè)項(xiàng)目我也會(huì)繼續(xù)更新,如果喜歡,請(qǐng)給個(gè)星星。

以上就是asp.net core 使用 tensorflowjs實(shí)現(xiàn) face recognition(源代碼)的詳細(xì)內(nèi)容,更多關(guān)于asp.net core實(shí)現(xiàn)face recognition的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#中ZipHelper 壓縮和解壓幫助類

    C#中ZipHelper 壓縮和解壓幫助類

    本文介紹C#實(shí)現(xiàn)壓縮與解壓縮幫助類ZipHelper,主要是通過ICSharpCode.SharpZipLib 類庫實(shí)現(xiàn)的。
    2016-05-05
  • C#設(shè)置MDI子窗體只能彈出一個(gè)的方法

    C#設(shè)置MDI子窗體只能彈出一個(gè)的方法

    這篇文章主要介紹了C#設(shè)置MDI子窗體只能彈出一個(gè)的方法,很實(shí)用的技巧,需要的朋友可以參考下
    2014-08-08
  • C#獲取客戶端相關(guān)信息實(shí)例總結(jié)

    C#獲取客戶端相關(guān)信息實(shí)例總結(jié)

    這篇文章主要介紹了C#獲取客戶端相關(guān)信息的方法,以實(shí)例形式總結(jié)了C#獲取客戶端IP地址、網(wǎng)絡(luò)連接、硬件信息等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • C#通過xpath查找xml指定元素的方法

    C#通過xpath查找xml指定元素的方法

    這篇文章主要介紹了C#通過xpath查找xml指定元素的方法,涉及C#操作XML文件的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#編程實(shí)現(xiàn)動(dòng)態(tài)改變配置文件信息的方法

    C#編程實(shí)現(xiàn)動(dòng)態(tài)改變配置文件信息的方法

    這篇文章主要介紹了C#編程實(shí)現(xiàn)動(dòng)態(tài)改變配置文件信息的方法,涉及C#針對(duì)xml格式文件的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫及表的方法

    C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫及表的方法

    這篇文章主要介紹了C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫及表的方法,以實(shí)例形式分析了創(chuàng)建access數(shù)據(jù)庫及在access數(shù)據(jù)庫中建表的完整過程,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-12-12
  • C#開啟線程的四種方式小結(jié)

    C#開啟線程的四種方式小結(jié)

    在C#中,多線程編程是處理并發(fā)操作、提高程序性能的重要手段,C#提供了多種方式來創(chuàng)建和管理線程,下面將介紹四種常用的開啟線程的方法,并附上相應(yīng)的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2024-06-06
  • C#實(shí)現(xiàn)的封裝CURD到SqlHelper類用法簡單分析

    C#實(shí)現(xiàn)的封裝CURD到SqlHelper類用法簡單分析

    這篇文章主要介紹了C#實(shí)現(xiàn)的封裝CURD到SqlHelper類用法,涉及數(shù)據(jù)庫相關(guān)配置方法及SqlHelper類的簡單使用技巧,代碼中包含了較為詳盡的注釋便于理解,需要的朋友可以參考下
    2017-11-11
  • C#串口通信模塊使用方法示例

    C#串口通信模塊使用方法示例

    這篇文章主要介紹了C#串口通信模塊使用方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 詳解C#中線程傳參,返回值和多線程沖突問題的解決

    詳解C#中線程傳參,返回值和多線程沖突問題的解決

    這篇文章主要為大家詳細(xì)介紹了C#中線程傳參,返回值和多線程沖突問題的解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11

最新評(píng)論

鸡西市| 前郭尔| 宁化县| 天津市| 淮北市| 松原市| 漠河县| 隆化县| 靖西县| 田林县| 冕宁县| 沧州市| 西安市| 嘉定区| 盱眙县| 剑阁县| 永丰县| 隆昌县| 西乌| 巨野县| 康定县| 泊头市| 抚远县| 襄城县| 宁阳县| 云安县| 台中市| 汉寿县| 平利县| 邯郸县| 仪征市| 拉萨市| 辛集市| 保定市| 河南省| 江油市| 桂东县| 招远市| 阿拉善左旗| 八宿县| 格尔木市|