Unity 百度AI實(shí)現(xiàn)人像動(dòng)漫化效果
接口介紹:
運(yùn)用對(duì)抗生成網(wǎng)絡(luò)技術(shù),結(jié)合人臉檢測(cè)、頭發(fā)分割、人像分割等技術(shù),為用戶量身定制千人千面的二次元?jiǎng)勇蜗螅⒅С滞ㄟ^參數(shù)設(shè)置,生成二次元?jiǎng)勇讼瘛?/p>
創(chuàng)建應(yīng)用:
在產(chǎn)品服務(wù)中搜索圖像增強(qiáng)與特效,創(chuàng)建應(yīng)用,獲取AppID、APIKey、SecretKey信息:


查閱官方文檔,以下是人像動(dòng)漫畫接口返回?cái)?shù)據(jù)參數(shù)詳情:

定義數(shù)據(jù)結(jié)構(gòu):
using System;
/// <summary>
/// 人像動(dòng)漫化接口響應(yīng)數(shù)據(jù)結(jié)構(gòu)
/// </summary>
[Serializable]
public class AnimeResponse
{
/// <summary>
/// 唯一的log id,用于問題定位
/// </summary>
public int log_id;
/// <summary>
/// 處理后圖片的Base64編碼
/// </summary>
public string image;
}
下載C# SDK:

下載完成后將AipSdk.dll動(dòng)態(tài)庫(kù)導(dǎo)入到Unity中:

以下是調(diào)用接口時(shí)傳入的參數(shù)詳情:

封裝調(diào)用函數(shù):
using System;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 人像動(dòng)漫化
/// </summary>
public class Anime
{
//以下信息于百度開發(fā)者中心控制臺(tái)創(chuàng)建應(yīng)用獲取
private const string appID = "";
private const string apiKey = "";
private const string secretKey = "";
/// <summary>
/// 發(fā)起人像動(dòng)漫畫請(qǐng)求
/// </summary>
/// <param name="bytes">圖片字節(jié)數(shù)據(jù)</param>
/// <param name="withMask">是否帶口罩</param>
/// <param name="maskID">口罩ID 取值范圍1-8</param>
/// <returns>返回的動(dòng)漫畫圖片字節(jié)數(shù)據(jù)</returns>
public static byte[] SendRequest(byte[] bytes, bool withMask = false, int maskID = 1)
{
var client = new Baidu.Aip.ImageProcess.ImageProcess(apiKey, secretKey);
try
{
var options = new Dictionary<string, object>
{
{ "type", withMask ? "anime_mask" : "anime" },
{ "mask_id", Mathf.Clamp(maskID, 1, 8) }
};
var response = client.SelfieAnime(bytes, options);
AnimeResponse animeResponse = JsonUtility.FromJson<AnimeResponse>(response.ToString());
byte[] buffer = Convert.FromBase64String(animeResponse.image);
return buffer;
}
catch(Exception error)
{
Debug.LogError(error);
}
return null;
}
/// <summary>
/// 發(fā)起人像動(dòng)漫畫請(qǐng)求
/// </summary>
/// <param name="url">圖片url地址</param>
/// <param name="withMask">是否帶口罩</param>
/// <param name="maskID">口罩ID 取值范圍1-8</param>
/// <returns>返回的動(dòng)漫畫圖片字節(jié)數(shù)據(jù)</returns>
public static byte[] SendRequest(string url, bool withMask = false, int maskID = 1)
{
var client = new Baidu.Aip.ImageProcess.ImageProcess(apiKey, secretKey);
try
{
var options = new Dictionary<string, object>
{
{ "type", withMask ? "anime_mask" : "anime" },
{ "mask_id", Mathf.Clamp(maskID, 1, 8) }
};
var response = client.SelfieAnimeUrl(url, options);
AnimeResponse animeResponse = JsonUtility.FromJson<AnimeResponse>(response.ToString());
byte[] buffer = Convert.FromBase64String(animeResponse.image);
return buffer;
}
catch (Exception error)
{
Debug.LogError(error);
}
return null;
}
}
測(cè)試圖片:

using System.IO;
using UnityEngine;
public class Example : MonoBehaviour
{
private void Start()
{
//讀取圖片字節(jié)數(shù)據(jù) 發(fā)起請(qǐng)求
var bytes = Anime.SendRequest(File.ReadAllBytes(Application.dataPath + "/Picture.jpg"));
//根據(jù)返回的字節(jié)數(shù)據(jù)生成圖片
File.WriteAllBytes(Application.dataPath + "/Test.png", bytes);
}
}
下面是生成的圖片:

到此這篇關(guān)于Unity 百度AI實(shí)現(xiàn)人像動(dòng)漫化效果的文章就介紹到這了,更多相關(guān)Unity 人像動(dòng)漫化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
winform創(chuàng)建不規(guī)則窗體的方法
這篇文章主要介紹了winform創(chuàng)建不規(guī)則窗體的方法,涉及C#窗體創(chuàng)建的相關(guān)參數(shù)設(shè)置技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09
C#靜態(tài)構(gòu)造函數(shù)用法實(shí)例分析
這篇文章主要介紹了C#靜態(tài)構(gòu)造函數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了C#靜態(tài)構(gòu)造函數(shù)的用途、實(shí)現(xiàn)方法及使用技巧,需要的朋友可以參考下2015-06-06
C#數(shù)據(jù)結(jié)構(gòu)與算法揭秘五 棧和隊(duì)列
這節(jié)我們討論了兩種好玩的數(shù)據(jù)結(jié)構(gòu),棧和隊(duì)列2012-11-11
C#使用FluentScheduler實(shí)現(xiàn)觸發(fā)定時(shí)任務(wù)
FluentScheduler是.Net平臺(tái)下的一個(gè)自動(dòng)任務(wù)調(diào)度組件,這篇文章主要為大家詳細(xì)介紹了C#如何使用FluentScheduler實(shí)現(xiàn)觸發(fā)定時(shí)任務(wù),感興趣的小伙伴可以了解下2023-12-12
C# FileStream實(shí)現(xiàn)大文件復(fù)制
這篇文章主要為大家詳細(xì)介紹了C# FileStream實(shí)現(xiàn)大文件復(fù)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05

