すべてのプロダクト
Search
ドキュメントセンター

Intelligent Media Management:セマンティック検索

最終更新日:Dec 27, 2024

Intelligent Media Management (IMM) は、セマンティックベクトル検索モデルを使用して、セマンティクスに基づいてメディアデータを検索します。このトピックでは、セマンティック検索の使用方法について説明します。

機能の説明

従来のスカラー検索方法は、ファイル名、作成時刻、形式などのメタデータ属性に依存して情報を検索します。スカラー検索とは異なり、セマンティック検索はベクトル検索方法を使用して、「森の鳥瞰図」、「雪の街」、「夏の草原」などのコンテンツの意味またはセマンティクスに基づいて情報を検索します。セマンティック検索機能を使用して、オブジェクトストレージサービス (OSS) および写真とドライブサービスに保存されているデータを検索できます。

シナリオ

作業ファイルの検索

セマンティック検索を使用すると、「ERPシステムの指示」、「デバイスの修理プロセス」、「2024年の事業運営分析」などのセマンティックコンテンツまたはキーワードに基づいて目的の作業ファイルを検索できるため、ファイル検索が容易になり、作業効率が向上します。

マルチメディア検索

セマンティック検索を使用すると、高速で効率的なメディアデータの検索および取得機能をマルチメディアネットワーキングアプリケーションに統合できます。たとえば、画像を多用するソーシャルネットワークアプリケーションにセマンティック検索を実装して、ユーザーが「去年の春の郊外の外出」、「旧正月の再会」、「私の海の体験」などのセマンティックコンテンツを使用して画像を検索できるようにすることができます。これにより、利便性と楽しさが向上します。

オンラインストレージ

多くのオンラインストレージサービスは、ファイル名、作成時刻、拡張子などの属性に基づいてスカラーベースのファイル検索を提供しています。セマンティック検索を使用すると、セマンティックコンテンツに基づいて、ドキュメントや画像など、特定の種類のデータを効率的に検索できます。

監視ビデオの検索

セマンティック検索を使用すると、「昨日の屋外の雪の監視ビデオ」や「晴れた日の果樹園」などのセマンティックキーワードに基づいて監視ビデオを検索および取得できます。

制限事項

重要
  • セマンティック検索は、画像とドキュメントのみをサポートしています。

  • セマンティック検索は、中国 (北京) リージョンでのみ使用できます。

  • セマンティック検索は、次の画像形式をサポートしています:JPG、PNG、BMP、GIF、WebP、TIFF、HEIC、AVIF。

  • この機能は、サイズが最大20 MBで、幅または高さが30,000ピクセルを超えず、ピクセル総数が2億5000万を超えない画像をサポートしています。GIF画像などの動画像のピクセル総数は、幅×高さ×フレーム数という式を使用して計算されます。PNG画像などの静止画像のピクセル総数は、幅×高さという式を使用して計算されます。

  • ドキュメントの文字数制限は300,000文字です。制限を超える文字は切り捨てられます。

  • データのインデックス作成と分析は非同期的に実行されます。IndexFileMetaなどのインデックス作成API操作を呼び出してインデックスを作成する場合は、コールバックを使用してデータ分析が完了したかどうかを確認する必要があります。データ分析には、データ型、サイズ、分析の複雑さに基づいて、数秒から数分までの完了時間が必要です。データ分析が完了すると、ストレージエンジンはインデックスを作成します。これには数秒かかります。インデックスが作成されると、セマンティック検索を使用してデータを検索できます。

前提条件

  • インデックスは、アプリケーションシナリオのメタデータに基づいて作成されます。詳細については、メタデータインデックスの作成を参照してください。

  • データセットは、画像のセマンティック検索にはOfficial:CognitionImageManagementワークフローテンプレートを、ドキュメントのセマンティック検索にはOfficial:DocumentManagementワークフローテンプレートを使用します。

重要

セマンティック検索が不要になった場合は、データセットを削除することをお勧めします。データセットはOSSからメタデータを自動的かつ継続的に抽出し、API呼び出し料金が発生します。

課金

  • IMM課金:セマンティック検索は、メタデータ管理に関連する料金が発生します。詳細については、課金対象項目を参照してください。

説明

セマンティック検索を使用するには、Official:CognitionImageManagementまたはOfficial:DocumentManagementワークフローテンプレートを選択する必要があります。画像のセマンティック検索にはOfficial:CognitionImageManagementワークフローテンプレートが必要であり、ドキュメントのセマンティック検索にはOfficial:DocumentManagementワークフローテンプレートが必要です。2つのワークフローテンプレートには多くのオペレーターが含まれています。セマンティック検索オペレーターは無料ですが、他のオペレーターは料金が発生します。詳細については、ワークフローテンプレートとオペレーターを参照してください。

  • OSS課金:詳細については、課金概要を参照してください。

使用方法

SemanticQuery操作を呼び出して、セマンティック検索を実行します。このトピックでは、test-datasetプロジェクトのtest-projectデータセットでセマンティック検索を実行する方法の例を示します。

画像のセマンティック検索

たとえば、フォトアルバムには多くの旅行写真が含まれており、その中には2020年7月に成都ジャイアントパンダ繁殖研究基地で撮影されたパンダの写真があります。セマンティック検索を使用してパンダの写真を検索するには、フォトアルバムの写真のメタデータを保存およびインデックス化するデータセットを作成します。その後、「2020年7月の成都のパンダ」などのフレーズを使用してパンダの写真を検索できます。

次の例では、test-projectプロジェクトのtest-datasetデータセットで、2020年7月に成都で撮影されたパンダの写真を検索します。

サンプルリクエスト

{
    "ProjectName": "test-project",
    "DatasetName": "test-dataset",
    "Query": "Pandas in Chengdu in July 2020" // 2020年7月の成都のパンダ
}

サンプルレスポンス

{
    "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シークレットを使用してクライアントを初期化します。
        @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シークレット)をプロジェクトコードに含めないことをお勧めします。そうしないと、AccessKeyペアがリークし、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
        # この例では、APIアクセスのためのID検証を実装するために、環境変数からAccessKeyペアを読み取ります。環境変数の設定方法については、https://help.aliyun.com/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', // 2020年7月の成都のパンダ
            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サービスプロセスに関するドキュメントを検索します

サンプルリクエスト

{
    "ProjectName": "test-project",
    "DatasetName": "test-dataset",
    "Query": "IT service process" // ITサービスプロセス
}

サンプルレスポンス

{
  "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シークレットを使用してクライアントを初期化します。
        @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シークレット)をプロジェクトコードに含めないことをお勧めします。そうしないと、AccessKeyペアがリークし、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
        # この例では、APIアクセスのためのID検証を実装するために、環境変数からAccessKeyペアを読み取ります。環境変数の設定方法については、https://help.aliyun.com/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', // ITサービスプロセス
            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()