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

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 在阿里云 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区访客中心


点击此处,立即报名!

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
2月前
|
编解码 数据处理 API
如何用阿里云OSS对图片和视频进行数据处理?
本文介绍了如何利用阿里云对象存储OSS进行图片和视频处理。OSS提供了丰富的功能,如图片的缩放、裁剪、旋转和水印添加等,用户只需在图片URL后附加处理参数即可实现自动化处理。同时,OSS还支持自定义样式模板,便于批量操作。对于视频处理,OSS支持转码、截图、拼接等功能,满足多终端播放需求。通过OSS的API和SDK,开发者可以方便地集成这些功能,提升数据管理效率。
|
4月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
218 0
|
2月前
|
存储 编解码 API
如何利用阿里云OSS进行图片和视频处理?
本文介绍了如何利用阿里云对象存储OSS进行图片和视频处理。内容包括OSS的基本功能、上传与管理媒体资源、图片处理(缩放、裁剪、旋转、水印等)、视频处理(转码、截图、拼接等)以及相关API的使用方法。通过OSS,用户可高效实现多媒体资源的存储与处理,适用于各类企业和开发者。
|
12月前
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1676 5
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
8月前
|
SQL 分布式计算 Serverless
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
172 0
|
12月前
|
存储 人工智能 缓存
AI助理直击要害,从繁复中提炼精华——使用CDN加速访问OSS存储的图片
本案例介绍如何利用AI助理快速实现OSS存储的图片接入CDN,以加速图片访问。通过AI助理提炼关键操作步骤,避免在复杂文档中寻找解决方案。主要步骤包括开通CDN、添加加速域名、配置CNAME等。实测显示,接入CDN后图片加载时间显著缩短,验证了加速效果。此方法大幅提高了操作效率,降低了学习成本。
5817 16
|
12月前
|
算法 Java Linux
java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
这篇文章主要介绍了如何将Java中的BufferedImage对象转换为InputStream以上传至OSS,并解决了png图片合成时透明部分变黑的问题。
539 1
|
存储 运维 Serverless
函数计算产品使用问题之OSS触发器是否可以只设置文件前缀
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
存储 JavaScript 前端开发
Vue中实现图片上传,上传后的图片回显,存储图片到服务器 【使用对象存储OSS】
这篇文章介绍了在Vue中实现图片上传到阿里云OSS对象存储服务的完整流程,包括服务端签名直传的前提知识、后端设置、前端组件封装以及图片上传和回显的效果展示。
|
存储 前端开发 Serverless
Serverless 魔法之旅:如何用 Funcraft、OSS 和 ROS 打造超级CI/CD流水线!
【8月更文挑战第8天】在现代软件开发中,CI/CD对于提升效率与代码质量至关重要。本文介绍如何运用阿里云的Serverless服务——Funcraft、OSS及ROS构建完整的CI/CD流程。首先配置Funcraft实现代码自动化构建与部署;接着利用OSS管理静态文件,确保网站内容正确加载;最后借助ROS自动化资源创建与管理,实现代码自动部署。通过整合这些服务,不仅加速了开发进程,还保证了代码质量和部署一致性,充分发挥Serverless架构的优势。
265 5

相关产品

  • 函数计算