public async Task <JsonResponse> MatchAsync(float[] feat)
        {
            if (feat.Length != ServiceOption.FeatureLength)
            {
                return(JsonResponse.ArgExceedLimit());
            }

            var bSearch = await Task.FromResult(Search(feat, out var searchResult));

            if (!bSearch)
            {
                return(JsonResponse.MatchError());
            }

            var dis        = searchResult.Select(item => item.Dis);
            var faceInfos  = searchResult.Select(item => m_faceInfo.Get(item.Index));
            var ids        = faceInfos.Select(item => item.Id);
            var imagePaths = faceInfos
                             .Select(item => item.ImagePath)
                             .Select(imagePath => $"http://{ServiceOption.PublicIP}/api/FaceRecognition/getImageFile/{Path.GetFileName(imagePath)}");

            return(new JsonResponse
            {
                Code = 0,
                Msg = "Success",
                Data = new
                {
                    Ids = ids.ToArray(),
                    Dis = dis.ToArray(),
                    ImageUrls = imagePaths.ToArray()
                }
            });
        }
        public async Task <JsonResponse> AddAsync(IFormFile file)
        {
            if (file == null)
            {
                return(JsonResponse.ArgExceedLimit());
            }

            var fileData = await IOHelper.GetFileDataAsync(file);

            if (fileData.Length <= 0)
            {
                return(JsonResponse.ArgExceedLimit());
            }

            var feat = FaceEncoding(fileData);

            if (feat == null)
            {
                return(JsonResponse.FaceEncodingError());
            }

            var id = Guid.NewGuid().ToString();

            var imagePath = await SaveImageFileAsync(ServiceOption.ImageSavePath, id, file.FileName, fileData);

            return(await AddIndexAsync(feat, id, imagePath));
        }
        public async Task <JsonResponse> MatchAsync(IFormFile file)
        {
            if (file == null)
            {
                return(JsonResponse.ArgExceedLimit());
            }

            var fileData = await IOHelper.GetFileDataAsync(file);

            if (fileData.Length <= 0)
            {
                return(JsonResponse.ArgExceedLimit());
            }

            var feat = FaceEncoding(fileData);

            if (feat == null)
            {
                return(JsonResponse.FaceEncodingError());
            }
            return(await MatchAsync(feat));
        }