基于|基于 Serverless+OSS 分分钟实现图片秒变素描
作者:除却巫山不是云啊
在阿里云 Serverless 函数计算服务中部署普通图片转素描图的函数服务,实现批量上传到指定 OSS 桶内的图片自动转换为素描图并保存到另一个 OSS 桶内。场景介绍 小明接到学校老师安排的任务,需要批量将班级里同学们拍的普通照片转换为素描图,供课堂游戏使用,于是求助到程序员老爸,机智的程序员老爸分分钟用几行 Python 代码解决:在阿里云 Serverless 函数计算服务中部署普通图片转素描图函数服务,实现将批量上传到指定 OSS 桶内的图片自动转换为素描图并保存到另一个 OSS 桶内。
文章图片
本文适合了解阿里云 Serverless、OSS、函数计算 FC 产品,有一定的云计算实践经验及 Python 编程经验的读者,熟悉阿里云鉴权系统及图片处理 OpenCV 库的个人开发者。
相关概念 Serverless:全称 Serverless computing,即无服务器计算,是云计算的一种新模式,区别于传统的 IaaS、PaaS、SaaS。无服务器运算不代表它真的不需要服务,而是指普通开发者不用过多考虑服务器、App 运行环境及各种周边依赖问题,计算资源真正成为一种服务而不是服务器或者容器。它允许开发者在以管理某个具体功能函数的粒度进行部署及运维管理,以便让开发者专注于核心业务逻辑,更快速地开发应用。
Function Compute:前面讲的 Serverless 是一种抽象层次更高说法,“FaaS + BaaS”是 Serverless 架构模式的一种实现,阿里云 Function Compute 就是典型的 FaaS,配合阿里云丰富的 BaaS(SLS、OSS、RDS 等)服务,可以非常快速的部署应用。
函数计算 FC 是一种基于事件驱动的全托管计算服务,用户无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算 FC 使用计算、存储资源,弹性地、可靠地运行任务,并提供日志查询、性能监控和报警等功能。
环境准备 前提条件
- 已开通阿里云函数计算 FC、OSS、SLS 服务
- 提前准备好普通图片转换为素描图的 Python 代码
- 提前准备好测试图片
- 提前创建好两个测试用的 OSS 桶(不能将转换后的图片上传到同一个OSS bucket中,这会导致函数被无限循环执行)
文章图片
操作步骤
步骤一:创建阿里云函数计算 FC 服务
- 选择函数及服务点击“创建服务”,填写名称和描述:
文章图片
- 进入函数管理,点击“创建函数”:
文章图片
运行环境选择 Python 3.6,代码上传方式选择使用示例代码,请求处理程序类型选择处理事件请求:
文章图片
触发器选择 OSS,Bucket 选择提前创建好的“sketch-image-input”,文件后缀为 .jpg,防止其他类型的文件上传后误触发函数执行。
文章图片
授权角色。
文章图片
文章图片
- 测试默认提供的 Python 函数,熟悉下基本功能:
文章图片
步骤二:编写 Python 脚本,实现普通图片转换为素描图函数
- 在编辑器中,输入提前写好的 Python 代码:
文章图片
参考代码如下:
# -*- coding: utf-8 -*-
import cv2
import json
import logging
import oss2def sketch_image(source_image, target_image):
# read image
image = cv2.imread(source_image)# sketch image
grey_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
invert_image = cv2.bitwise_not(grey_image)
gaussian_blur_image = cv2.GaussianBlur(invert_image, (7, 7), 0)
inverse_image = cv2.bitwise_not(gaussian_blur_image)
sketch_image_result = cv2.divide(grey_image, inverse_image, scale=256.0)# save image
cv2.imwrite(target_image, sketch_image_result)
cv2.waitKey(0)
cv2.destroyAllWindows()def handler(event, context):
logger = logging.getLogger()
evt = json.loads(event)
creds = context.credentials
# Required by OSS sdk
auth=oss2.StsAuth(
creds.access_key_id,
creds.access_key_secret,
creds.security_token)
evt = evt['events'][0]
bucket_name = evt['oss']['bucket']['name']
endpoint = 'oss-' +evt['region'] + '.aliyuncs.com'
bucket_input = oss2.Bucket(auth, endpoint, bucket_name)
bucket_output = oss2.Bucket(auth, endpoint, 'sketch-image-ouput')
logger.info('oss endpoint: %s' % endpoint)objectName = evt['oss']['object']['key']
logger.info('oss objectName: %s' % objectName)newKey = 'sketch_' + objectName# Download image
source_image = '/tmp/%s' % objectName
bucket_input.get_object_to_file(objectName, source_image)
logger.info('download image %s success.' % source_image)# Sketch image
target_image = '/tmp/%s' % newKey
sketch_image(source_image, target_image)# Upload image
with open(target_image, 'rb') as fileobj:
bucket_output.put_object(newKey, fileobj)
logger.info('upload image %s success.' % newKey)
函数编写过程中,参考了阿里云提供的 SDK 案例,内容非常丰富,想要的功能都有,且阿里云函数计算 FC 提供的 Python 运行环境内置 OSS、OpenCV 等常用模块,很好的支撑普通开发者快速实现功能,点赞:
[1] 阿里云 FC 使用 OSS 触发器 SDK:
https://help.aliyun.com/docum...
[2] OSS 文件下载、上传 SDK:
https://help.aliyun.com/docum...
[3] FC Python 环境内置模块:
https://help.aliyun.com/docum...
- 部署代码并开通 SLS 日志服务,便于调试代码时查看日志,真的很方便:
文章图片
文章图片
方案验证
- 上传本地测试图片到 OSSsketch-image-input 桶中:
文章图片
文章图片
- 观察函数 sketch_image 调用日志信息及监控信息:
文章图片
文章图片
- 查看 OSSsketch-image-output 桶内转换后的素描图,效果还不错:
文章图片
- 批量上传图片测试,函数功能很稳定:
文章图片
本文选自“Serverless 函数计算征集令”征文Serverless Developer Meetup
文章图片
2022 阿里云 Serverless Developer Meetup 杭州站火热报名中!
本次沙龙特别邀请到阿里云、高德地图的 Serverless 一线技术专家,分享当前 Serverless 架构 CICD 的最新探索研究;带来 Serverless 在高德业务体系中的降本增效实践;全视角解析 Serverless 原子化能力是如何提升研发效能,增强开发幸福感。更有 Serverless Workshop 等你来玩,手把手带你体验 1 分钟极速部署的乐趣,感受 Severless 算力之美。免费报名即可参加活动,我们准备了超多周边礼品,等你一起来 Serverless!
- 时间:9月17日(周六)13:00
- 地点:阿里巴巴西溪园区B区访客中心
推荐阅读
- 分身术训练营感受-Day1
- 汽车产业股价日报|中芯国际今日领涨 | 8月31日汽车产业链企业上市公司(部分)股价日报
- 投稿|马斯克和推特“分手”,“不爱”的代价是什么?
- 基于RabbitMQ的RPC
- 钛极客|1+1>2的双筒体验,米家分区洗烘?体机15kg评测 | 钛极客
- 赢家专刊学习日周三分享
- 收市评论|8月31日A股分析:沪指跌0.78%,高位赛道股大跌
- 如何成为一名开发人员——第|如何成为一名开发人员——第 1 部分(编码技巧)
- matlab|matlab sar adc建模,Simulink环境下的SAR ADC行为建模与仿真分析
- 优化求解|【优化求解】基于病毒免疫算法(CHIO)求解最优目标matlab源码