如何用java做动漫_用 Java 实现“人像动漫化”特效

用 Java 实现“人像动漫化”特效

效果展示

不戴口罩的

如何用java做动漫_用 Java 实现“人像动漫化”特效_第1张图片

如何用java做动漫_用 Java 实现“人像动漫化”特效_第2张图片

戴口罩的

如何用java做动漫_用 Java 实现“人像动漫化”特效_第3张图片

如何用java做动漫_用 Java 实现“人像动漫化”特效_第4张图片

原理分析

这里首先给大家提供下面的一个网址,这就是百度AI开放平台关于人像动漫化特效的网页:http://suo.im/64FNvD。

在这里我们可以上传自己的图片(如图所示),进行人像动漫画的操作。

如何用java做动漫_用 Java 实现“人像动漫化”特效_第5张图片

在该页面有一个重要的东西:软件操作人像动漫化的接口(如图所示)。从左边可以看到,这是一个 Post 请求,发送该请求的网址并不全,需要你提供自己的access_token。同时呢,发送 Post 请求不仅需要携带 Headers,还需要携带一个 Params 参数,其中 Headers 是固定的,image 参数是图片的 Base64 编码格式。该 Post 请求的返回值 Response 是一个字典,我们这里先记住就行了。

如何用java做动漫_用 Java 实现“人像动漫化”特效_第6张图片

网址显示的页面中还有一个很重要的东西:人像动漫画接口的API文档(如图所示),该文档可以帮助我们怎么写代码

API文档网址:http://suo.im/64FNZ9

从图中可以看到,这个API文档中不仅有人像动漫画的操作,还有黑白图像上色、图像修复等一系列操作,都是很好玩的。希望大家学习了本文以后,能够下去玩玩其他的操作。

如何用java做动漫_用 Java 实现“人像动漫化”特效_第7张图片

通过上述的原理分析:实现人像动漫画操作,最终就转化为发送一个 Post 请求。而发送 Post 请求呢,我们就需要获取我们的 Access_token 参数。

Access_token参数的获取

获取 Access_token 参数,需要使用百度的鉴权认证机制。下面就是鉴权认证机制的网址,在该网页上,详细介绍了我们怎么获取自己的 Access_token 参数。

鉴权认证机制网址:http://suo.im/6rUoTr

如何用java做动漫_用 Java 实现“人像动漫化”特效_第8张图片

仔细查看本页面上的文档,我们可以很容易的发现:获取Access_token 参数,就是是发送一次 Post 请求,该请求的返回值是一个字典,里面有我们想要获取的access_token参数。

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】

上面是这个 Post 请求的网址,但是可以看到这个网址也是不全的,它还需要我们在官网中获取到自己的【官网获取的AK】和【官网获取的SK】,其中 AK 指的是 API Key,SK 指的是 Secret Key。

通过上述的分析:为了获取 Access_token 参数,也是发送一个 Post 请求,而发送 Post 请求,就需要我们找到自己的 API Key 和 Secret Key。

寻找API Key和Secret Key

如何用java做动漫_用 Java 实现“人像动漫化”特效_第9张图片

当出现如下页面,我们点击应用列表。

如何用java做动漫_用 Java 实现“人像动漫化”特效_第10张图片

如何用java做动漫_用 Java 实现“人像动漫化”特效_第11张图片

当出现如下界面,完成如下的操作

如何用java做动漫_用 Java 实现“人像动漫化”特效_第12张图片

创建成功后,直接查看应用列表即可,最终页面如下。

如何用java做动漫_用 Java 实现“人像动漫化”特效_第13张图片

点击展开后,我们可以查看某个 API 的使用次数。因为有些 API 接口并不是一直免费的,有效次数使用完了以后,需要付费使用啦。下图也可以看到人像动漫画操作大致也就500次的免费使用次数。

c0fa882e931f24cea1a5ce6a762c4b39.png

代码展示

1)单纯的人像动漫化,不为人像戴口罩

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

import com.innshine.face.utils.Base64Util;

import com.innshine.face.utils.FileUtil;

import com.innshine.face.utils.HttpUtil;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.*;

/**

* 重要提示代码中所需工具类

* FileUtil,Base64Util,HttpUtil,GsonUtils请从

* https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72

* https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2

* https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3

* https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3

* 下载

*/

@RestController

public class BaiDuFaceController {

@RequestMapping("/get/picture")

public String getPictureSource() {

/**

* 获取access_token

*/

String CLIENT_ID = "3j8EWb6rgg...SPY2X693LBy";

String CLIENT_SECRET = "Px9KZuU0Gl...jTKktoCopnIWEiF57gf";

String getAccessTokenUrl = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET;

String access_token="";

String result = "";

String line;

String response="";

try {

URL realUrl = new URL(getAccessTokenUrl);

// 打开和URL之间的连接

HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();

connection.setRequestMethod("GET");

connection.connect();

// 定义 BufferedReader输入流来读取URL的响应

BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

while ((line = in.readLine()) != null) {

result += line;

}

/**

* 返回结果

*/

JSONObject jsonObject = JSON.parseObject(result);

access_token = jsonObject.getString("access_token");

/**

* 请求图片处理接口

*/

String postUrl = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime";

// 本地文件路径

String filePath = "D:\\meinv.jpg";

byte[] imgData = FileUtil.readFileByBytes(filePath);

String imgStr = Base64Util.encode(imgData);

String imgParam = URLEncoder.encode(imgStr, "UTF-8");

//不戴口罩的参数

String param = "image=" + imgParam ;

response = HttpUtil.post(postUrl, access_token, param);

JSONObject parseObject = JSON.parseObject(response);

String image = parseObject.getString("image");

Base64Util.GenerateImage(image,"D:\\meinv(20).jpg");

} catch (Exception e) {

e.printStackTrace();

}

return response;

}

}

2)人像动漫化,并为人像戴口罩

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

import com.innshine.face.utils.Base64Util;

import com.innshine.face.utils.FileUtil;

import com.innshine.face.utils.HttpUtil;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.*;

@RestController

public class BaiDuFaceController {

@RequestMapping("/get/picture")

public String getPictureSource() {

/**

* 获取access_token

*/

String CLIENT_ID = "3j8EWb6rgg...SPY2X693LBy";

String CLIENT_SECRET = "Px9KZuU0Gl...jTKktoCopnIWEiF57gf";

String getAccessTokenUrl = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET;

String access_token="";

String result = "";

String line;

String response="";

try {

URL realUrl = new URL(getAccessTokenUrl);

// 打开和URL之间的连接

HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();

connection.setRequestMethod("GET");

connection.connect();

// 定义 BufferedReader输入流来读取URL的响应

BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

while ((line = in.readLine()) != null) {

result += line;

}

/**

* 返回结果

*/

JSONObject jsonObject = JSON.parseObject(result);

access_token = jsonObject.getString("access_token");

/**

* 请求图片处理接口

*/

String postUrl = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime";

// 本地文件路径

String filePath = "D:\\meinv.jpg";

byte[] imgData = FileUtil.readFileByBytes(filePath);

String imgStr = Base64Util.encode(imgData);

String imgParam = URLEncoder.encode(imgStr, "UTF-8");

//戴口罩参数 参数格式 key=value&key01=value01....

String param = "image=" + imgParam + "&type=anime_mask&mask_id=2";

response = HttpUtil.post(postUrl, access_token, param);

JSONObject parseObject = JSON.parseObject(response);

String image = parseObject.getString("image");

Base64Util.GenerateImage(image,"D:\\meinv(20).jpg");

} catch (Exception e) {

e.printStackTrace();

}

return response;

}

}

本文地址:https://blog.csdn.net/qq_36349616/article/details/107367243

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

你可能感兴趣的:(如何用java做动漫)