您好,登錄后才能下訂單哦!
這篇文章主要介紹“asp.net core使用tensorflowjs實現(xiàn)face recognition的方法”,在日常操作中,相信很多人在asp.net core使用tensorflowjs實現(xiàn)face recognition的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”asp.net core使用tensorflowjs實現(xiàn)face recognition的方法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
上傳照片文件名及是系統(tǒng)要識別標(biāo)簽或是照片的名稱(人物標(biāo)識)
提取照片臉部特征值(調(diào)用 facemesh模型)
保存特征值添加樣本(調(diào)用 knnClassifier)
測試上傳的圖片是否識別正確
源代碼(neozhu/smartadmin.core.urf: Domain Driven Design (DDD) ultra-lightweight rapid development architecture(support .net 5.0) (github.com))
tensorflowjs,在該項目中我使用了ml5js這個封裝過的機器學(xué)習(xí)JavaScript類庫, 使用起來更簡單
Demo
http://106.52.105.140:6200/photos/index
demo/123456
上傳照片功能
asp.net core 參考CleanArchitecture 結(jié)構(gòu)實現(xiàn)后臺代碼,
參考代碼如下(具體請看源代碼):
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, "保存成功"); } } }
掃描圖片獲取圖片中臉部的特征信息以一個多維數(shù)組的形式保存到數(shù)據(jù)庫中,這些特征值將用與下一步的KNN分類識別使用
完成每一張照片中臉部信息的數(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'); }) }
facemesh模型只負(fù)責(zé)把照片中面部特征轉(zhuǎn)換成一個數(shù)組,如果需要對每一張照片的數(shù)據(jù)再進(jìn)行分類就需要用到KNN模型,添加的樣本數(shù)據(jù)越多,識別的就越正確。
參考代碼:
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); } }) }
上傳一張照片匹配維護(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); }) } }); }
到此,關(guān)于“asp.net core使用tensorflowjs實現(xiàn)face recognition的方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。