实施步骤
前提条件
- 创建依赖包。
- 登录FunctionGraph控制台,在依赖包管理页面点击“创建依赖包”。
- 填写相关参数,完成依赖包创建。
- 登录FunctionGraph控制台,在依赖包管理页面点击“创建依赖包”。
- 在“函数列表”页面单击“创建函数”完成函数创建。
其中委托需要创建能够授权工作流FunctionGraph访问OBS的权限,创建方式参考创建委托。
- 函数创建成功后进入函数详情页添加依赖包。
- 在“代码依赖包”模块点击“添加依赖包”。
- 选择私有依赖包,添加步骤1中创建好的依赖包
- 依赖添加成功后,在FunctionGraph控制台添加算子代码并保存部署。参考示例如下:
# -*- coding:utf-8 -*- import json # 引入模块 from obs import ObsClient import os import time import urllib.parse def handler(event, context): print(context) print(event) obsClient = ObsClient( access_key_id=context.getAccessKey(), secret_access_key=context.getSecretKey(), server='https://obs.cn-north-4.myhuaweicloud.com' #OBS的endpoint,不同region的OBS Endpoint不同 ) bucketName = event['Records'][0]['obs']['bucket']['name'] objectKey = urllib.parse.unquote(event['Records'][0]['obs']['object']['key']) # a/b/c frame = event["dynamic_source"]["f"] #截取的秒数 height = event["dynamic_source"]["h"] width = event["dynamic_source"]["w"] # 使用访问OBS start = time.time() resp = obsClient.getObject(bucketName, objectKey, "/tmp/" + objectKey) end = time.time() - start # print(resp) print("download test.jpg run :" + str(end - start)) start = time.time() cmd = "/opt/function/code/ffmpeg -i /tmp/" + objectKey + " -ss {f} -vframes 1 -vf scale={w}:{h} -y /tmp/{f}.jpg".format( f=frame, w=width, h=height) print(cmd) os.system(cmd) dsObjectKey = "{}.jpg".format(frame) start = time.time() out_obj = "output/{obj}/{file}".format(obj=objectKey, file=dsObjectKey) resp = obsClient.putFile(bucketName, out_obj, "/tmp/" + dsObjectKey) end = time.time() - start print(" upload run :" + str(end - start)) # 关闭obsClient obsClient.close() tasks = [ { "output": { "bucket": bucketName, "object": out_obj, "location": "cn-north-4" } } ] event["dynamic_source"] = { "tasks": tasks } return event
- 函数保存成功后,进入到数工坊DWR控制台工作流界面,点击“创建工作流”。
- 在工作流编排界面选择自定义算子并完成连线。其中基本属性部分的函数唯一标识选择步骤4创建好的自定义函数。
加入动态参数f(截图秒数frame),h(输出图片高度height),w(输出图片宽度width)。
- 点击保存工作流。可选择同步并支持匿名访问
- 保存成功后通过url方式触发工作流。其中可以指定参数f(截图秒数frame),h(输出图片高度)获得截帧结果。
https://test-workflow-bj4.obs.cn-north-4.myhuaweicloud.com/VCG42N1291956568.mp4?x-workflow-graph-name=vframe/f_0,h_100