欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Unity 百度AI实现人像动漫化效果

程序员文章站 2022-04-04 18:16:54
接口介绍:运用对抗生成网络技术,结合人脸检测、头发分割、人像分割等技术,为用户量身定制千人千面的二次元动漫形象,并支持通过参数设置,生成二次元动漫人像。创建应用: 在产品服务中搜索图像增强与特效,创...

接口介绍:

运用对抗生成网络技术,结合人脸检测、头发分割、人像分割等技术,为用户量身定制千人千面的二次元动漫形象,并支持通过参数设置,生成二次元动漫人像。

创建应用:     

在产品服务中搜索图像增强与特效,创建应用,获取appid、apikey、secretkey信息:

Unity 百度AI实现人像动漫化效果

Unity 百度AI实现人像动漫化效果

查阅官方文档,以下是人像动漫画接口返回数据参数详情:

Unity 百度AI实现人像动漫化效果

定义数据结构:

using system;
 
/// <summary>
/// 人像动漫化接口响应数据结构
/// </summary>
[serializable]
public class animeresponse
{
    /// <summary>
    /// 唯一的log id,用于问题定位
    /// </summary>
    public int log_id;
    /// <summary>
    /// 处理后图片的base64编码
    /// </summary>
    public string image;
}

下载c# sdk:

Unity 百度AI实现人像动漫化效果

下载完成后将aipsdk.dll动态库导入到unity中:

Unity 百度AI实现人像动漫化效果

以下是调用接口时传入的参数详情:

Unity 百度AI实现人像动漫化效果

封装调用函数: 

using system;
using system.collections.generic;
using unityengine;
 
/// <summary>
/// 人像动漫化
/// </summary>
public class anime
{
    //以下信息于百度开发者中心控制台创建应用获取
    private const string appid = "";
    private const string apikey = "";
    private const string secretkey = "";
 
        /// <summary>
    /// 发起人像动漫画请求
    /// </summary>
    /// <param name="bytes">图片字节数据</param>
    /// <param name="withmask">是否带口罩</param>
    /// <param name="maskid">口罩id 取值范围1-8</param>
    /// <returns>返回的动漫画图片字节数据</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>
    /// 发起人像动漫画请求
    /// </summary>
    /// <param name="url">图片url地址</param>
    /// <param name="withmask">是否带口罩</param>
    /// <param name="maskid">口罩id 取值范围1-8</param>
    /// <returns>返回的动漫画图片字节数据</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;
    }
}

测试图片:

Unity 百度AI实现人像动漫化效果

using system.io;
using unityengine;
 
public class example : monobehaviour
{
    private void start()
    {
        //读取图片字节数据 发起请求
        var bytes = anime.sendrequest(file.readallbytes(application.datapath + "/picture.jpg"));
        //根据返回的字节数据生成图片
        file.writeallbytes(application.datapath + "/test.png", bytes);
    }
}

下面是生成的图片:

Unity 百度AI实现人像动漫化效果

到此这篇关于unity 百度ai实现人像动漫化效果的文章就介绍到这了,更多相关unity 人像动漫化内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!