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

CodeRoverPro
• 阅读 750

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

场景介绍

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

操作步骤

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

  1. 选择函数及服务点击“创建服务”,填写名称和描述:
    基于 Serverless+OSS 分分钟实现图片秒变素描
  2. 进入函数管理,点击“创建函数”:
    基于 Serverless+OSS 分分钟实现图片秒变素描
    运行环境选择Python 3.6,代码上传方式选择使用示例代码,请求处理程序类型选择处理事件请求
    基于 Serverless+OSS 分分钟实现图片秒变素描
    触发器选择OSS,Bucket选择提前创建好的sketch-image-input,文件后缀为.jpg,防止其他类型的文件上传后误触发函数执行
    基于 Serverless+OSS 分分钟实现图片秒变素描
    授权角色
    基于 Serverless+OSS 分分钟实现图片秒变素描
    基于 Serverless+OSS 分分钟实现图片秒变素描
  3. 测试默认提供的Python函数,熟悉下基本功能:
    基于 Serverless+OSS 分分钟实现图片秒变素描

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

  1. 在编辑器中,输入提前写好的Python代码:
    基于 Serverless+OSS 分分钟实现图片秒变素描
    参考代码如下:

    # -*- 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等常用模块,很好的支撑普通开发者快速实现功能,点赞👍🏻:
    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日志服务,便于调试代码时查看日志,真的很方便😄:
    基于 Serverless+OSS 分分钟实现图片秒变素描
    基于 Serverless+OSS 分分钟实现图片秒变素描

    方案验证

    1.上传本地测试图片到OSS sketch-image-input桶中:
    基于 Serverless+OSS 分分钟实现图片秒变素描
    基于 Serverless+OSS 分分钟实现图片秒变素描
    2.观察函数sketch_image调用日志信息及监控信息:
    基于 Serverless+OSS 分分钟实现图片秒变素描
    基于 Serverless+OSS 分分钟实现图片秒变素描
    3.查看OSS sketch-image-output桶内转换后的素描图,效果还不错😄:
    基于 Serverless+OSS 分分钟实现图片秒变素描
    4.批量上传图片测试,函数功能很稳定👍🏻:
    基于 Serverless+OSS 分分钟实现图片秒变素描

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

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
3年前
5分钟Serverless实践:构建无服务器的图片分类系统
前 言在过去“5分钟Serverless实践”系列文章中,我们介绍了如何构建无服务器API和Web应用,从本质上来说,它们都属于基于APIG触发器对外提供一个无服务器API的场景。现在本文将介绍一种新的设计模式:基于事件的实时数据处理。为了更形象地描述,我们以图片分类为例,先介绍通过APIG触发器如何构建一个图片分类的Web应
Stella981 Stella981
3年前
Python3 用PIL处理图像(二)——将图片装换成素描
今儿一朋友发了一张我的照片,经过了处理,转换成素描照了,随后又发了一段代码给我,这个其实说新奇也不是太新奇,但是也挺有意思的,那我们就来分析一下这段代码,看看是如何将一张图片转换成素描图的;我们先来看一下发给我的代码是怎么样的:fromPILimportImage,ImageFilter,ImageOpsimg
Wesley13 Wesley13
3年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ
Wesley13 Wesley13
3年前
HTML5印章绘制电子签章图片,中文英文椭圆章、中文英文椭圆印章
电子签章图片采集印章图片的采集两种互补方式:方式1:在线生成印章图片方式,但是这种方式有个弊端,对印章中公司名称字数有限制,字数越多可能就完蛋了。方式2:上传印章扫描件,系统来对扫描图片进行处理,提取扫描件中的印章图片。本文介绍方式1,方式2待后续发布,方式1本来想用java实现印章图片生成,虽
Wesley13 Wesley13
3年前
Go语言匿名函数困惑
转自https://blog.csdn.net/tbc123tbc/article/details/78948576 这里主要是描述我在学习过程中遇到的困惑。起初把函数单独写出来,想用普通函数那种写好后再去main方法中调用,老是报错。如下图: !这里写图片描述(https://oscimg.oschina.net/oscnet/39078f0
京东云开发者 京东云开发者
7个月前
记录一次「OSS上传文件的前置处理机制」实例剖析
作者:京东物流陈雨引言在云计算环境中,对象存储服务(OSS)是一种提供存储和访问任意类型数据(如网站内容、企业备份数据、游戏、IoT设备数据等)的服务,支持从任何地点、任何时间访问数据。在很多应用场景中,用户需要上传文件到OSS,这可能包括图片、视频、文档
GeorgeGcs GeorgeGcs
1个月前
【HarmonyOS 5】ArrayBuffer转Base64,Base64转ArrayBuffer,Uri转ArrayBuff,PixelMap转ArrayBuffer,图片Uri转为PixelMap
【HarmonyOS5】ArrayBuffer转Base64,Base64转ArrayBuffer,Uri转ArrayBuff,PixelMap转ArrayBuffer,图片Uri转为PixelMap\鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类
什么是虚拟展馆3D全景,它有什么优势?华锐互动
首先需要用全景拍摄的模式拍出真实的展馆全景图;其次,要高清展示的馆内产品的图片,开发介绍视频语音功能,不同方位的热点展示这些内容;再者需要开发全景漫游功能,让参观者可以随时随地在虚拟场景中自由浏览;最后就是部署到服务器上。1、运用3d全景虚拟技实现将现实产品还原到线上,实现360度旋转展示,用户可以在手机、ipad、电脑等设备进行无死角浏览。2、变静态为动态
燕青 燕青
1年前
GIF制作工具:GIFfun for Mac中文激活版
是一款可以在几秒钟内完成转GIF动画转换的GIF编辑器软件。在Mac上,GIFfun可以帮助用户从日常生活中的照片和视频中直接取材来创建动画GIF,并且可以将多张照片转换为GIF,还可以将多张照片转换为视频。同时,它也支持批量处理,可以进行GIF转视频、视
流浪剑客 流浪剑客
1年前
GIF制作工具:GIFfun
是一款可以在几秒钟内完成转GIF动画转换的GIF编辑器软件,它可以帮助用户从日常生活中的照片和视频中直接取材来创建动画GIF。在功能方面,GIFfunMac版可以将多张照片转换为GIF,还可以将多张照片转换为视频,并且支持批量处理。此外,它也提供了GIF转