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

本文涉及的产品
简介: 在阿里云Serverless函数计算服务中部署普通图片转素描图函数服务,实现将批量上传到指定OSS桶内的图片自动转换为素描图并保存到另一个OSS桶内

场景介绍

小明接到学校老师安排的任务,需要批量将班级里同学们拍的普通照片转换为素描图,供课堂游戏使用,于是求助到程序员老爸,机智的程序员老爸分分钟用几行Python代码解决:在阿里云Serverless函数计算服务中部署普通图片转素描图函数服务,实现将批量上传到指定OSS桶内的图片自动转换为素描图并保存到另一个OSS桶内。

image.png

目标读者

了解阿里云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


常见问题&建议

1.执行函数时报错,提示无权限访问oss bucket,被acl规则拦截,建议在设置OSS触发器时自动提示加权限

image.png

这是因为OSS服务bucket访问权限控制未授权FC角色,查看了官方文档,在RAM服务中授权角色权限后解决:

image.png

FC相关的角色都加上OSS访问权限:

image.png


2.这里的显示很奇怪,只有中间这个角色介绍是英文,建议修改下:

image.png


3.在查看函数日志和调用链信息时,自动刷新设置居然藏在时间设置里面,不太好找,建议放外面醒目位置:

image.png

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
1月前
|
监控 Serverless 测试技术
Serverless 应用引擎常见问题之生成的图片的oss地址配成自定义的域名如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
24 0
|
6月前
|
JavaScript 对象存储
在阿里云OpenAPI 为什么oss 图片链接, 在浏览器访问直接下载了,不是预览呢?
在阿里云OpenAPI 为什么oss 图片链接, 在浏览器访问直接下载了,不是预览呢?
437 1
|
9天前
|
消息中间件 存储 安全
对象存储OSS产品常见问题之使用中上传图片慢如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
26 0
|
7月前
|
存储 弹性计算 网络安全
搭建基于OSS的图片分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个图片分享网站。
332 0
|
25天前
|
存储 Cloud Native Serverless
云原生最佳实践系列 7:基于 OSS Object FC 实现非结构化文件实时处理
阿里云OSS对象存储方案利用函数计算FC,在不同终端请求时实时处理OSS中的原图,减少衍生图存储,降低成本。
|
6月前
|
Java 对象存储
【工具类】使用阿里oss实现图片、视频、文档上传
【工具类】使用阿里oss实现图片、视频、文档上传
228 0
|
2月前
|
域名解析 应用服务中间件 对象存储
解决阿里云oss图片浏览器访问直接下载而不是打开
解决阿里云oss图片浏览器访问直接下载而不是打开
370 0
|
3月前
|
JavaScript Java Serverless
函数计算中,这里是用的curl的方式,如何改用http的post方式请求?还有如何设置oss打包的zip的保存目录?
函数计算中,这里是用的curl的方式,如何改用http的post方式请求?还有如何设置oss打包的zip的保存目录?
159 0
|
4月前
|
Serverless 对象存储 数据安全/隐私保护
在阿里云函数计算(FC)中使用云对象存储服务(OSS)时,需要为FC实例授予对OSS资源的访问权限
在阿里云函数计算(FC)中使用云对象存储服务(OSS)时,需要为FC实例授予对OSS资源的访问权限
422 1
|
4月前
|
Serverless
函数计算FC图生图中,刚生成的图片,在Image Browse不能查看,是什么原因吖?
函数计算FC图生图中,刚生成的图片,在Image Browse不能查看,是什么原因吖?
30 1

热门文章

最新文章

相关产品

  • 函数计算