作者:胡琦
只须要发送关键字,就能出发谈天机器人头像漫画化处理程序,天生动漫图片。怎么实现呢?总的思路便是基于 ModelArts AI Gallery 快速验证 AnimateGanv2 现实照片动漫化能力,基于 Flask 快速支配动漫化做事,基于 Wechaty 快速开拓动漫化谈天机器人。
为什么是 AnimeGAN?动漫(Animation & Comic)作为日常生活中一种常见的艺术表现形式,在儿童教诲、影视、广告等领域中运用十分广泛;但动漫创作困难、周期长、开拓难度大,对创作者哀求也十分苛刻,一样平常来说好的动漫作品须要创作者节制线条、纹理、颜色和阴影等绘画技巧;普通人想要快速创造自己的动漫作品不得不借助工具。近年来,随着元宇宙的不断发展,人们对动漫的需求越来越多,比如天生二次元自画像、制作 NFT 艺术品等等,因此动漫风格迁移彷佛成为“炼丹师”们喜好的研究方向之一。
图像风格迁移还得从 pix2pix 和 CycleGAN 提及,这两个基于 GAN 的风格迁移算法为动漫画图片天生奠定了技能根本,后续的 CartoonGAN 通过语义内容丢失函数和边缘增强的对抗性丢失函数使天生的动漫图片质量更高。而 AnimeGAN基于 CartoonGAN 改进,并提出了一个更加轻量级的天生器架构以及灰度风格丢失、灰度对抗丢失和颜色重修丢失三个新的丢失函数,使其风格化的视觉效果能超越 CartoonGAN。
毕竟,AnimeGAN 让新海诚本人都觉得很有趣;而对付我们普通人来说,多了一种创作的可能,只需一张现实照片就能通过 AI 输出大师级的动漫作品!
什么是 AnimeGAN ?
提到 AnimeGAN ,不得不说说它的发展进程,一作Asher Chan从 2019 年提交第一个 Git Commit 至今,已经迭代了三个版本,AnimeGANv3放出了可实行程序和刚出炉还热乎的肖像素描(点我快速体验:Run in ModelArts - AnimeGANv3 肖像素描天生)。
AnimeGAN 实现了将现实天下场景的照片转换为动漫风格图像。 AnimeGANv1 提出了三种丢失函数:灰度样式丢失、颜色重修丢失和灰度对抗丢失。
办理了:
1.天生的图像没有明显的动画风格纹理
2.天生的图像丢失了原始图像的内容;
3.网络的参数须要大的存储容量。
AnimeGANv2 修复了上个版本中存在的问题,例如模型天生的图像中存在高频伪影;更随意马虎演习且直接能到达论文效果;进一步减少网络参数使天生器更小;尽可能多地利用更高画质的风格数据。作者以为创新性不大因此就没重新揭橥论文。
AnimeGANv3 基于与 Google 的商业容许,作者暂时不供应源码。不过目前供应了图形用户界面程序 (AnimeGANv3.exe) 和预演习模型 (onnx.zip) ,目前我们可以直接在 Windows 上体验图片或视频迁徙改变漫风格。截止笔者发文,作者由更新了 AnimeGANv3_PortraitSketch 用于天生肖像画,也便是上图的效果。
笔者有幸体验了 AnimeGAN 带来的乐趣,下图中左边是在华为云 ModelArts 上运行的结果,通过识别人脸关键点之后再进行风格迁移能得到动漫化头像;右边是 AnimeGANv3.exe 在本地运行的结果,我们无需关系环境和代码实行,大略操作就能天生动漫 图片;中间是本次分享的主角–一个能将图片动漫化的谈天机器人。
在 AI Gallery 上提前验证
我们常日认为“数据、算法、算力”是人工智能的三要素,现如今,处在大数据时期,可靠高质量的数据的得到变得简洁;优质的算法随着开源文化的发展也变得遍及;然而算力确成了制约人工智能遍及的“拦路虎”,就连 AnimeGAN 的作者也感叹“论文的延迟揭橥只因只借到了一年的 2080ti”。对付笔者而言,幸亏有普惠 AI 的华为云 ModelArts,AI Gallery 是在 ModelArts 的根本上构建的开拓者生态社区,供应了 Notebook 代码样例、数据集、算法、模型、Workflow 等 AI 数字资产的共享,姑且理解为 AI 届的 Github。
数据方面,AI Gallery 的数据模块支持数据集的共享和下载;而且数据集是支持 License 声明的,这一点类似于开源社区;算法方面,AI Gallery 的算法模块支持算法的共享和订阅;并且算法支持变现,类似于一个算法商城;算力方面,用户在 AI Gallery 中通过点击“Run in ModelArts”可以将 Notebook 案例在 ModelArts 掌握台快速打开、运行以及进行二次开拓等操作,目前供应有限的免费算力。
通过学习改造 AI Gallery 已有的 AnimeGAN 案例,我们能够快速运行 NoteBook 并得到动漫化头像。
基于 Wechaty 快速构建机器人
提到谈天机器人的开拓,作为前端工程师,笔者认为最快捷的办法莫过于import {Wechaty} from "wechaty";,是的,Wechaty 是一个开源的的对话机器人 SDK,支持 个人号 微信。它是一个利用 Typescript 构建的 Node.js 运用。支持多种微信接入方案,包括网页,ipad,ios,windows, android 等。同时支持 Linux, Windows, Darwin(OSX/Mac) 和 Docker 多个平台。因此我们要实现谈天机器人就十分大略了!
(PS:除了 token 有点小贵,当然有能力有创意可以加入官方帮助操持)。
谈天机器人有了,接下来怎么接入 AnimeGAN 的能力呢?为了给机器人供应做事,我们须要支配一个运用给前端供应接口,暂且利用 Flask 快速支配头像动漫化做事。
from flask import # import requestimport osimport uuidimport numpy as npfrom animeGANv2 import app = Flask(__name__,template_folder='view')app.config['MAX_CONTENT_LENGTH'] = 0.5 1024 1024 # 3MB# 转换图片文件@app.route('/postdata', methods=['POST'])def postdata(): print(request) f = request.files['content'] print(f) user_input = request.form.get("name") basepath = os.path.dirname(__file__) # 当前文件所在路径 src_imgname = str(uuid.uuid1()) + ".jpg" upload_path = os.path.join(basepath, 'static/srcImg/') if os.path.exists(upload_path)==False: os.makedirs(upload_path) f.save(upload_path + src_imgname) # img = cv2.imread(upload_path + src_imgname, 1) save_path = os.path.join(basepath, 'static/resImg/') if os.path.exists(save_path) == False: os.makedirs(save_path) fileSize = os.path.getsize(upload_path+src_imgname) if(fileSize / 1024 / 1024 > 1): resSets = dict() resSets["value"] = 10 resSets["resurl"] = "http://127.0.0.1:5000" +'/static/resImg/' + src_imgname else: inference_from_file(upload_path+src_imgname,os.path.join(save_path, src_imgname)) resSets = dict() resSets["value"] = 10 resSets["resurl"] = "http://127.0.0.1:5000" +'/static/resImg/' + src_imgname return json.dumps(resSets, ensure_ascii=False)# 转换图片链接@app.route('/postdataUrl', methods=['POST'])def postdataUrl(): url = request.values['content'] print(url) user_input = request.form.get("name") basepath = os.path.dirname(__file__) # 当前文件所在路径 src_imgname = str(uuid.uuid1()) + ".jpg" save_path = os.path.join(basepath, 'static/resImg/') if os.path.exists(save_path) == False: os.makedirs(save_path) inference_from_url(url,os.path.join(save_path, src_imgname)) resSets = dict() resSets["value"] = 10 resSets["resurl"] = "http://127.0.0.1:5000" +'/static/resImg/' + src_imgname return json.dumps(resSets, ensure_ascii=False)if __name__ == '__main__': app.run(threaded=True)
完全代码详见:https://github.com/hu-qi/MDG-AnimeGANv2
大致的效果如下图:
点击下方,第一韶光理解华为云新鲜技能~
华为云博客_大数据博客_AI博客_云打算博客_开拓者中央-华为云