春天随着落花走了,夏天披着一身的绿叶儿在暖风里蹦跳着走来了
今天小帅丶给开发者带来了人脸驱动接口的评测-Java语言
接口文档:https://ai.baidu.com/ai-doc/FACE/Eknx5xyfg (一定要看哦)
由于是邀测接口,需要提交工单申请哦~
特效用户交流QQ群:583486416
能力介绍
上传包含人脸的照片和一段表情丰富的人脸视频,即可用视频中人物的表情驱动静态照片,
生成视频,让静态的照片变得鲜活生动,可用于制作各种趣味视频及个性表情包
表情迁移:将视频中的人脸表情迁移至静态照片中
唇形迁移:将视频中人脸的唇形动作迁移到静态照片中
注意:项目为Java项目,使用Maven搭建,需要开发工具安装lombok插件哦
需要引入额外的JAR
Hutool 发送HTTP请求
FastJson 处理数据为json格式
Lombok 简化代码
STEP 1 获取AccessToken
https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu#%E8%8E%B7%E5%8F%96access-token
STEP 2 准备必要属性
/** AccessToken */
public static String ACCESS_TOKEN = "";
/** 人脸驱动任务创建 */
public static String FACE_DRIVE_ADD = "https://aip.baidubce.com/rest/2.0/face/v1/vmfacedrive/task/add";
/** 人脸驱动任务查询 */
public static String FACE_DRIVE_GET = "https://aip.baidubce.com/rest/2.0/face/v1/vmfacedrive/task/get";
/** 人脸驱动模板ID 目前仅支持这一个*/
public static String TEMPLATE_ID = "template_v3TUE5MVRCDZ";
STEP 3 编写创建任务的代码
/**
* @Author 小帅丶
* @Description 人脸驱动任务创建
* @Date 2021-05-12 14:07
* @param imagePath 背景图片本地路径
* @return java.lang.String
**/
public String faceDriveAdd(String imagePath) throws Exception{
FaceDriverVirtualRequestBean bean = new FaceDriverVirtualRequestBean();
bean.setAppid(APPID);
bean.setTemplate_id(TEMPLATE_ID);
String image = Base64Util.encode(FileUtil.readFileByBytes(imagePath));
bean.setImage(image);
String result = HttpUtil.post(FACE_DRIVE_ADD + "?access_token=" + ACCESS_TOKEN, JSON.toJSONString(bean));
return result;
}
调用需要用的一个Java对象(为了方便传递参数)
import lombok.Data;
/**
* @author 小帅丶
* @className FaceDriverVirtualRequestBean
* @Description 请求参数
* @Date 2021-05-12-13:51
**/
@Data
public class FaceDriverVirtualRequestBean {
private String appid;
private String task_id;
/*****人脸驱动*****/
private String image;
private String template_id;
}
STEP 4 编写查询任务的代码-备用
/**
* @Author 小帅丶
* @Description 人脸驱动任务查询
* @Date 2021-05-12 14:07
* @param taskId 视频融合任务ID
* @return java.lang.String
**/
public String faceDriveGet(String taskId){
FaceDriverVirtualRequestBean bean = new FaceDriverVirtualRequestBean();
bean.setAppid(APPID);
bean.setTask_id(taskId);
String result = HttpUtil.post(FACE_DRIVE_GET + "?access_token=" + ACCESS_TOKEN, JSON.toJSONString(bean));
return result;
}
STEP 5 创建一个人脸驱动任务
imagePath为本地图片路径,图片中最好包含人脸
public static void main(String[] args)throws Exception {
//单人脸图片
String imagePath = "F://testimg//myyh.jpg";
//人脸驱动任务创建
String result = faceDriverSample.faceDriveAdd(imagePath);
System.out.println("result = " + result);
}
返回的内容-taskId保存备用
{
"result":{
"task_id":"v9u1AL3bbVkG"
},
"log_id":5589101754594,
"error_msg":"SUCCESS",
"cached":0,
"error_code":0,
"timestamp":1621246355
}
STEP 6 查询人脸驱动任务状态
public static void main(String[] args)throws Exception {
//人脸驱动任务查询
String result = faceDriverSample.faceDriveGet("v9u1AL3bbVkG");
System.out.println("result = " + result);
}
这里有三种任务状态 running(任务进行中)/success(任务成功)/failed(任务失败)
返回的内容-videoUrl即为生成的视频地址 只有success才会返回videoUrl
URL已经被小帅处理了。开发者们无需复制粘贴去查看到底是什么哦
{
"result":{
"video_url":"https://facefusion-2021-peoplesdaily.cdn.bcebos.com/mp4/77742f2b-9ade-4976-9b8b-c2afe2b89949.mp4",
"status":"success"
},
"log_id":7905359499652,
"error_msg":"SUCCESS",
"cached":0,
"error_code":0,
"timestamp":1621246380
}
小帅的一些意见建议和问题
1.接口返回是否可以增加视频过期时间
2.是否可以考虑增加回调到用户的服务呢。查询的接口进行轮询不是很友好
3.查询是否支持多个taskId查询呢
5.MP4导入剪映没有画面(在小程序是正常的,下载导入剪映是没有画面的,需要再次转换MP4编码)
6.人脸驱动不支持多人脸操作(仅仅是单人脸,功能太单一)
微信扫码快速体验
需要去我的-我的记录进行查询,当任务状态为 成功 则可以点击查看详情,
默认MP4可以直接显示在微信播放。如果无法播放,可以复制链接在手机或PC浏览器打开查看
可能你这个属于 badcase了。看百度技术怎么排查吧。
一直都是ruunig状态,过了一下午都是running状态
已经提交工单处理
最后处理结果我会记录在这里
这个是需要一定时间去处理。
你是过了多久查询还是 running的呢?建议这块最好描述一下。
返回的LOGID之类的记录一下。提交到百度工单让百度技术帮你查看一下。
返回结果一直是running是为啥子???