阿里雲API調試工具OpenAPI Explore提供OpenAPI文檔、API調試和SDK樣本,協助您快速入門API開發。本文介紹如何安裝和使用Intelligent Media ManagementPython SDK。
前提條件
已建立並擷取AccessKey。具體操作,請參見建立AccessKey。
已開通OSS服務、建立儲存空間並上傳檔案到儲存空間。具體操作,請參見控制台上傳檔案。
已開通Intelligent Media Management服務。具體操作,請參見開通產品。
已通過Intelligent Media Management控制台建立專案。具體操作,請參見建立專案。
說明您也可以調用API介面建立專案。具體操作,請參見CreateProject - 建立專案。
您可以調用ListProjects - 列出所有專案資訊的列表介面列出指定地區下已建立的所有專案資訊。
安裝SDK
調用2020-09-30版本的API,需要使用2020-09-30版本的SDK。
使用Intelligent Media ManagementPython SDK的操作步驟請參見快速入門。
訪問憑證
您可以選擇以下類型的訪問憑證。
臨時訪問憑證:對於需要高安全性的情境,例如臨時授權應用訪問IMM,建議使用臨時訪問憑證。臨時訪問憑證可以限制訪問的有效期間,從而減少訪問憑證泄露的風險。此外,臨時訪問憑證支援許可權控制,可以有效地避免許可權過大的問題。
長期訪問憑證:出於安全性考慮,不建議您使用長期訪問憑證,建議您使用臨時訪問憑證。對於需要便利性的情境,長期訪問憑證可以在較長時間內免除多次重新整理的麻煩。建議每三個月更換一次長期訪問憑證,以提高帳號的安全性。當長期訪問憑證泄露或者不再使用時,應該及時刪除或者禁用相關的訪問憑證,以免造成安全風險。
使用臨時訪問憑證
當您準備臨時使用Python SDK訪問IMM服務時,可以參考配置臨時訪問憑證
如下以在華東1(杭州)地區中檢測圖片中的人臉及人臉資訊為例,介紹如何使用臨時訪問憑證通過Intelligent Media ManagementPython SDK調用對應API。
建立demo.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: """ 使用AK&SK初始化帳號Client @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'] ) # sts Endpoint,需要和imm保持相同地區 sts_config.endpoint = "sts-share.cn-hangzhou.aliyuncs.com" sts_client = Sts20150401Client(sts_config) # 調用sts AssumeRole assume_role_request = sts_20150401_models.AssumeRoleRequest( # sts token有效時間,單位為秒 duration_seconds=3600, # 角色會話名稱 role_session_name="immtest", # role 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 token建立imm client imm_config = open_api_models.Config( access_key_id=credential["AccessKeyId"], access_key_secret=credential["AccessKeySecret"], security_token=credential["SecurityToken"]) # imm Endpoint 請參考 https://api.aliyun.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: # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。 # 錯誤 message print(error.message) # 診斷地址 print(error.data.get("Recommend")) UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:])執行
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 SDK訪問IMM服務時,可以參考配置長期訪問憑證。
如下以使用1.27.3版本的Python SDK在華東2(北京)地區中建立文檔轉換任務為例,介紹如何使用Python SDK。
建立demo.py檔案並寫入如下內容。
# -*- 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() -> imm20200930Client: """ 使用AK&SK初始化帳號Client @return: Client @throws Exception """ # 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。 # 建議使用更安全的 STS 方式,更多鑒權訪問方式請參見:https://www.alibabacloud.com/help/document_detail/378659.html。 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'] ) # 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: 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: # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。 # 錯誤 message print(error.message) # 診斷地址 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: # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。 # 錯誤 message print(error.message) # 診斷地址 print(error.data.get("Recommend")) UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:])執行
python demo.py命令,控制台輸出結果如下。// 文檔轉換API傳回值。 { "TaskId": "OfficeConversion-65ab9c57-4598-4eb4-bf73-****", "RequestId": "A637DBBA-3E98-00F5-B0F2-****", "EventId": "011-1LNuW4Ws2lRfjGsZl4a****" } // MNS訊息,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": "" }