基于 Serverless+OSS 分分钟实现图片秒变素描

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: 看程序员老爸如何机智带娃~

markus-spiske-IFCloi6PYOA-unsplash.jpg

场景介绍

小明接到学校老师安排的任务,需要批量将班级里同学们拍的普通照片转换为素描图,供课堂游戏使用,于是求助到程序员老爸,机智的程序员老爸分分钟用几行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使用计算、存储资源,弹性地、可靠地运行任务,并提供日志查询、性能监控和报警等功能。


前提条件/环境准备

1.已开通阿里云FC、OSS、SLS服务

2.提前准备好普通图片转换为素描图的Python代码

3.提前准备好测试图片

4.提前创建好两个测试用的OSS桶(不能将转换后的图片上传到同一个OSS bucket中,这会导致函数被无限循环执行

image.png


操作步骤

步骤一:创建函数计算FC服务

1. 选择函数及服务点击“创建服务”,填写名称和描述

image.png

2. 进入函数管理,点击“创建函数”

image.png

运行环境选择Python 3.6,代码上传方式选择使用示例代码,请求处理程序类型选择处理事件请求

image.png

触发器选择OSS,Bucket选择提前创建好的sketch-image-input,文件后缀为.jpg,防止其他类型的文件上传后误触发函数执行

image.png

授权角色

image.png

image.png


3. 测试默认提供的Python函数,熟悉下基本功能

image.png


步骤二:编写Python脚本,实现普通图片转换为素描图函数

1. 在编辑器中,输入提前写好的Python代码:

image.png

参考代码如下:

# -*- coding: utf-8 -*-importcv2importjsonimportloggingimportoss2defsketch_image(source_image, target_image):
# read imageimage=cv2.imread(source_image)
# sketch imagegrey_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 imagecv2.imwrite(target_image, sketch_image_result)
cv2.waitKey(0)
cv2.destroyAllWindows()
defhandler(event, context):
logger=logging.getLogger()
evt=json.loads(event)
creds=context.credentials# Required by OSS sdkauth=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 imagesource_image='/tmp/%s'%objectNamebucket_input.get_object_to_file(objectName, source_image) 
logger.info('download image %s success.'%source_image)
# Sketch imagetarget_image='/tmp/%s'%newKeysketch_image(source_image, target_image)
# Upload imagewithopen(target_image, 'rb') asfileobj:
bucket_output.put_object(newKey, fileobj)  
logger.info('upload image %s success.'%newKey)

函数编写过程中,参考了阿里云提供的SDK案例,内容非常丰富,想要的功能都有,且FC提供的Python运行环境内置oss、OpenCV等常用模块,很好的支撑普通开发者快速实现功能,点赞👍🏻:

FC使用OSS触发器SDK:https://help.aliyun.com/document_detail/74765.html

OSS文件下载、上传SDK:https://help.aliyun.com/document_detail/88426.html

FC Python环境内置模块:https://help.aliyun.com/document_detail/158208.html


2. 部署代码并开通SLS日志服务,便于调试代码时查看日志,真的很方便😄:

image.png

image.png

方案验证

1.上传本地测试图片到OSS sketch-image-input桶中

image.png

image.png

2.观察函数sketch_image调用日志信息及监控信息

image.png

image.png

3.查看OSS sketch-image-output桶内转换后的素描图,效果还不错😄

image.png

4.批量上传图片测试,函数功能很稳定👍🏻:

image.png


本文转载自Serverless函数计算征集令优秀征文,

原作者:除却巫山不是云啊

原文地址:https://developer.aliyun.com/article/984500


更多精彩内容请关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
1月前
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1432 4
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
1月前
|
存储 人工智能 缓存
AI助理直击要害,从繁复中提炼精华——使用CDN加速访问OSS存储的图片
本案例介绍如何利用AI助理快速实现OSS存储的图片接入CDN,以加速图片访问。通过AI助理提炼关键操作步骤,避免在复杂文档中寻找解决方案。主要步骤包括开通CDN、添加加速域名、配置CNAME等。实测显示,接入CDN后图片加载时间显著缩短,验证了加速效果。此方法大幅提高了操作效率,降低了学习成本。
5442 16
|
1月前
|
算法 Java Linux
java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
这篇文章主要介绍了如何将Java中的BufferedImage对象转换为InputStream以上传至OSS,并解决了png图片合成时透明部分变黑的问题。
61 1
|
3月前
|
存储 JavaScript 前端开发
Vue中实现图片上传,上传后的图片回显,存储图片到服务器 【使用对象存储OSS】
这篇文章介绍了在Vue中实现图片上传到阿里云OSS对象存储服务的完整流程,包括服务端签名直传的前提知识、后端设置、前端组件封装以及图片上传和回显的效果展示。
|
3月前
|
存储 前端开发 Serverless
Serverless 魔法之旅:如何用 Funcraft、OSS 和 ROS 打造超级CI/CD流水线!
【8月更文挑战第8天】在现代软件开发中,CI/CD对于提升效率与代码质量至关重要。本文介绍如何运用阿里云的Serverless服务——Funcraft、OSS及ROS构建完整的CI/CD流程。首先配置Funcraft实现代码自动化构建与部署;接着利用OSS管理静态文件,确保网站内容正确加载;最后借助ROS自动化资源创建与管理,实现代码自动部署。通过整合这些服务,不仅加速了开发进程,还保证了代码质量和部署一致性,充分发挥Serverless架构的优势。
61 5
|
4月前
|
监控 Java Serverless
函数计算产品使用问题之对于OSS打包的zip的保存目录,该如何操作
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3月前
|
存储 运维 Serverless
函数计算产品使用问题之OSS触发器是否可以只设置文件前缀
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
Java Serverless 数据库连接
函数计算操作报错合集之调用打包的OSS函数时发生报错,该怎么办
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
存储 监控 Serverless
函数计算产品使用问题之怎么批量下载Stable Diffusion(SD)图片
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
函数计算产品使用问题之怎么批量下载Stable Diffusion(SD)图片
|
3月前
|
NoSQL Serverless API
Serverless 架构实现弹幕场景问题之API Gateway和OSS域名未绑定成功的问题如何解决
Serverless 架构实现弹幕场景问题之API Gateway和OSS域名未绑定成功的问题如何解决
37 0

热门文章

最新文章

相关产品

  • 函数计算