天天看點

3步就能制作漫畫頭像的機器人,想擁有一個嗎?

摘要:3步就能制作漫畫頭像的機器人,想擁有一個嗎?

作者:胡琦

隻需要發送關鍵字,就能出發聊天機器人頭像漫畫化處理程式,生成動漫圖檔。怎麼實作呢?總的思路就是基于 ModelArts AI Gallery 快速驗證 AnimateGanv2 現實照片動漫化能力,基于 Flask 快速部署動漫化服務,基于 Wechaty 快速開發動漫化聊天機器人。

為什麼是 AnimeGAN?

動漫(Animation & Comic)作為日常生活中一種常見的藝術表現形式,在兒童教育、影視、廣告等領域中應用十分廣泛;但動漫創作困難、周期長、開發難度大,對創作者要求也十分苛刻,一般來說好的動漫作品需要創作者掌握線條、紋理、顔色和陰影等繪畫技巧;普通人想要快速創造自己的動漫作品不得不借助工具。近年來,随着元宇宙的不斷發展,人們對動漫的需求越來越多,比如生成二次元自畫像、制作 NFT 藝術品等等,是以動漫風格遷移似乎成為“煉丹師”們喜愛的研究方向之一。

圖像風格遷移還得從 pix2pix 和 CycleGAN 說起,這兩個基于 GAN 的風格遷移算法為動漫畫圖檔生成奠定了技術基礎,後續的 CartoonGAN 通過語義内容損失函數和邊緣增強的對抗性損失函數使生成的動漫圖檔品質更高。而 AnimeGAN基于 CartoonGAN 改進,并提出了一個更加輕量級的生成器架構以及灰階風格損失、灰階對抗損失和顔色重建損失三個新的損失函數,使其風格化的視覺效果能超越 CartoonGAN。

畢竟,AnimeGAN 讓新海誠本人都感覺很有趣;而對于我們普通人來說,多了一種創作的可能,隻需一張現實照片就能通過 AI 輸出大師級的動漫作品!

3步就能制作漫畫頭像的機器人,想擁有一個嗎?

什麼是 AnimeGAN ?

3步就能制作漫畫頭像的機器人,想擁有一個嗎?

提到 AnimeGAN ,不得不說說它的發展曆程,一作Asher Chan從 2019 年送出第一個 Git Commit 至今,已經疊代了三個版本,AnimeGANv3放出了可執行程式和剛出爐還熱乎的肖像素描(點我快速體驗:​​Run in ModelArts

- AnimeGANv3 肖像素描生成​​)。

3步就能制作漫畫頭像的機器人,想擁有一個嗎?

AnimeGAN 實作了将現實世界場景的照片轉換為動漫風格圖像。 AnimeGANv1 提出了三種損失函數:灰階樣式損失、顔色重建損失和灰階對抗損失。

解決了:

1.生成的圖像沒有明顯的動畫風格紋理

2.生成的圖像丢失了原始圖像的内容;

3.網絡的參數需要大的存儲容量。

AnimeGANv2 修複了上個版本中存在的問題,例如模型生成的圖像中存在高頻僞影;更容易訓練且直接能到達論文效果;進一步減少網絡參數使生成器更小;盡可能多地使用更高畫質的風格資料。作者覺得創新性不大是以就沒重新發表論文。

AnimeGANv3 基于與 Google 的商業許可,作者暫時不提供源碼。不過目前提供了圖形使用者界面程式 (AnimeGANv3.exe) 和預訓練模型 (onnx.zip) ,目前我們可以直接在 Windows 上體驗圖檔或視訊轉動漫風格。截止筆者發文,作者由更新了 AnimeGANv3_PortraitSketch 用于生成肖像畫,也就是上圖的效果。

筆者有幸體驗了 AnimeGAN 帶來的樂趣,下圖中左邊是在華為雲 ModelArts 上運作的結果,通過識别人臉關鍵點之後再進行風格遷移能獲得動漫化頭像;右邊是 AnimeGANv3.exe 在本地運作的結果,我們無需關系環境和代碼執行,簡單操作就能生成動漫 圖檔;中間是本次分享的主角–一個能将圖檔動漫化的聊天機器人。

3步就能制作漫畫頭像的機器人,想擁有一個嗎?

在 AI Gallery 上提前驗證

我們通常認為“資料、算法、算力”是人工智能的三要素,現如今,處在大資料時代,可靠高品質的資料的獲得變得簡潔;優質的算法随着開源文化的發展也變得普及;然而算力确成了制約人工智能普及的“攔路虎”,就連 AnimeGAN 的作者也感歎“論文的延遲發表隻因隻借到了一年的 2080ti”。對于筆者而言,幸虧有普惠 AI 的華為雲 ModelArts,AI Gallery 是在 ModelArts 的基礎上建構的開發者生态社群,提供了 Notebook 代碼樣例、資料集、算法、模型、Workflow 等 AI 數字資産的共享,姑且了解為 AI 屆的 Github。

3步就能制作漫畫頭像的機器人,想擁有一個嗎?
  • 資料方面,AI Gallery 的資料子產品支援資料集的共享和下載下傳;而且資料集是支援 License 聲明的,這一點類似于開源社群;
  • 算法方面,AI Gallery 的算法子產品支援算法的共享和訂閱;并且算法支援變現,類似于一個算法商城;
  • 算力方面,使用者在 AI Gallery 中通過點選“Run in ModelArts”可以将 Notebook 案例在 ModelArts 控制台快速打開、運作以及進行二次開發等操作,目前提供有限的免費算力。
3步就能制作漫畫頭像的機器人,想擁有一個嗎?

通過學習改造 AI Gallery 已有的 AnimeGAN 案例,我們能夠快速運作 NoteBook 并得到動漫化頭像。

3步就能制作漫畫頭像的機器人,想擁有一個嗎?

基于 Wechaty 快速建構機器人

提到聊天機器人的開發,作為前端工程師,筆者認為最快捷的方式莫過于import {Wechaty} from "wechaty";,是的,Wechaty 是一個開源的的對話機器人 SDK,支援 個人号 微信。它是一個使用 Typescript 建構的 Node.js 應用。支援多種微信接入方案,包括網頁,ipad,ios,windows, android 等。同時支援 Linux, Windows, Darwin(OSX/Mac) 和 Docker 多個平台。是以我們要實作聊天機器人就十分簡單了!(PS:除了 token 有點小貴,當然有能力有創意可以加入官方資助計劃)。

3步就能制作漫畫頭像的機器人,想擁有一個嗎?

聊天機器人有了,接下來怎麼接入 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​​​​​​

大緻的效果如下圖:

3步就能制作漫畫頭像的機器人,想擁有一個嗎?

了解更多内容,歡迎來直播間和作者交流

直播時間:7月27日 20:00-21:00

直播老師:胡琦,華為雲年度十佳部落客

直播主題:三步開發聊天機器人,一秒生成漫畫頭像

直播介紹:

1、基于 ModelArts 快速驗證AnimateGanv2 現實照片動漫化能力

2、基于 Flask 快速部署動漫化服務

3、基于 Wechaty 快速開發漫畫頭像的聊天機器人

繼續閱讀