• 3步就能制作漫画头像的机器人,想拥有一个吗?


    摘要:3步就能制作漫画头像的机器人,想拥有一个吗?

    作者:胡琦

    只需要发送关键字,就能出发聊天机器人头像漫画化处理程序,生成动漫图片。怎么实现呢?总的思路就是基于 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 request
    import os
    import uuid
    import numpy as np
    from 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

    大致的效果如下图:

    了解更多内容,欢迎来直播间和作者交流

    直播时间:7月27日 20:00-21:00

    直播老师:胡琦,华为云年度十佳博主

    直播主题:三步开发聊天机器人,一秒生成漫画头像

    直播介绍:

    1、基于 ModelArts 快速验证AnimateGanv2 现实照片动漫化能力

    2、基于 Flask 快速部署动漫化服务

    3、基于 Wechaty 快速开发漫画头像的聊天机器人

    直播链接:https://bbs.huaweicloud.com/signup/aaf6f0369810487eb21cb162bc8ac154

     

    点击关注,第一时间了解华为云新鲜技术~

  • 相关阅读:
    12.27 cf div3 解题报告
    网络流24题 P2754 [CTSC1999]家园
    P3690 【模板】Link Cut Tree (动态树)
    P2147 [SDOI2008]洞穴勘测
    P3203 [HNOI2010]弹飞绵羊
    P4172 [WC2006]水管局长
    P3979 遥远的国度
    P3128 [USACO15DEC]最大流Max Flow
    P3178 [HAOI2015]树上操作
    [SDOI2014]旅行
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/16505813.html
Copyright © 2020-2023  润新知