public class AzureAiVisionObjectDetectionApproach()

in experiments/art-detection-by-llm/src/Approaches/AzureAiVisionObjectDetectionApproach.cs [10:50]


public class AzureAiVisionObjectDetectionApproach(IConfiguration config) : IDetectArt
{
    private readonly IConfiguration _config = config;
    private readonly HttpClient _httpClient = new();

    public string ApproachShortName => "AiVision-ObjectDetection";

    public Polygon[] GetBoundingBoxes(string imageUrl)
    {
        List<Polygon> polygonBoundingBoxes = [];

        var request = new HttpRequestMessage
        {
            Method = HttpMethod.Post,
            RequestUri = new Uri($"{_config["AzureComputerVisionUrl"]}vision/v3.2/analyze?visualFeatures=Objects"),
            Headers = 
            {
                { "Ocp-Apim-Subscription-Key", _config["AzureComputerVisionKey"] }
            },
            Content = new StringContent("{\"url\":\"" + imageUrl + "\"}", Encoding.UTF8, "application/json")
        };
        var response = _httpClient.Send(request);
        var responseContent = response.Content.ReadAsStringAsync().Result;
        var responseObj = JsonSerializer.Deserialize<AnalyzeImageResponse>(responseContent);

        foreach (var obj in responseObj.objects)
        {
            Console.WriteLine($"Object detected: {obj.@object} ({obj.confidence}) [ {obj.rectangle.x}, {obj.rectangle.y}, {obj.rectangle.w}, {obj.rectangle.h} ]");
            PointF[] points = [
                new PointF(obj.rectangle.x, obj.rectangle.y),
                new PointF(obj.rectangle.x + obj.rectangle.w, obj.rectangle.y),
                new PointF(obj.rectangle.x + obj.rectangle.w, obj.rectangle.y + obj.rectangle.h),
                new PointF(obj.rectangle.x, obj.rectangle.y + obj.rectangle.h),
            ];
            var polygon = new Polygon(points);
            polygonBoundingBoxes.Add(polygon);
        }

        return [.. polygonBoundingBoxes];
    }
}