Intelligent Media Management (IMM) は、セマンティクスに基づいてメディアデータを取得するためのセマンティックベクター検索モデルを使用します。本トピックでは、セマンティック検索の使用方法について説明します。
機能概要
従来のスカラー検索方式は、ファイル名、作成時刻、フォーマットなどのメタデータ属性に依存して情報を取得します。一方、セマンティック検索はベクター検索方式を用い、「森林の鳥瞰図」や「雪景色の街並み」、「昨年の夏の草原」など、コンテンツの意味やセマンティクスに基づいて情報を取得します。セマンティック検索機能を使用して、Object Storage Service (OSS) および Photo and Drive Service に保存されたデータを取得できます。
利用シーン
業務ファイル検索
セマンティック検索により、「ERP システムの操作手順」、「機器修理プロセス」、「2024 年度ビジネス運用分析」などのセマンティックコンテンツまたはキーワードに基づいて目的の業務ファイルを検索でき、ファイル検索を効率化し、業務効率を向上させます。
マルチメディア検索
セマンティック検索により、高速かつ効率的なメディアデータ検索・取得機能をマルチメディアネットワーキングアプリケーションに統合できます。たとえば、画像中心のソーシャルネットワークアプリケーションにセマンティック検索を実装することで、ユーザーが「昨年の春の郊外でのお出かけ」、「旧正月の家族団らん」、「私の海での体験」などのセマンティックコンテンツを使って画像を検索できるようになります。これにより、利便性と楽しさが大幅に向上します。
オンラインストレージ
多くのオンラインストレージサービスは、ファイル名、作成時刻、拡張子などの属性に基づくスカラー検索を提供しています。セマンティック検索を使用すると、セマンティックコンテンツに基づいてドキュメントや画像などの特定の種類のデータを効率的に取得できます。
監視ビデオ検索
セマンティック検索により、「昨日の屋外の雪に関する監視ビデオ」や「晴天時の果樹園」などのセマンティックキーワードに基づいて監視ビデオを検索・取得できます。
使用制限
セマンティック検索は、画像およびドキュメントのみをサポートします。
セマンティック検索は、中国 (北京) リージョンでのみ利用可能です。
セマンティック検索がサポートする画像フォーマットは、JPG、PNG、BMP、GIF、WebP、TIFF、HEIC、AVIF です。
この機能がサポートする画像の最大サイズは 20 MB、幅または高さは 30,000 ピクセル以下、総ピクセル数は 2 億 5,000 万以下です。GIF 画像などの動的画像の総ピクセル数は、次の数式で計算されます:幅 × 高さ × フレーム数。PNG 画像などの静的画像の総ピクセル数は、次の数式で計算されます:幅 × 高さ。
ドキュメントの文字数上限は 300,000 文字です。上限を超える末尾の文字は切り捨てられます。
データのインデックス作成および分析は非同期で実行されます。IndexFileMeta などのインデックス作成 API オペレーションを呼び出してインデックスを作成する際は、コールバックを使用してデータ分析の完了を確認する必要があります。データ分析の完了時間は、データの型、サイズ、分析の複雑さによって異なり、数秒から数分かかります。データ分析が完了すると、ストレージエンジンがインデックスを作成します(完了まで数秒かかります)。インデックスが作成されると、セマンティック検索を使用してデータを検索できます。
前提条件
アプリケーションシナリオのメタデータに基づいてインデックスが作成されている必要があります。詳細については、「メタデータインデックスの作成」をご参照ください。
-
データセットに対して、"Official:CognitionImageManagement" または "Official:CognitionDocumentManagement" ワークフローテンプレートを選択します。これらのテンプレートは、それぞれ画像およびドキュメントのセマンティック検索に対応しています。
セマンティック検索が不要になった場合は、データセットを削除することを推奨します。データセットは OSS から自動的に継続的にメタデータを抽出するため、API 呼び出し料金が発生します。
課金
IMM 課金:セマンティック検索により、メタデータ管理に関連する料金が発生します。詳細については、「課金対象項目」をご参照ください。
セマンティック検索を使用する場合、データセットに対して "Official:CognitionImageManagement" または "Official:CognitionDocumentManagement" ワークフローテンプレートを選択する必要があります。これらのテンプレートは、それぞれ画像とドキュメントのセマンティック検索に使用されます。テンプレートには複数のオペレーターが含まれています。セマンティック検索オペレーターは無料ですが、他のオペレーターは課金対象です。テンプレートとオペレーターのマッピングの詳細については、「ワークフローテンプレートとオペレーター」をご参照ください。
OSS 課金:詳細については、「課金概要」をご参照ください。
使用方法
SemanticQuery オペレーションを呼び出して、test-dataset データセット内のメタデータを test-project プロジェクトで検索します。
画像のセマンティック検索
たとえば、フォトアルバムに多数の旅行写真が含まれており、その一部は 2020 年 7 月に成都ジャイアントパンダ繁殖研究基地で撮影されたパンダの写真であるとします。セマンティック検索を使用してこれらの写真を検索するには、写真のメタデータをインデックス化するデータセットを作成します。その後、「2020 年 7 月の成都のパンダ」のようなキーワードクエリを使用して取得できます。
次の例は、[test-project] プロジェクト内の [test-dataset] データセットで、「[Pandas in Chengdu in July 2020]」を含むファイルを検索する方法を示しています。
リクエスト例
{
"ProjectName": "test-project",
"DatasetName": "test-dataset",
"Query": "Pandas in Chengdu in July 2020"
}
応答例
{
"RequestId": "645FB6D9-5EA0-02C9-B253-****",
"Files": [
{
"ProduceTime": "2020-07-19T17:11:11+08:00",
"ObjectACL": "default",
"ContentType": "image/jpeg",
"ProjectName": "test-project",
"Size": 22868,
"URI": "oss://test-bucket/test-object.jpg",
"Addresses": [
{
"Language": "zh-Hans",
"Township": "Sanhe Sub-district",
"AddressLine": "Chengdu Research Base of Giant Panda Breeding, Sanhe Sub-district, Xindu District, Chengdu City, Sichuan Province",
"Country": "China",
"City": "Chengdu",
"District": "Xindu District",
"Province": "Sichuan Province"
}
],
"ObjectType": "file",
"OwnerId": "****",
"FileModifiedTime": "2021-05-13T10:22:44+08:00",
"ImageWidth": 270,
"OSSStorageClass": "Standard",
"MediaType": "image",
"ObjectId": "****",
"CreateTime": "2022-07-06T07:10:18.497753661+08:00",
"Filename": "1.jpg",
"Labels": [
{
"CentricScore": 0.757,
"Language": "zh-Hans",
"LabelConfidence": 0.946,
"LabelName": "Panda",
"LabelLevel": 2,
"ParentLabelName": "Wildlife"
},
...
],
"Orientation": 1,
"EXIF": "...",
"ContentMd5": "HZwoCnxPZ/fvhz4oRJ****",
"ImageHeight": 270,
"ImageScore": {
"OverallQualityScore": 0.719
},
"ETag": "\"1D9C280A7C4F67F7EF873E28449D****\"",
"DatasetName": "test-dataset",
"FileHash": "\"1D9C280A7C4F67F7EF873E2****\"",
"UpdateTime": "2022-07-06T07:10:18.497753661+08:00",
"OSSCRC64": "5634447745650079669",
"OSSTaggingCount": 0,
"LatLong": "34.000000,119.000000",
"OSSObjectType": "Normal"
}
]
}
サンプルコード (IMM SDK for Python 1.27.3)
# -*- coding: utf-8 -*-
import os
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:
"""
AccessKey ID および AccessKey Secret を使用してクライアントを初期化します。
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
access_key_id=access_key_id,
access_key_secret=access_key_secret
)
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main() -> None:
# Alibaba Cloud アカウントの AccessKey ペアにはすべての API オペレーションに対する権限があります。セキュリティリスクを回避するため、RAM ユーザーとして API オペレーションを呼び出すか、日常的な運用管理 (O&M) を実施することを推奨します。
# プロジェクトコード内に AccessKey ペア (AccessKey ID および AccessKey Secret) をハードコードしないでください。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
# この例では、環境変数から AccessKey ペアを読み取ることで、API アクセスの本人確認を実現しています。環境変数の設定方法については、https://www.alibabacloud.com/help/document_detail/2361894.html をご参照ください。
imm_access_key_id = os.getenv("AccessKeyId")
imm_access_key_secret = os.getenv("AccessKeySecret")
client = Sample.create_client(imm_access_key_id, imm_access_key_secret)
semantic_query_request = imm_20200930_models.SemanticQueryRequest(
query='Pandas in Chengdu in July 2020',
project_name='test-project',
dataset_name='test-dataset',
max_results=100
)
runtime = util_models.RuntimeOptions()
try:
# API オペレーションの応答を出力します。
response = client.semantic_query_with_options(semantic_query_request, runtime)
print(response.body.to_map())
except Exception as error:
# 必要に応じてエラーメッセージを出力します。
UtilClient.assert_as_string(error.message)
print(error)
if __name__ == '__main__':
Sample.main()
ドキュメントのセマンティック検索
たとえば、オンラインストレージにさまざまなドキュメントを保存しているとします。オンラインストレージから IT サービスプロセスに関するドキュメントをセマンティック検索で取得するには、ドキュメントをインデックス化するデータセットを作成し、「IT サービスプロセス」などのキーワードを使用してドキュメントを取得します。
以下の例は、test-project プロジェクトの test-dataset データセット内で "IT service process" を含むファイルを、次のリクエストパラメーターを使用して検索する方法を示しています。
リクエスト例
{
"ProjectName": "test-project",
"DatasetName": "test-dataset",
"MediaTypes": ["document"],
"Query": "IT service process"
}
応答例
{
"RequestId": "CD870E69-D2E8-031B-BD3E-****",
"Files": [
{
"ObjectACL": "default",
"ContentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"ProjectName": "test-project",
"ObjectId": "2f66ba6e902e5ad42341a9e7365b19f6130d4a077e4f57150450e281d0b7afd9",
"Size": 28340,
"CreateTime": "2024-03-08T10:13:19.569053164+08:00",
"Filename": "3839a9a0-c630-420d-ae69-ea24792412fd.docx",
"URI": "oss://test-bucket/test-object.docx",
"ObjectType": "file",
"ContentMd5": "Y7SmYa831Hq1qryuRyl6mg==",
"OwnerId": "****",
"FileModifiedTime": "2024-01-10T16:18:31+08:00",
"ETag": "\"63B4A661AF37D47AB5AABCAE47297A9A\"",
"DatasetName": "test-dataset",
"FileHash": "63B4A661AF37D47AB5AABCAE47297A9A",
"UpdateTime": "2024-03-08T10:13:19.569053164+08:00",
"OSSStorageClass": "Standard",
"MediaType": "document",
"OSSCRC64": "6833019149643646551",
"OSSTaggingCount": 0,
"OSSObjectType": "Normal"
}
]
}
サンプルコード (IMM SDK for Python 1.27.3)
# -*- coding: utf-8 -*-
import os
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:
"""
AccessKey ID および AccessKey Secret を使用してクライアントを初期化します。
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
access_key_id=access_key_id,
access_key_secret=access_key_secret
)
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main() -> None:
# セキュリティを強化するため、API 呼び出しや日常的な運用管理 (O&M) には RAM ユーザーを使用することを推奨します。Alibaba Cloud アカウントの AccessKey ペアにはすべての API オペレーションに対する完全な権限が付与されます。
# セキュリティリスクを回避するため、コード内に AccessKey ID および AccessKey Secret をハードコードしないでください。環境変数から AccessKey ペアを取得することを推奨します。
# この例では、環境変数から AccessKey ペアを取得しています。環境変数の設定方法の詳細については、https://www.alibabacloud.com/help/document_detail/2361894.html をご参照ください。
imm_access_key_id = os.getenv("AccessKeyId")
imm_access_key_secret = os.getenv("AccessKeySecret")
client = Sample.create_client(imm_access_key_id, imm_access_key_secret)
semantic_query_request = imm_20200930_models.SemanticQueryRequest(
query='IT service process',
project_name='test-project',
dataset_name='test-dataset',
media_types=['document'],
max_results=100
)
runtime = util_models.RuntimeOptions()
try:
# API 応答を出力します。
response = client.semantic_query_with_options(semantic_query_request, runtime)
print(response.body.to_map())
except Exception as error:
# 例外が発生した場合、エラーメッセージを出力します。
UtilClient.assert_as_string(error.message)
print(error)
if __name__ == '__main__':
Sample.main()