百度AI接口人像渐变示例代码
人脸渐变接口功能介绍参数列表
Java示例代码所需用到的第三方JAR所需用到的工具类Java示例代码
Access_token获取示例代码请求示例返回示例效果演示百度AI接口官方文档
人脸渐变接口功能介绍
1,GIF图生成可通过上传1-N张照片,生成基非人像展示效果的GIF图(表情包)或人脸渐变过渡图像。2,短视频生成,用上传的1-N张照片,生成基于非人像的展示效果或人脸渐变过渡的视频,支持用户对专场速度、停留时间和音乐节奏进行自定义设置。 优势 1,渐变自然 ,通过标注的海量数据,动态追踪视频里的人脸具有优异的效果。 2,效果多元,配合海量的音乐节奏,让非人像的图片具有多元化的展示效果,即可恬 静高雅又生 动活泼。 3,接入便捷,可自定义音乐节奏、帧率、帧速,并兼容多种应用场景,具有超强的适应性,场景 短视频生成,把用户上传的1-n张图片,生成具有渐变和展示效果的视频,用在各类短视频产品中不仅增加了用户玩法,还让用户体验更有趣味性。
参数列表
注:官方提供的参数列表appid参数说明有误
参数必选类型说明
appid是stringapp标识 官网获取的 AppID 更新为你注册的AppIDimage_list是array图片列表+image是string识别图片的BASE64编码字符串music_id是int音乐 ID, 请传入0,本服务暂不支持配乐fps是int视频帧率 默认 10tempo是string每张图片的展示时长, 以空格分隔 数量要求和请求的图片张数一致 GIF默认每张图片0.7s 视频默认每张图片2smorph_time否int / float人像渐变的最长时间 GIF默认0.5s 视频默认1soutput_width否int输出文件的图像宽度 默认800output_height否int输出文件的图像高度 默认 1280output_type是string输出文件类型 可选GIF,MOV,MP4
Java示例代码
说明
所需用到的第三方JAR
hutool
fastjson
lombok 需要开发工具安装插件
java
.util
.Base64
; 需要JDK1
.8 或者使用hutool 里面封装的BASE64处理方法
所需用到的工具类
Java示例代码
package gradient
;
import cn
.hutool
.http
.HttpUtil
;
import cn
.sample
.Base64Util
;
import cn
.sample
.FileUtil
;
import com
.alibaba
.fastjson
.JSON
;
import lombok
.Data
;
import lombok
.NoArgsConstructor
;
import java
.io
.FileOutputStream
;
import java
.io
.OutputStream
;
import java
.util
.ArrayList
;
import java
.util
.List
;
import java
.util
.Base64
;
public class GradientSample {
public static void main(String
[] args
) throws Exception
{
String token
= "【access_token】";
String url
= "https://aip.baidubce.com/rest/2.0/face/v1/gradient";
String base641
= Base64Util
.encode(FileUtil
.readFileByBytes("【本地图片地址1】"));
String base642
= Base64Util
.encode(FileUtil
.readFileByBytes("【本地图片地址2】"));
String base643
= Base64Util
.encode(FileUtil
.readFileByBytes("【本地图片地址3】"));
String base644
= Base64Util
.encode(FileUtil
.readFileByBytes("【本地图片地址4】"));
GradientBean bean
= new GradientBean();
bean
.setAppid("【appid】");
bean
.setMusic_id(0);
bean
.setFps(20);
bean
.setOutput_type("MP4");
bean
.setOutput_width(800);
bean
.setOutput_height(1280);
List
<GradientBean.ImageListBean> image_list
= new ArrayList<>();
GradientBean
.ImageListBean imgA
= new GradientBean.ImageListBean();
imgA
.setImage(base641
);
GradientBean
.ImageListBean imgB
= new GradientBean.ImageListBean();
imgB
.setImage(base642
);
GradientBean
.ImageListBean imgC
= new GradientBean.ImageListBean();
imgC
.setImage(base643
);
GradientBean
.ImageListBean imgD
= new GradientBean.ImageListBean();
imgD
.setImage(base644
);
image_list
.add(imgA
);
image_list
.add(imgB
);
image_list
.add(imgC
);
image_list
.add(imgD
);
bean
.setImage_list(image_list
);
bean
.setTempo("2 2 2 2");
String param
= JSON
.toJSONString(bean
);
System
.out
.println(bean
.getTempo());
System
.out
.println(param
);
System
.out
.println(url
+ "?access_token=" + token
);
long startTime
= System
.currentTimeMillis();
System
.out
.println("开始时间 = " + startTime
);
String result
= HttpUtil
.post(url
+ "?access_token=" + token
, param
);
long endTime
= System
.currentTimeMillis();
System
.out
.println("结束时间 = " + endTime
);
System
.out
.println("耗时 = " + (endTime
- startTime
));
GradientResponseBean responseBean
= JSON
.parseObject(result
, GradientResponseBean
.class);
System
.out
.println("结果 = " +responseBean
.toString());
GenerateBase64ToFile(responseBean
.getResult().getOutput(),bean
.getOutput_type());
cn
.hutool
.core
.io
.FileUtil
.writeString(responseBean
.getResult().getOutput(), "F://testimg//gradient.txt", "UTF-8");
}
@NoArgsConstructor
@Data
public static class GradientBean{
private String appid
;
private int music_id
;
private int fps
= 10;
private String output_type
;
private int output_width
= 800;
private int output_height
= 1280;
private String tempo
;
private int morph_time
= 1;
private List
<ImageListBean> image_list
;
@NoArgsConstructor
@Data
public static class ImageListBean {
private String image
;
}
}
@NoArgsConstructor
@Data
public static class GradientResponseBean{
private int error_code
;
private String error_msg
;
private long log_id
;
private int timestamp
;
private int cached
;
private ResultBean result
;
@Override
public String
toString() {
return "GradientResponseBean{" +
"error_code=" + error_code
+
", error_msg='" + error_msg
+ '\'' +
", log_id=" + log_id
+
", timestamp=" + timestamp
+
", cached=" + cached
+
'}';
}
}
@NoArgsConstructor
@Data
public static class ResultBean {
private String output
;
}
public static boolean GenerateBase64ToFile(String imgStr
,String prefix
) {
Base64
.Decoder decoder
= Base64
.getDecoder();
try {
if(imgStr
== null
) {
return false;
}else{
byte[] b
= decoder
.decode(imgStr
);
for (int i
= 0; i
< b
.length
; ++i
) {
if (b
[i
] < 0) {
b
[i
] += 256;
}
}
String imgFilePath
= "F://testimg//"+System
.currentTimeMillis()+"."+prefix
.toLowerCase();
OutputStream out
= new FileOutputStream(imgFilePath
);
out
.write(b
);
out
.flush();
out
.close();
return true;
}
} catch (Exception e
) {
return false;
}
}
}
Access_token获取示例代码
package com
.baidu
.ai
.aip
.auth
;
import org
.json
.JSONObject
;
import java
.io
.BufferedReader
;
import java
.io
.InputStreamReader
;
import java
.net
.HttpURLConnection
;
import java
.net
.URL
;
import java
.util
.List
;
import java
.util
.Map
;
public class AuthService {
public static String
getAuth() {
String clientId
= "百度云应用的AK";
String clientSecret
= "百度云应用的SK";
return getAuth(clientId
, clientSecret
);
}
public static String
getAuth(String ak
, String sk
) {
String authHost
= "https://aip.baidubce.com/oauth/2.0/token?";
String getAccessTokenUrl
= authHost
+ "grant_type=client_credentials"
+ "&client_id=" + ak
+ "&client_secret=" + sk
;
try {
URL realUrl
= new URL(getAccessTokenUrl
);
HttpURLConnection connection
= (HttpURLConnection
) realUrl
.openConnection();
connection
.setRequestMethod("GET");
connection
.connect();
Map
<String
, List
<String>> map
= connection
.getHeaderFields();
for (String key
: map
.keySet()) {
System
.err
.println(key
+ "--->" + map
.get(key
));
}
BufferedReader in
= new BufferedReader(new InputStreamReader(connection
.getInputStream()));
String result
= "";
String line
;
while ((line
= in
.readLine()) != null
) {
result
+= line
;
}
System
.err
.println("result:" + result
);
JSONObject jsonObject
= new JSONObject(result
);
String access_token
= jsonObject
.getString("access_token");
return access_token
;
} catch (Exception e
) {
System
.err
.printf("获取token失败!");
e
.printStackTrace(System
.err
);
}
return null
;
}
}
请求示例
注:只要是按照这个格式提交过去就行,示例只是参考具体如何实现可自行研究与优化
{
"image_list": [{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD..."
},
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD..."
},
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD..."
},
{
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD..."
}
],
"music_id": 0,
"fps": 10,
"output_type": "MP4",
"output_width": 600,
"output_height": 600,
"tempo": "1.0 1.0 1.0 1.0",
"morph_time": 1
}
返回示例
{
"error_code": 0,
"error_msg": "SUCCESS",
"log_id": 1234567890123,
"timestamp": 1533094576,
"cached": 0,
"result": {
"output": "AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQATHf9tZGF0..."
}
}
效果演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document
</title>
</head>
<body>
<video src="data:video/MP4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQALWK1tZGF0AAACoQY..." controls alt="">
</body>
</html>
百度AI接口官方文档
百度API官方文档