随着 Aspose.Imaging Cloud 20.5 的发布,我们很高兴地宣布了图像中的对象检测功能。它使用户能够根据标签和概率检测输入图像上的对象边界。当前实现支持 单次检测方法 来识别使用 COCO 2017 数据集训练模型的对象。SSD 方法将边界框的输出空间离散化为一组默认框,每个特征图位置具有不同的纵横比和比例。

Aspose.Imaging Cloud 基于以下 4 种方法执行对象检测:

  1. 检测现有图像上的对象并以 JSON 对象形式返回结果
  2. 检测现有图像上的对象并以图像形式返回结果
  3. 上传图像、检测其中的对象并将结果作为 JSON 对象返回
  4. 上传图像、检测其中的对象并以图像形式返回结果

在本节中,我们将进一步详细讨论以下部分

检测物体边界

此方法检测现有图像上的对象并将结果作为 JSON 对象返回。

请求查询参数:

  • name(字符串,必需):图像名称。目前,我们支持 3 种图像格式:BMP、JPEG 和 JPEG 2000。
  • 方法(字符串,可选,默认“ssd”):对象检测方法。
  • 阈值(数字,可选,[0 - 100],默认值为 50):将包含在结果中的检测到的物体的最小概率(以百分比表示)。
  • includeLabel(布尔值,可选,默认为 false):是否在响应中包含检测到的对象标签。
  • includeScore(布尔值,可选,默认 false):是否在响应中包含检测到的对象概率。
  • 文件夹(字符串,可选):文件夹。
  • 存储(字符串,可选):存储。

使用 cURL 命令进行对象检测

还可以使用 cURL 命令访问 Aspose.Imaging Cloud。以下命令显示如何使用 cURL 命令检测对象并获取 JSON 对象形式的响应。

我们使用下图来检测物体。

猫图像样本

图片 1:源图像

curl "https://api.aspose.cloud/v3.0/imaging/ai/objectdetection/cat-pet-animal-domestic-104827.jpeg/bounds?method=ssd&threshold=50&includeLabel=true&includeScore=true" \
-X GET \
-H "accept: application/json" \
-H "authorization: Bearer <jwt token>"

请求 URL

https://api.aspose.cloud/v3.0/imaging/ai/objectdetection/cat-pet-animal-domestic-104827.jpeg/bounds?method=ssd&threshold=50&includeLabel=true&includeScore=true

响应主体

{
  "detectedObjects": [
    {
      "label": "cat",
      "score": 0.9450986,
      "bounds": {
        "x": 43,
        "y": 4,
        "width": 401,
        "height": 323
      }
    }
  ]
}

响应架构

{
    "type": "object",
    "properties": {
        "detectedObjects": {
            "type": "array",
            "items": [
                {
                    "type": "object",
                    "properties": {
                        "score": {
                            "type": "number"
                        },
                        "label": {
                            "type": "string"
                        },
                        "bounds": {
                            "type": "object",
                            "properties": {
                                "x": {
                                    "type": "number"
                                },
                                "y": {
                                    "type": "number"
                                },
                                "width": {
                                    "type": "number"
                                },
                                "height": {
                                    "type": "number"
                                }
                            },
                            "required": [
                                "x",
                                "y",
                                "width",
                                "height"
                            ]
                        }
                    },
                    "required": [
                        "score",
                        "label",
                        "bounds"
                    ]
                }
            ]
        }
    },
    "required": [
        "detectedObjects"
    ]
}

使用 C# 在图像中进行对象检测

请尝试使用以下代码片段,使用 C# 代码片段在图像中进行对象检测。

C# .NET 代码片段

///<summary>
/// 从云存储中检测图像上的物体。
///</summary>
public static void DetectObjectsImageFromStorage()
{
    string MyAppKey = "xxxxx";   // Get AppKey and AppSID from https://dashboard.aspose.cloud/
    string MyAppSid = "xxxxx";   // Get AppKey and AppSID from https://dashboard.aspose.cloud/

    string method = "ssd";
    int threshold = 50;
    bool includeLabel = true;
    bool includeScore = true;
    string folder = "";    // Input file is saved at default folder in the storage
    string storage = null; // We are using default Cloud Storage

    // 初始化 Aspose.Imaging Cloud 对象
    ImagingApi imagingApi = new ImagingApi(appKey: MyAppKey, appSid: MyAppSid, debug: false);
    imagingApi.UploadFile(new Aspose.Imaging.Cloud.Sdk.Model.Requests.UploadFileRequest("dog-and-cat-cover.jpg", File.Open("dog-and-cat-cover.jpg", FileMode.Open), null));

    var request = new Aspose.Imaging.Cloud.Sdk.Model.Requests.GetObjectBoundsRequest("dog-and-cat-cover.jpg", method, threshold, includeLabel, includeScore, folder, storage);
    Console.WriteLine($"Call ObjectBoundsRequest with params: method:{method}, threshold:{threshold}, include label: {includeLabel}, includeScore: {includeScore}");
    Aspose.Imaging.Cloud.Sdk.Model.DetectedObjectList detectedObjectList = imagingApi.GetObjectBounds(request);
    // 获取图像文件中的对象数量
    Console.WriteLine("Objects detected: " + detectedObjectList.DetectedObjects.Count);
}

检测物体边界并返回图像

上传图像,检测物体,在物体周围绘制边界,并将结果以图像形式返回。

请求查询参数:

  • name (string, 必选):图片名称,目前支持bmp、jpg、jpeg、jpeg2000三种图片格式。
  • 方法(字符串,可选,[“ssd”],默认“ssd”):对象检测方法。
  • 阈值(数字,可选,[0 - 100],默认值为 50):结果中包含的最小对象的概率百分比。
  • includeLabel(布尔值,可选,默认为 false):是否在响应中包含检测到的对象标签。
  • includeScore(布尔值,可选,默认 false):是否在响应中包含检测到的对象概率。
  • color(字符串,可选):检测到的对象边界和信息的自定义颜色。如果等于 null,则不同标签的对象具有不同颜色的边界。
  • 文件夹(字符串,可选):文件夹。
  • 存储(字符串,可选):存储。

使用 cURL 命令确定对象

Aspose.Imaging Cloud 也可以通过 cURL 命令访问。但是,作为先决条件,您需要先根据您的客户端凭据生成 JWT 访问令牌。请执行以下命令来生成 JWT 令牌。

curl -v "https://api.aspose.cloud/connect/token" \
-X POST \
-d "grant_type=client_credentials&client_id=4ccf1790-accc-41e9-8d18-a78dbb2ed1aa&client_secret=caac6e3d4a4724b2feb53f4e460eade3" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json"

现在执行以下命令来检测对象边界并将其作为图像返回。

curl -v "https://api.aspose.cloud/v3.0/imaging/ai/objectdetection/dog-and-cat-cover.jpg/visualbounds?method=ssd&threshold=50&includeLabel=false&includeScore=false&color=Red" \
-X GET \
-H "accept: application/json" \
-H "authorization: Bearer <JWT Token>"

请求 URL

https://api.aspose.cloud/v3.0/imaging/ai/objectdetection/dog-and-cat-cover.jpg/visualbounds?method=ssd&threshold=50&includeLabel=false&includeScore=false&color=Red

在上面的请求中,注意红色被指定为高亮颜色。

C#.NET 代码片段

以下代码片段显示了加载包含两个对象(狗和猫)的图像文件的步骤。这两个对象均使用 Aspose.Imaging Cloud API 进行识别。突出显示对象的结果图像保存在系统驱动器上。

///<summary>
/// 在请求流中传递的图像上可视化检测到的对象。
///</summary>
public static void VisualizeObjectsImageFromRequestBody()
{
    Console.WriteLine("Detect objects on an image. Image data is passed in a request stream");

    string MyAppKey = "xxxxx";   // Get AppKey and AppSID from https://dashboard.aspose.cloud/
    string MyAppSid = "xxxxx";   // Get AppKey and AppSID from https://dashboard.aspose.cloud/
    // 初始化 Aspose.Imaging Cloud 对象
    ImagingApi imagingApi = new ImagingApi(appKey: MyAppKey, appSid: MyAppSid, debug: false);
    using (FileStream inputImageStream = File.OpenRead("dog-and-cat-cover.jpg"))
    {
        string method = "ssd";
        int threshold = 50;
        bool includeLabel = true;
        bool includeScore = true;
        string color = null;
        string outPath = null;
        string storage = null; // We are using default Cloud Storage

        var request = new Aspose.Imaging.Cloud.Sdk.Model.Requests.CreateVisualObjectBoundsRequest(inputImageStream, method, threshold, includeLabel, includeScore, color, outPath, storage);

        Console.WriteLine($"Call CreateVisualObjectBoundsRequest with params: method:{method}, threshold:{threshold}, include label: {includeLabel}, include score: {includeScore}");

        using (Stream updatedImage = imagingApi.CreateVisualObjectBounds(request))
        {
            // 将更新的图像流保存到系统位置
            System.Drawing.Image img = System.Drawing.Image.FromStream(updatedImage);
            img.Save("/Users/Aspose/Desktop/myImage.Jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);
        }
    }
    Console.WriteLine();
}
猫和狗的封面图片

图 2:输入猫和狗的图片

处理后的图像突出显示已识别的物体

图 3:处理后的图像突出显示已识别的物体

有关图像搜索的更多信息,请访问反向图像搜索

结论

在本文中,我们了解了 Aspose.Imaging Cloud 用于图像中对象检测的功能。要识别图像中的对象,您可以使用代码片段或使用 cURL 命令。此外,为了方便我们的客户,我们创建了特定于编程语言的 SDK,并在上面的文章中,我们探讨了 Aspose.Imaging Cloud SDK for .NET 用于对象检测的功能。SDK 的完整源代码可在 GitHub 上下载。

相关文章

我们建议您访问以下链接以了解更多信息: