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

Intelligent Media Management:IMM SDK for Python

最終更新日:Dec 27, 2024

Alibaba Cloud OpenAPI エクスプローラー は、API ドキュメント、API デバッグ、および SDK の例を提供し、API 開発を始めるのに役立ちます。このトピックでは、Python 用 Intelligent Media Management (IMM) SDK をインストールして使用する方法について説明します。

前提条件

  • AccessKey ペアが作成され、取得されています。詳細については、AccessKey ペアの作成 を参照してください。

  • OSS がアクティブ化され、バケットが作成され、オブジェクトがバケットにアップロードされています。詳細については、オブジェクトのアップロード を参照してください。

  • IMM がアクティブ化されています。詳細については、IMM のアクティブ化 を参照してください。

  • IMM コンソールでプロジェクトが作成されています。IMM コンソールを使用してプロジェクトを作成する方法の詳細については、プロジェクトの作成 を参照してください。

    説明
    • CreateProject オペレーションを呼び出してプロジェクトを作成することもできます。詳細については、CreateProject を参照してください。

    • ListProjects オペレーションを呼び出して、特定のリージョンにある既存のプロジェクトをクエリできます。詳細については、ListProjects を参照してください。

SDK のインストール

重要

IMM API V2020-09-30 を使用するには、IMM SDK V2020-09-30 を使用する必要があります。

Python 用 IMM SDK の使用方法の詳細については、クイックスタート を参照してください。

資格情報

以下の種類のアクセス資格情報がサポートされています。

  • 一時的なアクセス資格情報: IMM へのアクセスの一時的な承認など、セキュリティが高いことが重要なシナリオでは、一時的なアクセス資格情報を使用することをお勧めします。一時的なアクセス資格情報は、指定された期間内に有効であるため、資格情報の漏洩を防ぐのに役立ちます。一時的なアクセス資格情報は、きめ細かいアクセス制御をサポートしており、過剰な権限によるセキュリティリスクを防ぎます。

  • 長期アクセス資格情報: データセキュリティを確保するために、長期アクセス資格情報を使用しないことをお勧めします。利便性が不可欠なシナリオでは、長期アクセス資格情報を使用することで、長期間にわたる複数回の更新が不要になります。アカウントのセキュリティを確保するために、3か月ごとに長期アクセス資格情報を変更することをお勧めします。長期アクセス資格情報が漏洩した場合、または使用されなくなった場合は、セキュリティリスクを軽減するために、できるだけ早く長期アクセス資格情報を削除または無効にする必要があります。

一時的なアクセス資格情報を使用する

Python 用 IMM SDK を使用して、IMM への一時的なアクセスのための一時的なアクセス資格情報を設定できます。詳細については、環境変数を設定して一時的なアクセス資格情報を保存する を参照してください。

次のサンプルコードは、一時的なアクセス資格情報を使用して、中国 (杭州) リージョンのプロジェクト内の画像で顔と顔の属性を検出する方法の例を示しています。

  1. demon.py ファイルを作成し、次の内容をファイルに書き込みます。

    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
    from alibabacloud_sts20150401.client import Client as Sts20150401Client
    from alibabacloud_sts20150401 import models as sts_20150401_models
    
    
    class Sample:
        def __init__(self):
            pass
    
        @staticmethod
        def create_client() -> imm20200930Client:
            """
            AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
            @return: Client
            @throws Exception
            """
            sts_config = open_api_models.Config(
                # 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認します。
                access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                # 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認します。
                access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
            )
            # IMM プロジェクトが存在するリージョンの Security Token Service (STS) エンドポイントを指定します。
            sts_config.endpoint = "sts-share.cn-hangzhou.aliyuncs.com"
            sts_client = Sts20150401Client(sts_config)
            # AssumeRole オペレーションを呼び出します。
            assume_role_request = sts_20150401_models.AssumeRoleRequest(
                # STS トークンの有効期間を指定します。単位: 秒。
                duration_seconds=3600,
                # ロールセッションの名前を指定します。
                role_session_name="immtest",
                # ロール arn
                role_arn="acs:ram::xxxxxxx:role/imm-test-role-for-amp"
            )
            runtime = util_models.RuntimeOptions()
            response = sts_client.assume_role_with_options(assume_role_request, runtime)
            credential = response.to_map().get("body", dict()).get("Credentials", dict())
            # STS トークンを使用して IMM クライアントを作成します。
            imm_config = open_api_models.Config(
                access_key_id=credential["AccessKeyId"],
                access_key_secret=credential["AccessKeySecret"],
                security_token=credential["SecurityToken"])
            # IMM エンドポイントを指定します。サポートされているリージョンの IMM エンドポイントの一覧については、https://api.alibabacloud.com/product/imm を参照してください。
            imm_config.endpoint = f'imm.cn-hangzhou.aliyuncs.com'
            return imm20200930Client(imm_config)
    
        @staticmethod
        def main(
            args: List[str],
        ) -> None:
            client = Sample.create_client()
            detect_image_faces_request = imm_20200930_models.DetectImageFacesRequest(
                source_uri='oss://your-bucket-name/your-path/test.jpg',
                project_name='immtest'
            )
            runtime = util_models.RuntimeOptions()
            try:
                # 必要に応じて、API オペレーションのレスポンスを出力します。
                response = client.detect_image_faces_with_options(
                    detect_image_faces_request, runtime)
                print(response.body.to_map())
            except Exception as error:
                # 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。
                # エラーメッセージを表示します。
                print(error.message)
                # トラブルシューティング用の URL を表示します。
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
    
    if __name__ == '__main__':
        Sample.main(sys.argv[1:])
  2. python demo.py コマンドを実行します。次のようなレスポンスが返されます。

    {
       "Faces": [
          {
             "Age": 25,
             "AgeSD": 7,
             "Attractive": 0.998,
             "Beard": "none",
             "BeardConfidence": 1,
             "Boundary": {
                "Height": 127,
                "Left": 81,
                "Top": 62,
                "Width": 96
             },
             "Emotion": "happiness",
             "EmotionConfidence": 0.999,
             "FaceQuality": 0.998,
             "FigureClusterId": "figure-cluster-id-unavailable",
             "FigureConfidence": 0.999,
             "FigureId": "30f18b25-db81-4dc6-8461-fd63ab0ef16d",
             "FigureType": "face",
             "Gender": "female",
             "GenderConfidence": 1,
             "Glasses": "none",
             "GlassesConfidence": 1,
             "Hat": "none",
             "HatConfidence": 1,
             "HeadPose": {
                "Pitch": -16.989,
                "Roll": 6.006,
                "Yaw": 7.47
             },
             "Mask": "none",
             "MaskConfidence": 0.83,
             "Mouth": "open",
             "MouthConfidence": 0.998,
             "Sharpness": 1
          }
       ],
       "RequestId": "28084591-0A06-0981-9AD5-B0FBD0967FD7"
    }            

長期アクセス資格情報を使用する

長期アクセス資格情報に基づいて Python 用 IMM SDK を使用して IMM にアクセスするには、最初に長期アクセス資格情報を設定する必要があります。詳細については、長期アクセス資格情報を設定する を参照してください。

次のサンプルコードは、Python 用 IMM SDK V1.27.3 を使用して、中国 (北京) リージョンでドキュメント変換タスクを作成する方法の例を示しています。

  1. demon.py ファイルを作成し、次の内容をファイルに書き込みます。

    # -*- coding: utf-8 -*-
    # このファイルは自動生成されています。編集しないでください。ありがとうございます。
    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() -> imm20200930Client:
            """
            AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
            @return: Client
            @throws Exception
            """
            # プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。以下の行は参照用にのみ提供されています。
            # セキュリティ上の理由から、STS によって提供される一時的なアクセス資格情報を使用することをお勧めします。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-php-access-credentials を参照してください。
            config = open_api_models.Config(
                # 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認します。
                access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                # 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認します。
                access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
            )
            # IMM エンドポイントを指定します。エンドポイントの詳細については、https://api.aliyun.com/product/imm を参照してください。
            config.endpoint = f'imm.cn-beijing.aliyuncs.com'
            return imm20200930Client(config)
    
        @staticmethod
        def main(
            args: List[str],
        ) -> None:
            client = Sample.create_client()
            notification_mns = imm_20200930_models.MNS(
                topic_name='mns_topic_name'
            )
            notification = imm_20200930_models.Notification(
                mns=notification_mns,
                extended_message_uri='oss://your-bucket-name/test-object.json'
            )
            create_office_conversion_task_request = imm_20200930_models.CreateOfficeConversionTaskRequest(
                project_name='immtest',
                source_uri='oss://your-bucket-name/your-path/your-doc.doc',
                target_uri='oss://your-bucket-name/output',
                target_uriprefix='oss://your-bucket-name/output',
                target_type='png',
                notification=notification
            )
            runtime = util_models.RuntimeOptions()
            try:
                # 必要に応じて、API オペレーションのレスポンスを出力します。
                client.create_office_conversion_task_with_options(create_office_conversion_task_request, runtime)
            except Exception as error:
                # 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。
                # エラーメッセージを表示します。
                print(error.message)
                # トラブルシューティング用の URL を表示します。
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
        @staticmethod
        async def main_async(
            args: List[str],
        ) -> None:
            client = Sample.create_client()
            notification_mns = imm_20200930_models.MNS(
                topic_name='mns_topic_name'
            )
            notification = imm_20200930_models.Notification(
                mns=notification_mns,
                extended_message_uri='oss://your-bucket-name/test-object.json'
            )
            create_office_conversion_task_request = imm_20200930_models.CreateOfficeConversionTaskRequest(
                project_name='immtest',
                source_uri='oss://your-bucket-name/your-path/your-doc.doc',
                target_uri='oss://your-bucket-name/output',
                target_uriprefix='oss://your-bucket-name/your-path/your-doc-output',
                target_type='png',
                notification=notification
            )
            runtime = util_models.RuntimeOptions()
            try:
                # 必要に応じて、API オペレーションのレスポンスを出力します。
                await client.create_office_conversion_task_with_options_async(create_office_conversion_task_request, runtime)
            except Exception as error:
                # 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージが出力されます。
                # エラーメッセージを表示します。
                print(error.message)
                # トラブルシューティング用の URL を表示します。
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
    
    if __name__ == '__main__':
        Sample.main(sys.argv[1:])
  2. python demo.py コマンドを実行します。次のようなレスポンスが返されます。

    // ドキュメント変換操作のレスポンス。
    {
        "TaskId": "OfficeConversion-65ab9c57-4598-4eb4-bf73-****",
        "RequestId": "A637DBBA-3E98-00F5-B0F2-****",
        "EventId": "011-1LNuW4Ws2lRfjGsZl4a****"
    }
    
    // SMQ メッセージ。Status フィールドの値が Succeeded の場合、ドキュメント変換タスクは成功です。
    {
        "ProjectName": "immtest",
        "DatasetName": "",
        "RequestId": "A637DBBA-3E98-00F5-B0F2-****",
        "StartTime": "2022-07-19T10:41:44.649Z",
        "EndTime": "2022-07-19T10:41:45.26Z",
        "UserData": "",
        "TaskType": "OfficeConversion",
        "TaskId": "OfficeConversion-65ab9c57-4598-4eb4-bf73-****",
        "Status": "Succeeded",
        "Code": "",
        "Message": ""
    }