Почему я не получаю правильный ответ об обнаруженных лицах, когда повторно использую тот же URL-адрес после замены старого изображения, хранящегося там? - PullRequest
0 голосов
/ 26 сентября 2019

Я загружаю изображение в хранилище BLOB-объектов Azure, пытаюсь получить координаты обнаруженных лиц на изображении, используя API-интерфейс Azure Face.

В первый раз это работает хорошо - я получаю правильныекоординаты;но со второго раза - когда я перезаписываю изображение, хранящееся в BLOB-объекте Azure, новым изображением - оно возвращает мне снова координаты, которые я получил в первый раз, вместо того, чтобы приносить мне координаты обнаруженных лиц в новом загруженном изображении.

Только если я подожду несколько дней, я загружаю новое изображение на этот URL - я получаю новые правильные координаты;но если я попытаюсь обнаружить лица на новом изображении через несколько минут / секунд / часов с последнего раза, это не даст мне правильного ответа.

Интересно то, что на портале Azure я вижуновое изображение хранится там, и я не вижу старого в BLOB-объекте.

Я пытаюсь преодолеть его, удалив каждое изображение из BLOB-объекта после его использования;Это означает, что каждый раз, когда я загружаю новое изображение в BLOB-объект, я не перезаписываю его, а создаю новое с тем же URL-адресом, который использовал ранее

Когда я пытался перезаписать изображение без удаления, оноТакже не сработало!

Вот код распознавания лиц:

 public async Task CropFacesAsync()
    {   UploadImageToStorage(imageName);

        FaceClient faceClient = new FaceClient(
  new ApiKeyServiceClientCredentials(subscriptionKey),
  new System.Net.Http.DelegatingHandler[] { });
        faceClient.Endpoint = uriBase;
     IList<DetectedFace> faces = await faceClient.Face.DetectWithUrlAsync("https://<private details>" + imageName, true, false);

        // Crop all the faces in the image.
        Image img = Image.FromFile(@"..\..\..\..\" + imageName), croppedFaceImg;
        FaceRectangle sample;
        Rectangle cropArea;
        Bitmap bmpImage = null;
        int index = 0;

        // Go over all the detected coordinates, and create new image(s) according to these.
        foreach (var face in faces)
        {
            sample = face.FaceRectangle;
            cropArea = new Rectangle(sample.Left, sample.Top, sample.Width, sample.Height);
            bmpImage = new Bitmap(img);

            croppedFaceImg = bmpImage.Clone(cropArea, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            croppedFaceImg.Save(@"..\..\..\..\" + imageName.Substring(0, imageName.Length - 4) + "_" + (index++) + ".jpg");

            bmpImage.Dispose();
        }

        // Release all resorces used by this image.
        img.Dispose();
        // Delete the image for testing from blob.
        DeleteBlob(imageName);
    }

У кого-то есть идеи, как решить эту проблему?

За исключением ответа в ближайшее время!Большое спасибо и хорошего дня!

...