您好,登錄后才能下訂單哦!
這篇文章主要介紹“asp.net core使用tensorflowjs實現face recognition的方法”,在日常操作中,相信很多人在asp.net core使用tensorflowjs實現face recognition的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”asp.net core使用tensorflowjs實現face recognition的方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
上傳照片文件名及是系統要識別標簽或是照片的名稱(人物標識)
提取照片臉部特征值(調用 facemesh模型)
保存特征值添加樣本(調用 knnClassifier)
測試上傳的圖片是否識別正確
源代碼(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, "保存成功"); } } }
掃描圖片獲取圖片中臉部的特征信息以一個多維數組的形式保存到數據庫中,這些特征值將用與下一步的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); }) } }); }
到此,關于“asp.net core使用tensorflowjs實現face recognition的方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。