作者:除却巫山不是云啊

在阿里云 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 使用计算、存储资源,弹性地、可靠地运行任务,并提供日志查询、性能监控和报警等功能。

环境准备

前提条件

  1. 已开通阿里云函数计算 FC、OSS、SLS 服务

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

  3. 提前准备好测试图片

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

操作步骤

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

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

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

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

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

授权角色。


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

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

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

参考代码如下:

# -*- coding: utf-8 -*-
import cv2
import json
import logging
import oss2def sketch_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()def handler(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 imagewith 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

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


方案验证

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


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


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

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

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


Serverless Developer Meetup

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

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

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

点击此处,立即报名!

基于 Serverless+OSS 分分钟实现图片秒变素描相关推荐

  1. 不同分辨率图片匹配_杜克大学开源 AI 算法,让马赛克图片秒变高清!

    公众号关注 "GitHubDaily" 设为 "星标",每天带你逛 GitHub! 大家好,我是小 G.在这个追求高清画质的时代,我们对渣画质的容忍度越来越低. ...

  2. 杜克大学开源 AI 算法,让马赛克图片秒变高清!

    公众号关注 "GitHubDaily" 设为 "星标",每天带你逛 GitHub! 大家好,我是小 G. 在这个追求高清画质的时代,我们对渣画质的容忍度越来越低 ...

  3. android 动态显示多张图片,美图秀秀上线“魔法照片”功能:静态图片秒变动态大片!...

    一键生成大片,教你制作化静为动的"魔法照片" "魔法照片"的灵感来源于哈利波特的魔法世界,在神奇的魔法加持下,一张静态报纸中的人物竟然动了起来,现在这种神奇的效 ...

  4. html放多张gif动态背景图片,美图秀秀上线“魔法照片”功能:静态图片秒变动态大片...

    [TechWeb]6月5日,美图秀秀最新推出基于AI技术的隐藏功能-"魔法照片",包括头发流动.鲜花环绕.花瓣变身.滤色叠加.空间位移.火焰星云等10多种魔法效果,用户可以将静态照 ...

  5. GitHub 开源神器:图片秒变文件

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 明明下载的是一张图片,只需修改后缀名,图片就变成了一首歌,一串代码. 国外黑客David Buchanan利用Twitter的漏洞,可以用 ...

  6. 怎么让图片手机上排列_PS手机卷轴样机,分分钟让图片变得高大上!

    分享一款手机PS卷轴样机,分分钟让图片变得高大上! 先看效果图 ↓ 以上图片使用PS手机卷轴样机生成,操作也比较简单. Photoshop打开手机卷轴样机.PSD模板,双击可修改的智能图层,拖入自己需 ...

  7. PPT图片别再直接插入,这样处理一下,让你的PPT秒变高逼格

    我们平时在做PPT的时候,相信很多人在添加图片时,都是直接插入进来的. 这样做虽然简单快捷,但没有一点技术含量,那么如何才能让PPT变得高大上呢? 今天就来教你简单处理一下,让你的PPT秒变高逼格. ...

  8. java ppt 绘图,PPT图片别再直接插入,这样处理一下,让你的PPT秒变高逼格

    我们平时在做PPT的时候,相信很多人在添加图片时,都是直接插入进来的. 这样做虽然简单快捷,但没有一点技术含量,那么如何才能让PPT变得高大上呢? 今天就来教你简单处理一下,让你的PPT秒变高逼格. ...

  9. DL之GAN:HighNewTech基于计算机视觉领域GAN技术—最新黑科技之秒变宝宝——回到最初的样子

    DL之GAN:High&NewTech基于计算机视觉领域GAN技术-最新黑科技之秒变宝宝--回到最初的样子 导读      8月14日,快手APP上线名为"变小孩"的魔法表 ...

最新文章

  1. 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)
  2. c#将对象序列化为字符串和将字符串反序列化为对象
  3. seaborn分类数据可视:散点图|箱型图|小提琴图|lv图|柱状图|折线图
  4. 关系数据库——sql基础1定义
  5. Python编程从入门到实践~异常
  6. 日本字全角字符linux,Linux命令行输入全角字符被转化
  7. JavaScript学习(六十)—JSON
  8. 【初赛】NOIP2018程序模板
  9. 用户增长 - BG/NBD概率模型预测用户生命周期LTV(二)
  10. OpenAI Gym 是一个优秀开发和比较强化学习算法的工具
  11. 极化码 串并行译码的辨别(SC BP SCAN)硬判决和软输出
  12. 【Python CLI】第三章 控制台输出
  13. 关于计算机体系结构-北桥和南桥
  14. 【航线运输驾驶员理论考试】飞行性能、计划和装载
  15. 第五十八章 SQL函数 FLOOR
  16. 目前大数据分析的发展状况是怎样
  17. TCP 滑动窗口协议 详解
  18. 虚拟现实技术——Cocos Creator 动画系统动作笔记
  19. 使用74LS164和74LS165实现简单I/O扩展
  20. 计算机意外重启或错误,Win7系统安装提示计算机意外重启或遇到错误解决方案...

热门文章

  1. EtherCAT主站开发“利器”——EC-Master软件协议栈
  2. SAP ABAP SD 销售和分销相关数据库表结构关系
  3. 北航操作系统课程-20200227课堂小测-操作系统引论
  4. mac连接mysql出现 Access denied for user ‘Lampard‘@‘localhost‘ (using password: NO)
  5. 【报告分享】2021新国货CoolTop100品牌榜(附下载)
  6. 计算机毕业设计springboot家教平台中心系统53754源码+系统+程序+lw文档+部署
  7. 作为Java程序员,对日java开发培训
  8. 二叉树中找两个结点的最近公共祖先结点
  9. 8个数,分成四组,每两个为一组,有多少种分法?
  10. Java+spring 基于ssm的网络作业提交与批改系统#毕业设计