asp.net core 는 tensor flowjs 를 사용 하여 face recognition 의 소스 코드 를 실현 합 니 다.


기능 설명
  • 사진 파일 이름 및 시스템 에서 라벨 이나 사진 을 식별 해 야 하 는 이름(인물 표지)
  • 사진 얼굴 특징 값 추출(facemesh 모델 호출)
  • 특징 값 저장 샘플 추가(knnClassifier 호출)
  • 올 린 사진 의 식별 이 정확 한 지 테스트 합 니 다
  • 프로젝트 의존 라 이브 러 리
    소스 코드(neozhu/smartadmin.core.urf: Domain Driven Design (DDD) ultra-lightweight rapid development architecture(support .net 5.0) (github.com))
    tensoflowjs,이 프로젝트 에서 저 는 ml5js 라 는 봉 인 된 기 계 를 사용 하여 자바 스 크 립 트 라 이브 러 리 를 배 웠 습 니 다.사용 하기 가 더욱 간단 합 니 다.
    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);
             })
            }
          });
        }
    여기까지 만 하면 모두 완 성 됩 니 다.tensor flow 에 관심 이 있 는 친 구 는 메 시 지 를 남 길 수 있 습 니 다.다음 시간 이 있 으 면 계속 업데이트 되 어 카 메 라 를 이용 하여 얼굴 을 식별 할 수 있 습 니 다.
    asp.net core Clean Architecture 에 관심 이 있 는 친 구 는 github 에서 다운로드 할 수도 있 고 댓 글 을 달 아 교류 할 수도 있 습 니 다.이 프로젝트 는 저도 계속 업데이트 하 겠 습 니 다.마음 에 드 시 면 별 을 주세요.
    이상 은 asp.net core 가 tensoflowjs 를 사용 하여 face recognition(소스 코드)을 실현 하 는 상세 한 내용 입 니 다.asp.net core 가 face recognition 을 실현 하 는 데 관 한 자 료 는 다른 관련 글 을 주목 하 시기 바 랍 니 다!

    좋은 웹페이지 즐겨찾기