圖片聚類基於照片的相似性將滿足分組條件的照片分到同一組,您可以使用該功能篩選相簿中連拍的照片,對其進行分組操作。
應用情境
網盤與相簿服務:可以對網盤或者相簿中的相似圖片進行聚類,產生個人化的圖片聚類展示。
圖片去重:針對APP或相簿中上傳和產生的圖片進行相似圖片聚類,以便刪除相似圖片,從而節省儲存空間和儲存成本。
前提條件
已根據使用情境為檔案建立中繼資料索引。具體操作,請參見建立中繼資料索引。
資料集的模板選擇“Official:ImageManagement”。
建立圖片聚類分組
調用CreateSimilarImageClusteringTask - 建立相似圖片聚類任務介面建立圖片聚類任務,對專案test-project下test-dataset資料集中的照片進行圖片聚類分組。
說明
使用圖片聚類會產生 API 呼叫費用,詳情請查看IMM計費項目說明。
請求樣本
{
"ProjectName": "test-project",
"DatasetName": "test-dataset"
}返回樣本
{
"TaskId": "SimilarImageClustering-3b4ce06c-f19e-43ba-8ae9-29a4ba617eac",
"RequestId": "0FA88E7A-85C8-5016-8182-80FA2A711D29",
"EventId": "3BF-1mc8MI8FsJWMMgJhDO6O98mepq1"
}範例程式碼
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
from typing import List
from alibabacloud_imm20200930.client import Client as imm20200930Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_imm20200930 import models as imm_20200930_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client(
access_key_id: str,
access_key_secret: str,
) -> imm20200930Client:
"""
使用AK&SK初始化帳號Client
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
# 必填,您的 AccessKey ID,
access_key_id=access_key_id,
# 必填,您的 AccessKey Secret,
access_key_secret=access_key_secret
)
# Endpoint 請參考 https://api.aliyun.com/product/imm
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
# 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
# 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例使用環境變數擷取 AccessKey 的方式進行調用,僅供參考,建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:https://www.alibabacloud.com/help/document_detail/378659.html
client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
create_similar_image_clustering_task_request = imm_20200930_models.CreateSimilarImageClusteringTaskRequest(
project_name='test-project',
dataset_name='test-dataset'
)
runtime = util_models.RuntimeOptions()
try:
# 複製代碼運行請自行列印 API 的傳回值
client.create_similar_image_clustering_task_with_options(create_similar_image_clustering_task_request, runtime)
except Exception as error:
# 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
# 錯誤 message
print(error.message)
# 診斷地址
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
@staticmethod
async def main_async(
args: List[str],
) -> None:
# 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
# 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例使用環境變數擷取 AccessKey 的方式進行調用,僅供參考,建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:https://www.alibabacloud.com/help/document_detail/378659.html
client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
create_similar_image_clustering_task_request = imm_20200930_models.CreateSimilarImageClusteringTaskRequest(
project_name='test-project',
dataset_name='test-dataset'
)
runtime = util_models.RuntimeOptions()
try:
# 複製代碼運行請自行列印 API 的傳回值
await client.create_similar_image_clustering_task_with_options_async(create_similar_image_clustering_task_request, runtime)
except Exception as error:
# 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
# 錯誤 message
print(error.message)
# 診斷地址
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])查詢圖片聚類分組
調用QuerySimilarImageClusters - 查詢相似圖片聚類介面查詢圖片聚類任務,查詢專案名稱為test-project下資料集test-dataset中的圖片分組資訊。
請求樣本
{
"ProjectName": "test-project",
"DatasetName": "test-dataset"
}返回樣本
{
"SimilarImageClusters": [
{
"ObjectId": "SimilarImageCluster-e5cdfdad-c02a-4093-aa58-400ff2e4520b",
"CreateTime": "2024-03-07T14:57:13.047481088+08:00",
"UpdateTime": "2024-03-07T14:57:13.047481088+08:00",
"Files": [
{
"ImageScore": 0.749,
"URI": "oss://test-ivanivan/p637447.jpeg"
},
{
"ImageScore": 0.749,
"URI": "oss://test-ivanivan/p637448.jpeg"
}
]
},
{
"ObjectId": "SimilarImageCluster-3350bbcf-a044-42f2-bedc-57eede4d476f",
"CreateTime": "2024-03-07T14:57:12.955958016+08:00",
"UpdateTime": "2024-03-07T14:57:12.955958016+08:00",
"Files": [
{
"ImageScore": 0.736,
"URI": "oss://test-ivanivan/hanhong.png"
},
{
"ImageScore": 0.736,
"URI": "oss://test-ivanivan/hanhong2.png"
}
]
},
{
"ObjectId": "SimilarImageCluster-4c239671-5504-4910-90f6-03cd863f686e",
"CreateTime": "2024-03-07T14:57:12.886128896+08:00",
"UpdateTime": "2024-03-07T14:57:12.886128896+08:00",
"Files": [
{
"ImageScore": 0.692,
"URI": "oss://test-ivanivan/dir1/mp4_png.png"
},
{
"ImageScore": 0.67,
"URI": "oss://test-ivanivan/dir1/demo.gif"
}
]
},
{
"ObjectId": "SimilarImageCluster-e77ac1ad-44b4-49d5-baa7-ad871efd0503",
"CreateTime": "2024-03-07T14:57:12.817118976+08:00",
"UpdateTime": "2024-03-07T14:57:12.817118976+08:00",
"Files": [
{
"ImageScore": 0.717,
"URI": "oss://test-ivanivan/OIP-C.jpeg"
},
{
"ImageScore": 0.717,
"URI": "oss://test-ivanivan/OIP-C1.jpeg"
}
]
},
{
"ObjectId": "SimilarImageCluster-315751c6-5b69-43b4-8c37-00e7ad2ec0e6",
"CreateTime": "2024-03-07T14:57:12.745981952+08:00",
"UpdateTime": "2024-03-07T14:57:12.745981952+08:00",
"Files": [
{
"ImageScore": 0.714,
"URI": "oss://test-ivanivan/A6.jpg"
},
{
"ImageScore": 0.709,
"URI": "oss://test-ivanivan/A4 (1).jpg"
}
]
},
{
"ObjectId": "SimilarImageCluster-140d3e92-7e67-4b9d-8066-3aea778e5898",
"CreateTime": "2024-03-07T14:57:12.65400192+08:00",
"UpdateTime": "2024-03-07T14:57:12.65400192+08:00",
"Files": [
{
"ImageScore": 0.709,
"URI": "oss://test-ivanivan/A1 (1).jpg"
},
{
"ImageScore": 0.709,
"URI": "oss://test-ivanivan/A2 (1).jpg"
}
]
}
],
"RequestId": "5830FFD2-C2E5-5431-9180-EBBACCC2FECE",
"NextToken": ""
}範例程式碼
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
from typing import List
from alibabacloud_imm20200930.client import Client as imm20200930Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_imm20200930 import models as imm_20200930_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client(
access_key_id: str,
access_key_secret: str,
) -> imm20200930Client:
"""
使用AK&SK初始化帳號Client
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
# 必填,您的 AccessKey ID,
access_key_id=access_key_id,
# 必填,您的 AccessKey Secret,
access_key_secret=access_key_secret
)
# Endpoint 請參考 https://api.aliyun.com/product/imm
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
# 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
# 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例使用環境變數擷取 AccessKey 的方式進行調用,僅供參考,建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:https://www.alibabacloud.com/help/document_detail/378659.html
client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
query_similar_image_clusters_request = imm_20200930_models.QuerySimilarImageClustersRequest(
dataset_name='test-dataset',
project_name='test-project'
)
runtime = util_models.RuntimeOptions()
try:
# 複製代碼運行請自行列印 API 的傳回值
client.query_similar_image_clusters_with_options(query_similar_image_clusters_request, runtime)
except Exception as error:
# 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
# 錯誤 message
print(error.message)
# 診斷地址
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
@staticmethod
async def main_async(
args: List[str],
) -> None:
# 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
# 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例使用環境變數擷取 AccessKey 的方式進行調用,僅供參考,建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:https://www.alibabacloud.com/help/document_detail/378659.html
client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
query_similar_image_clusters_request = imm_20200930_models.QuerySimilarImageClustersRequest(
dataset_name='test-dataset',
project_name='test-project'
)
runtime = util_models.RuntimeOptions()
try:
# 複製代碼運行請自行列印 API 的傳回值
await client.query_similar_image_clusters_with_options_async(query_similar_image_clusters_request, runtime)
except Exception as error:
# 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
# 錯誤 message
print(error.message)
# 診斷地址
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])