如何利用Java实现 AI 人脸融合特效

2023-07-10 19:25:16

项目背景

最近自从chat-gpt爆火以来,AI技术在人工智能领域持续迭代的创新,为人们的生活带来了许多震撼的应用。比如其中的,AI人脸融合特效,在各大抖音、B站等平台上,越来越火热,基于这,我也打算利用第三方开源的API,来实现一个自己的人脸融合。

AI 人脸融合特效的原理

AI人脸融合特效是一种基于深度学习和计算机视觉技术的创新应用,它能够将一个人的面部特征融入到另一个人的照片或视频中,实现惊人逼真的效果。不仅可以将名人、角色或者历史人物的面部特征与自己进行融合,还可以实现跨性别、跨年龄等不同身份的转换。

那么它的背后离不开深度神经网络的强大处理能力。首先,通过训练海量的人脸数据,网络能够准确地提取出每个人的面部特征,并将其编码为高维向量表示。接着,利用生成对抗网络(GAN)和自编码器等模型,将源图像的面部特征与目标图像进行高度精确地融合。最终,经过参数调整和优化,生成的图像在保持目标图像风格的同时,完美还原了源图像的面部特征。

这项技术的突破性之处在于其出色的真实感和可信度。通过AI人脸融合特效,用户可以轻松拥有一种超越现实的体验,感受到与自己所崇拜的名人亲近的乐趣。同时,它为影视娱乐产业带来了巨大的创新空间,演员们能够在不同角色之间自由切换,让观众看到更多富有想象力的作品。

代码实现

在开始之前,我个人私下里对比了几家第三方人脸融合特效的效果,比如百度智能云、阿里等等平台,最终对比之后,个人觉得还是百度智能云的效果更好些,因此,这次就借用百度智能云第三方API来实现人脸融合特效。

我们先注册一个账号,然后在控制台这里,我们可以搜索人脸识别,申请到部分免费的基础服务的资源,但今天我们要实现的人脸融合特效,是需要购买的,所以我们创建应用。创建成功后,平台将会分配给您此应用的相关凭证,主要为AppID、API Key、Secret Key。我们要记下这几个数值:分别是client_id 以及 client_secret,后面在调用 token接口的时候会用到。

在这里插入图片描述

第一步:调用token接口

public static String getToken() {
    String grant_type = "client_credentials";
    String client_id = "fasq35sadvsvqwr5q...";
    String client_secret = "fasq35sadvsvqwr5q...";
    String url = "https://aip.baidubce.com/oauth/2.0/token" + "?grant_type=" + grant_type + "&client_id=" + client_id + "&client_secret=" + client_secret;

    String result = HttpClient.doGet(url);
    
    System.out.println(result);
    return result;
}

当调用的时候,会获取到如下的一大串access_token:

在这里插入图片描述

人脸融合

利用刚刚获取到的token,我们可以去调用第三方API,路径为:
url = "https://aip.baidubce.com/rest/4.0/face/v1/merge"

 public static String faceMerge() {
        // 请求url
        String url = "https://aip.baidubce.com/rest/4.0/face/v1/merge";
        try {
            Map<String, Object> map = new HashMap<>();
            //模板图
            Map<String, Object> image_templateMap = new HashMap<>();
            image_templateMap.put("image", "sfasq35sadvsvqwr5q...");
            image_templateMap.put("image_type", "BASE64");
            image_templateMap.put("quality_control", "HIGH");
            map.put("image_template", image_templateMap);

            //目标图,用户自己上传的图片
            Map<String, Object> image_targetMap = new HashMap<>();
            image_targetMap.put("image", "sfasq35sadvsvqwr5q...");
            image_targetMap.put("image_type", "BASE64");
            image_targetMap.put("quality_control", "HIGH");
            map.put("image_target", image_targetMap);

            String param = GsonUtils.toJson(map);

            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
            String accessToken = "[调用鉴权接口获取的token]";

            String result = HttpUtil.post(url, accessToken, "application/json", param);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

这边有几个注意事项:

  • 请求体格式化Content-Type为application/json,通过json格式化请求体。
  • Base64编码:请求的图片需经过Base64编码,图片的base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。您可以首先得到图片的二进制,然后用Base64格式编码即可。需要注意的是,图片的base64编码是不包含图片头的,如data:image/jpg;base64,
  • 图片格式:现支持PNG、JPG、JPEG、BMP,不支持GIF图片

这个接口里主要包括两部分内容:

第一个就是模板图,模板图就是用户想要融合成的效果样子。这个是默认,比如我要和一个数字人图片融合,那么这个数字人就是模板图,我们可以把它的base64写死在i项目里即可。

第二个就是目标图,目标图就是用户上传的自拍图,这个就是动态的,不同的用户上传的不一样。这个同样也需要是base64转码的。

重要的请求参数:

其中也有几个比较重要的请求参数如下:

image_template 对象 :模板图信息,要求被融合的人脸;

该对象里有几个参数为:

image:模板图信息 图片的分辨率要求在1920x1080以下

image_type

图片类型
BASE64:图片的base64值;
URL:图片的 URL( 下载图片时可能由于网络等原因导致下载图片时间过长)
FACE_TOKEN::人脸标识

同理,target目标图参数也是如此:

在这里插入图片描述

部分工具类

public class GsonUtils {
    private static Gson gson = new GsonBuilder().create();

    public static String toJson(Object value) {
        return gson.toJson(value);
    }

    public static <T> T fromJson(String json, Class<T> classOfT) throws JsonParseException {
        return gson.fromJson(json, classOfT);
    }

    public static <T> T fromJson(String json, Type typeOfT) throws JsonParseException {
        return (T) gson.fromJson(json, typeOfT);
    }
}

最终效果图

在这里插入图片描述

整体来说,这次人脸融合特效实现下来,并不拿,一个下午就能从头到尾实现出来,整体的效果,还是挺令人满意的。

更多推荐

阿里云通义千问大模型正式开放;玩10次ChatGPT就要消耗1升水

🦉AI新闻🚀阿里云通义千问大模型正式开放,已有超20万企业申请接入测试摘要:阿里云通义千问大模型已经通过备案并向公众开放。用户可以登录官网体验,企业用户可以通过阿里云调用API。阿里云通义千问在一个月的邀测中,就有超过20万企业和机构用户申请接入测试,并与OPPO、得物、钉钉、淘宝、浙江大学等合作。此外,阿里云还开

汇编基础(1)--ARM32

简介ARM32,也称为ARMArchitecturev7,是一种32位的指令集架构(ISA),由ARM公司开发并广泛应用于嵌入式系统和移动设备。ARM32是ARM体系结构中较早的版本,被许多处理器核使用,包括Cortex-A、Cortex-R和Cortex-M系列。ARM32架构的主要特点如下:精简指令集:ARM32使

ArmSom-W3开发板之PCIE的开发指南(二)

一、前言上一篇RK3588平台驱动调试篇[PCIE篇]-PCIE的开发指南(一)已经介绍过如何在3588上使用pcie的资源,这一篇介绍在Linux系统下如何应用pcie接上的设备二、PCI配置空间一个PCIe系统最多有256条Bus,每条Bus上最多挂32个Device,每个Device最多又能实现8个Functio

再聊Java Stream的一些实战技能与注意点

大家好,又见面了。在此前我的文章中,曾分2篇详细探讨了下JAVA中Stream流的相关操作,2篇文章收获了累计10w+阅读、2k+点赞以及5k+收藏的记录。能够得到众多小伙伴的认可,是技术分享过程中最开心的事情。不少小伙伴在评论中提出了一些的疑问或自己的独到见解,也在评论区中进行了热烈的互动讨论。梳理了下相关评论内容,

JVM 虚拟机 ----> Java 内存模型(JMM)

文章目录Java内存模型(JMM)一、运行时数据区域划分二、程序计数器(ProgramCounterRegister)计数器的作用三、Java虚拟机栈(VMStack)四、本地方法栈(NativeMethodStack)五、堆(Heap)1、概述2、新生代、老年代3、创建对象的内存分配六、元空间(MetaSpace)1

【C# 基础精讲】异步和同步的区别

异步(Asynchronous)和同步(Synchronous)是在编程中经常遇到的两种执行模式。它们涉及到程序中任务的执行方式以及对资源的管理方式。在本文中,我们将深入探讨异步和同步的区别、使用场景以及在C#中如何实现异步编程。1.同步执行同步执行是指程序按照严格的顺序依次执行每个任务,当前任务执行完成后再执行下一个

Qt5开发及实例V2.0-第二章Qt模板库工具类及控件

Qt5开发及实例V2.0-第二章Qt模板库工具类及控件第2章Qt5模板库、工具类及控件2.1字符串类2.1.1操作字符串2.1.2查询字符串数据2.1.3字符串的转换2.2容器类2.2.1QList类、QLinkedList类和QVector类2.2.2QMap类和QHash类2.3QVariant类2.4算法及正则表

解密Java多线程中的锁机制:CAS与Synchronized的工作原理及优化策略

目录CAS什么是CASCAS的应用ABA问题异常举例Synchronized原理基本特征加锁过程偏向锁轻量级锁重量级锁其他优化操作锁消除锁粗化CAS什么是CASCAS:全称Compareandswap,字面意思:”比较并交换“,CAS涉及如下操作:假设内存中的原数据为A,旧的预期值为B,需要修改的值为C。首先把A与B进

安卓系统--翻译手机rom语言 添加多国语言 编译apk 反编译ODEX 工具步骤解析

很多小品牌机型不具备多语言设置。国内大都是中文。要想换为其他语言除非固件支持。例如国际版固件等等。大厂基本都有中文或者英文或者其他语言配置。而小品牌机型只能通过修改rom来达到多语言调用.工具步骤演示今天给友友介绍一款工具,可以用来翻译手机rom语言。添加多国语言和有些系统apk的编译与反编译等等。工具支持小米系列低版

NTPS/YCD80-1-400V终端电气综合治理保护系统 末端用电防护治理装置

NTPS/YCD80-1-400V终端电气综合治理保护系统赵经理:18O668722O7(同微信)QQ:3O824OO571公司是一家从事智能电网用户端的智能电力监控与电气安全系统的研发,生产和销售于一体的高新技术企业,自主研发了风机节能控制器,新风空调节能控制器,电梯节能控制器,水泵节能控制器,热交换系统节能控制器,

还没用熟 TypeScript 社区已经开始抛弃了

根据rich-harris-talks-sveltekit-and-whats-next-for-svelte这篇文章的报道,Svelte计划要把代码从TS换到JS了。TheteamisswitchingtheunderlyingcodefromTypeScripttoJavaScript.Thatandtheupda

热文推荐