IMM服务(智能媒体管理)通过Notify查询异步任务的执行结果

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介:

IMM服务(智能媒体管理)通过Notify查询异步任务的执行结果

在使用智能媒体管理的过程中,我们可能碰到一些大的文档的转换,当我们需要知道结果的时候,一直轮询 GetOfficeConversionTask接口去获取任务状态其实是浪费时间的。其实IMM服务提供任务结果异步反向通知的功能,今天我们就使用MNS服务去获取异步任务执行结果。

准备工作

  • 安装 MNS 和 IMM 的SDK
    pip install aliyun-python-sdk-core # 安装阿里云 SDK 核心库
    pip install aliyun-python-sdk-imm # 安装管理 IMM 的库
    pip install aliyun-mns  #阿里云的MNS服务的SDK
  • 访问阿里云官网,获取AccessKeyId、AccessKeySecret、AccountId。
  • 注意事项
    1. 需要先开通 MNS 服务,新建 topic,queue,并配置好订阅关系,详情请参考MNS服务
    2. MNS的region必须和和IMM保持一致。

快速开始

### 初始化客户端

  1. 代码示例

      IMM_REGION = 'cn-beijing'  #服务区域Region,根据需要修改
      ACCESS_KEY_ID = 'xxxxxxx'  #您的AccessKey
      ACCESS_KEY_SECRET = 'xxxxxxx' #您的AccessSecret 
      MNS_ENDPOINT = 'http://account.mns.cn-beijing.aliyuncs.com/' #Account是阿里云注册用户的帐号的ID
      MNS_TOPIC_NAME = 'xxxxx' #您mns服务配置的Topic
      MNS_QUEUE_NAME = 'xxxxx' #您mns服务配置的Queue
      
      mns_client = Account(MNS_ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET) #MNS客户端
      imm_client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, IMM_REGION) #IMM客户端   

创建Project

本示例目的是展示基本使用,详情参考IMM服务API手册Project操作

  1. 代码示例

    from aliyunsdkimm.request.v20170906 import PutProjectRequest
    project = "GetResult-ByNotify-Demo" #设置Project的名字
    project_type = "DocStarter"  #文档标准型
    project_cu  = 1
     
    createReq = PutProjectRequest.PutProjectRequest()
    createReq.set_Project(project) 
    createReq.set_Type(project_type)
    createReq.set_Type(project_cu)
    
    response = imm_client.do_action_with_exception(createReq)
    print response
  2. 输出结果

    {
    "CU": 1,
    "Type": "DocStarter",
    "CreateTime": "2018-11-15T02:40:35Z",
    "RequestId": "3FE3F20C-2076-41B2-8DBB-73E90CF19C8C",
    "ModifyTime": "2018-11-15T02:40:35Z",
    "Project": "GetResult-ByNotify-Demo",
    "BillingType": "ByUsage",
    "Endpoint": "imm.cn-beijing.aliyuncs.com",
    "ServiceRole": ""
    }

创建文档转化任务

本示例目的是展示基本使用,详情参考IMM服务API手册文档管理操作

  1. 代码示例

    project = "GetResult-ByNotify-Demo"  # 演示用project已创建,您需要自己创建
    async_srcUri = "oss://co-user-cn-beijing/zqh/input/WORD/5页Word.docx"  # 您文档资源的位置
    async_tgtUri = "oss://co-user-cn-beijing/zqh/output/PDF/"  # 您要输出的位置
    tgt_type = "png"  # 转化类型
    
    createReq= CreateOfficeConversionTaskRequest.CreateOfficeConversionTaskRequest()
    createReq.set_Project(project)
    createReq.set_SrcUri(async_srcUri)
    createReq.set_TgtUri(async_tgtUri)
    createReq.set_TgtType(tgt_type)
    createReq.set_NotifyEndpoint(MNS_ENDPOINT)
    createReq.set_NotifyTopicName(MNS_TOPIC_NAME)
    
    response = imm_client.do_action_with_exception(createReq)
    print response
  2. 输出结果

    {
      "Status": "Running",
      "CreateTime": "2018-11-15T02:42:31.024Z",
      "RequestId": "9A046CDE-B4BC-47A0-B235-7D904260190D",
      "Percent": 0,
      "TaskId": "7c711cb4-279c-4773-a46d-8e39d3595691",
      "TgtLoc": "oss://co-user-cn-beijing/zqh/output/PDF/"
    }
    

调用MNS服务获取异步任务的执行结果。

本示例目的是展示基本使用,详情参考MNS服务API参考

  1. 代码示例。

    queue = mns_client.get_queue(MNS_QUEUE_NAME)
    queue.set_encoding(False) #编码方式设置为False,不对消息体进行base64编码
  2. 消费Message,查询任务执行结果。

    msg = queue.receive_message()
    print msg.message_body
//输出结果
{
  "Message": {
    "events": [
      {
        "eventName": "FormatConvertJob:JobFinished",  //任务结果
        "eventSource": "acs:imm",
        "eventTime": "2018-11-14T09:51:20.342Z",      //完成时间
        "eventVersion": "1.0",
        "imm": {                                      //任务具体信息
          "code": "NoError",
          "pageCount": "5",
          "percent": "100",
          "taskId": "723f6489-2e91-4475-93a2-41bbedf76d1f"
        }
      }
    ]
  },
  "MessageId": "1AF8A292DE807634-1-16711A1E057-20000076E",
  "MessageMD5": "FF48C799CEF8997625D00B364D7471D1",
  "PublishTime": "1542189080663",
  "Subscriber": "xxxxxxx",
  "SubscriptionName": "xxxxxxxx",
  "TopicName": "xxxxxxxx",
  "TopicOwner": "xxxxxxxxx"
}
  1. 批量消费Message,查询任务执行结果。(需要创建多个文档转化任务,才能看到多条Message。)

    messages = queue.batch_receive_message(batch_size) #batch_size为本次请求最多获取的消息条数
    
    for  msg in messages:
        print msg.message_body
//输出结果
[
  {
    "Message": {
      "events ": [
        {
          "eventName ": "FormatConvertJob:JobFinished ",
          "eventSource ": "acs:imm ",
          "eventTime ": "2018-11-14T09:51:20.342Z ",
          "eventVersion ": "1.0 ",
          "imm ": {
            "code ": "NoError ",
            "pageCount ": "5 ",
            "percent ": "100 ",
            "taskId ": "723f6489-2e91-4475-93a2-41bbedf76d1f "
          }
        }
      ]
    },
    "MessageId": "1AF8A292DE807634-1-16711A1E057-20000076E",
    "MessageMD5": "FF48C799CEF8997625D00B364D7471D1",
    "PublishTime": "1542189080663",
    "Subscriber": "xxxxxxx",
      "SubscriptionName": "xxxxxxxx",
      "TopicName": "xxxxxxxx",
      "TopicOwner": "xxxxxxxxx"
  },
  {
    "Message": {
      "events ": [
        {
          "eventName ": "FormatConvertJob:JobFinished ",
          "eventSource ": "acs:imm ",
          "eventTime ": "2018-11-14T09:51:47.941Z ",
          "eventVersion ": "1.0 ",
          "imm ": {
            "code ": "NoError ",
            "pageCount ": "5 ",
            "percent ": "100 ",
            "taskId ": "c54b5836-5270-4beb-a5e5-ceb7627e5c98 "
          }
        }
      ]
    },
    "MessageId": "1AF8A292DE807634-1-16711A24C0A-200000770",
    "MessageMD5": "9D7EAD233258273ADC9C7FB496FE9316",
    "PublishTime": "1542189108234",
    "Subscriber": "xxxxxxx",
      "SubscriptionName": "xxxxxxxx",
      "TopicName": "xxxxxxxx",
     "TopicOwner": "xxxxxxxxx"
  },
  {
    "Message": {
      "events ": [
        {
          "eventName ": "FormatConvertJob:JobFinished ",
          "eventSource ": "acs:imm ",
          "eventTime ": "2018-11-14T09:52:09.584Z ",
          "eventVersion ": "1.0 ",
          "imm ": {
            "code ": "NoError ",
            "pageCount ": "5 ",
            "percent ": "100 ",
            "taskId ": "2aaeaeb0-7082-4330-8489-42dcd1b877c6 "
          }
        }
      ]
    },
    "MessageId": "1AF8A292DE807634-1-16711A2A023-200000771",
    "MessageMD5": "93B11711E9F2836CC4E65838DD6DD81D",
    "PublishTime": "1542189129763",
    "Subscriber": "xxxxxxx",
      "SubscriptionName": "xxxxxxxx",
      "TopicName": "xxxxxxxx",
      "TopicOwner": "xxxxxxxxx"
  }
]
}
目录
相关文章
|
存储 JSON 数据挖掘
利用智能媒体管理(IMM) 搭建云相册指南
- 为用户创建智能云相册 - 支持人脸检测,获取包括人脸位置、表情、年龄等信息 - 支持人脸分组,可以根据人物搜索、展示照片 - 支持照片标签检测,可以根据标签对照片进行分类 - 支持地理位置检测,获取照片拍摄的具体位置、时间,并且可以进行搜索
1093 0
|
存储 对象存储 计算机视觉
智能媒体管理(IMM)视频分析中明星识别介绍
智能媒体管理已经支持了视频分析功能,用户可以方便的使用该功能对存储在oss上的视频进行全面的分析。本文主要介绍利用智能媒体管理的视频分析功能来提取视频中的明星信息。 智能媒体管理的视频分析包含了明星识别功能,可以帮助用户抽取出视频中出现的明星信息。
2989 0
|
存储 计算机视觉 对象存储
智能媒体管理(IMM)视频分析在在线教育行业中的应用
智能媒体管理已经支持了视频分析功能,用户可以方便的使用该功能对存储在oss上的视频进行全面的分析。本文主要介绍利用智能媒体管理的视频分析功能来评估在线教育视频的质量。 智能媒体管理的视频分析包含了多种分析功能,针对在线教育行业,主要利用了人脸、内容理解以及语音转文字的功能。
1936 0
|
存储 定位技术 API
智能媒体管理(IMM) 多媒体文件元数据管理设计
## 简介 随着存储团队的产品愈加丰富,我们发现处理对文件、内容本身的高性能、稳定、安全存储之外,用户更多的对挖掘存储内容对价值提出了要求。对于多媒体文件(如图片、视频、音频、文档等),其包含的信息量是非常丰富的。如何将这些信息激活,有效的进行管理和检索,是 智能媒体管理(IMM) 尝试解决的问题。 ## 媒体集 Set 为此,IMM 设计了 媒体集 ( Set ) 的概念,表示
2364 0
|
搜索推荐 对象存储 Python
使用智能媒体管理(IMM)快速搭建人脸搜索服务
在服务构建中,我们经常需要对用户的图片做进一步分析。本文利用 智能媒体管理(IMM) 提供的图片索引功能,快速搭建一个人脸搜索的功能,示例使用 Python 2.7 实现。
2183 0
|
消息中间件 API Python
IMM 服务(智能媒体管理)通过 MNS 队列通知获取异步任务执行结果--Python示例
IMM服务(智能媒体管理)的 API 提供异步接口能力,处理大文件的文档转码、图像或者视频的 AI 处理,此时采用轮训的方式(比如文档转码的 GetOfficeConversionTask接口)效率不高,通过 MNS 队列通知获取异步任务执行结果是一种高效的方式,转载文章提供了 Python 示例,供大家参考。
1676 0
|
Web App开发 API
智能媒体管理(IMM)文档转换/预览提供 API 按量计费模式
智能媒体管理 (Intelligent Media Management, IMM) 是阿里云的云服务,它通过 文档标准型 实例提供了 Cloud Native 架构的文档转换/预览功能 ,本文介绍 API 按量计费模式的配置。
3267 0
|
开发工具 Python
【转载】智能媒体管理(IMM) Python SDK DEMO
本文针对智能媒体管理的文档转码、图片内容识别、人脸检测、二维码识别、人脸聚类等功能,提供了 Python 的 SDK 使用 DEMO,希望通过这些实例能够尽快帮助使用文档、图片的智能管理能力。
1627 0
|
JSON 开发工具 对象存储
智能媒体管理(IMM) Python SDK DEMO
SDK For Python 本文以Python为示例 安装 Python 环境 IMM Service 的Python SDK目前只支持 Python 2.6.x, 2.7.x。 请按以下步骤安装Python: 下载并安装最新的 Python 2 安装包。
2072 0
|
API PHP
[ 转载文章 ] 智能媒体管理(IMM)人脸分组PHP DEMO
智能媒体管理产品, PHP 语言人脸分组 DEMO
1305 0