当我尝试上传带口罩的图像时,认知面部检测不起作用

Posted

技术标签:

【中文标题】当我尝试上传带口罩的图像时,认知面部检测不起作用【英文标题】:Cognitive face detection is not working when I try to upload the image with a face mask 【发布时间】:2020-08-28 06:55:57 【问题描述】:

关于如何在认知人脸识别中获取带面具的图像信息有什么建议吗? 当我上传带有头饰或眼镜的图像时,认知服务会返回图像信息,但在选择带面具的图像时,认知服务不会返回任何信息。这意味着我的认知服务实现无法识别带有面具的图像。如果有人遇到过这个问题并解决了,请给我一个解决方案。

  public string subscriptionKey = "88c**************************f7";

  public string uriBase = "https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect";

//Method to pick an image from the gallery
 async void btnPick_Clicked(object sender, System.EventArgs e)
        

            try
            
                if (!CrossMedia.Current.IsPickPhotoSupported)
                

                    return;
                

                var file = await CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions
                
                    PhotoSize = Plugin.Media.Abstractions.PhotoSize.Medium
                );
                if (file == null) return;
                imgSelected.Source = ImageSource.FromStream(() => 
                    var stream = file.GetStream();
                    return stream;
                );
                MakeAnalysisRequest(file.Path);
            
            catch (Exception ex)
            
                string test = ex.Message;
            

        

> //convert Convert image to byte array

 public byte[] GetImageAsByteArray(string imageFilePath)
        
            using (FileStream fileStream =
                new FileStream(imageFilePath, FileMode.Open, FileAccess.Read))
            
                BinaryReader binaryReader = new BinaryReader(fileStream);
                return binaryReader.ReadBytes((int)fileStream.Length);
            
        

> //Method to get image information from the detection Url

 public async void MakeAnalysisRequest(string imageFilePath)
        
            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);

            string requestParameters = "returnFaceId=true&returnFaceLandmarks=false" +
                "&returnFaceAttributes=age,gender,headPose,smile,facialHair,glasses," +
                "emotion,hair,makeup,occlusion,accessories,blur,exposure,noise";

            string uri = uriBase + "?" + requestParameters;
            HttpResponseMessage response;
            byte[] byteData = GetImageAsByteArray(imageFilePath);

            using (ByteArrayContent content = new ByteArrayContent(byteData))
            
                content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                response = await client.PostAsync(uri, content);

                string contentString = await response.Content.ReadAsStringAsync();

        //***************************************************
            //Here it return null in case of mask else its working fine 
        //***************************************************

                List<ResponseModel> faceDetails = JsonConvert.DeserializeObject<List<ResponseModel>>(contentString);

                if (faceDetails.Count != 0)
                
                    lblTotalFace.Text = "Total Faces : " + faceDetails.Count;
                    lblGender.Text = "Gender : " + faceDetails[0].faceAttributes.gender;
                    lblAge.Text = "Total Age : " + faceDetails[0].faceAttributes.age;

                    Console.WriteLine(faceDetails[0].faceAttributes.accessories.FirstOrDefault(x => x.type == "mask").confidence);
                

            
        

【问题讨论】:

【参考方案1】:

您必须牢记两件事:

服务可能看不到某些面孔,请参阅doc:

由于技术挑战,可能无法检测到某些面孔。 极端的面部角度(头部姿势)或面部遮挡(物体如 太阳镜或挡住部分面部的手)可能会影响检测。 正面和近正面效果最好。

Face API 目前有 2 种检测模型:“detection_01”和“detection_02”。这个最新模型(如果我记得很清楚,自 2019 年 5 月以来就存在)具有更好的性能(尤其是对于旋转或部分隐藏的人脸),但没有提供模型 1 提供的所有输出信息。

检测模型的区别

我使用“认知工作台”演示门户(here)做了一个快速演示,其中包含以下图片:

检测_01:未找到人脸

使用 detection_02:找到了人脸,正如您在此捕获中看到的那样:

但如果您需要使用面部的特定属性,这可能无法解决您的问题。请参阅 API 文档摘录:

【讨论】:

以上是关于当我尝试上传带口罩的图像时,认知面部检测不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试将用户上传的图像保存在视图中时,为啥 ImageField 中的 upload_to 根本不起作用

iOS - 将图像裁剪为检测到的面部的问题

文件上传到 Firebase 存储不起作用(“存储/无效参数”)

检测旋转的面孔微软认知服务

cloudinary上的图像上传在heroku中不起作用

颤振图像上传在真实设备上不起作用,虽然它适用于模拟器