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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: 在阿里云 Serverless 函数计算服务中部署普通图片转素描图的函数服务,实现批量上传到指定 OSS 桶内的图片自动转换为素描图并保存到另一个 OSS 桶内。

作者:除却巫山不是云啊


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


场景介绍


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


1.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中,这会导致函数被无限循环执行


2.png


操作步骤


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


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


3.png


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


4.png


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


5.png


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


6.png


授权角色。


7.png


8.png


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


9.png


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


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


10.png


参考代码如下:


# -*- coding: utf-8 -*-
import cv2
import json
import logging
import oss2
def 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/document_detail/74765.html 


[2] OSS 文件下载、上传 SDK:

https://help.aliyun.com/document_detail/88426.html 


[3] FC Python 环境内置模块:

https://help.aliyun.com/document_detail/158208.html


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


11.png


12.png


方案验证


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


13.png


14.png


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


15.png


16.png


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


17.png


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


18.png


本文选自“Serverless 函数计算征集令”征文




Serverless Developer Meetup


19.jpeg


2022 阿里云 Serverless Developer Meetup 杭州站火热报名中!


本次沙龙特别邀请到阿里云、高德地图的 Serverless 一线技术专家,分享当前 Serverless 架构 CICD 的最新探索研究;带来 Serverless 在高德业务体系中的降本增效实践;全视角解析 Serverless 原子化能力是如何提升研发效能,增强开发幸福感。更有 Serverless Workshop 等你来玩,手把手带你体验 1 分钟极速部署的乐趣,感受 Severless 算力之美。免费报名即可参加活动,我们准备了超多周边礼品,等你一起来 Serverless!


  • 时间:9月17日(周六)13:00
  • 地点:阿里巴巴西溪园区B区访客中心


点击此处,立即报名!

相关实践学习
【文生图】一键部署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后图片加载时间显著缩短,验证了加速效果。此方法大幅提高了操作效率,降低了学习成本。
5441 16
|
1月前
|
算法 Java Linux
java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
这篇文章主要介绍了如何将Java中的BufferedImage对象转换为InputStream以上传至OSS,并解决了png图片合成时透明部分变黑的问题。
60 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

相关产品

  • 函数计算