同步操作将从 HuaweiCloudDeveloper/huaweicloud-metastudio-videodrive-java 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
本示例基于华为云SDK V3.0版本开发
什么是华为云MetaStudio服务?
华为云MetaStudio服务联合伙伴打造数字内容生产线,帮助千行百业实现虚拟世界与现实世界无缝融合。数字人生产线是数字内容生产线的主要组成部分,包含数字人生产、数字人视频制作和数字人直播等场景化的应用。 华为云MetaStudio服务在数字内容生产线中为伙伴提供PaaS原子API能力。 MetaStudio提供的PaaS API能力包括:
您将学到什么?
华为云提供了 MetaStudio 服务端 SDK,您可以直接集成服务端 SDK 来调用 MetaStudio 的相关 API,从而实现对 MetaStudio 的快速操作。
该场景示例代码以数字人视频驱动为例,介绍如何使用MetaStudio Java SDK创建一个视频驱动任务。视频任务启动成功后,将返回RTC房间信息,通过集成RTC客户将摄像头视频传入房间后即可驱动数字人面部表情和肢体动作。
视频驱动可用于中之人驱动的数字人直播等场景。
说明:
具体操作步骤请参考:华为云MetaStudio开发指南 。
关于视频驱动接口的详细说明可参见:
MetaStudio API参考的“视频驱动” 章节。
开发者可以通过Maven方式获取和安装SDK,包括“huaweicloud-sdk-core”和“huaweicloud-sdk-metastudio”。需要在Java项目的pom.xml文件中加入如下的依赖项。
<dependencies>
<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-core</artifactId>
<version>3.1.36</version>
</dependency>
<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-metastudio</artifactId>
<version>3.1.36</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
public class MetaStudioVideoDrive {
private static final Logger logger = LoggerFactory.getLogger(MetaStudioVideoDrive.class);
public static void main(String[] args) throws InterruptedException {
System.out.println("Start HUAWEI CLOUD MetaStudio Video Drive Java Demo...");
ICredential auth = getCredential("YOUR AK", "YOUR SK","YOUR PROJECT ID");
// 初始数字人服务的客户端
MetaStudioClient client = getClient(MetaStudioRegion.CN_NORTH_4, auth);
// 创建视频驱动任务
CreateVideoMotionCaptureJobResponse videoMotionCaptureJob = createVideoMotionCaptureJob(client);
Thread.sleep(5000);
// 获取视频驱动任务列表
listVideoMotionJob(client);
// 查询视频驱动详情
showVideoMotionCaptureJob(client, videoMotionCaptureJob.getJobId());
// 控制视频驱动
executeVideoMotionCaptureCommandJob(client, videoMotionCaptureJob.getJobId());
Thread.sleep(5000);
// 停止视频驱动
stopVideoMotionCaptureJob(client, videoMotionCaptureJob.getJobId());
}
/**
* 查询视频驱动任务列表
*
* @param client MetaStudio client
* @return 查询视频驱动任务列表响应
*/
public static ListVideoMotionCaptureJobsResponse listVideoMotionJob(MetaStudioClient client) {
System.out.println("listVideoMotionJob start");
try {
ListVideoMotionCaptureJobsRequest listVideoMotionCaptureJobsRequest = new ListVideoMotionCaptureJobsRequest();
ListVideoMotionCaptureJobsResponse response = client.listVideoMotionCaptureJobs(listVideoMotionCaptureJobsRequest);
return response;
} catch (ConnectionException | RequestTimeoutException e) {
System.out.println("there is some error, exception:" + e);
}
return null;
}
/**
* 创建视频驱动任务
*
* @param client MetaStudio client
* @return 创建视频驱动任务响应
*/
public static CreateVideoMotionCaptureJobResponse createVideoMotionCaptureJob(MetaStudioClient client) {
// 设置接收视频驱动数据的地址
OutputInfo outputInfo = new OutputInfo();
UUID uuid = UUID.randomUUID();
int randomInt = uuid.hashCode();
randomInt = randomInt < 0 ? -randomInt : randomInt;
outputInfo.setAudioAddr("121.36.196.49:30002"); // 音频输入地址
outputInfo.setBodyAddr("121.36.196.49:30002"); // 面部表情输入地址
outputInfo.setFaceAddr("121.36.196.49:30002"); // 面部表情输入地址
// 会话ID
outputInfo.setSessionId(randomInt);
VideoMotionCaptureJobReq videoMotionCaptureJobReq = new VideoMotionCaptureJobReq();
// 设置视频驱动模式
videoMotionCaptureJobReq.setMotionCaptureMode(VideoMotionCaptureJobReq.MotionCaptureModeEnum.FULL_BODY);
videoMotionCaptureJobReq.setOutputInfo(outputInfo);
try {
CreateVideoMotionCaptureJobRequest createVideoMotionCaptureJobRequest = new CreateVideoMotionCaptureJobRequest();
createVideoMotionCaptureJobRequest.withBody(videoMotionCaptureJobReq);
CreateVideoMotionCaptureJobResponse response = client.createVideoMotionCaptureJob(createVideoMotionCaptureJobRequest);
return response;
} catch (ConnectionException | RequestTimeoutException e) {
System.out.println("there is some error, exception:" + e);
}
return null;
}
/**
* 查询视频驱动任务详情
*
* @param client MetaStudio client
* @param jobId 视频驱动任务ID
* @return 查询视频驱动任务详情响应
*/
public static ShowVideoMotionCaptureJobResponse showVideoMotionCaptureJob(MetaStudioClient client, String jobId) {
ShowVideoMotionCaptureJobResponse response = null;
try {
System.out.println("showVideoMotionCaptureJob start");
ShowVideoMotionCaptureJobRequest showVideoMotionCaptureJobRequest = new ShowVideoMotionCaptureJobRequest();
showVideoMotionCaptureJobRequest.withJobId(jobId);
response = client.showVideoMotionCaptureJob(showVideoMotionCaptureJobRequest);
System.out.println("ShowVideoMotionCaptureJobResponse:" + response.toString());
return response;
} catch (ConnectionException | RequestTimeoutException e) {
System.out.println("there is some error, exception:" + e);
}
return null;
}
/**
* 控制视频驱动,包括视觉驱动复位、模型位移调整等
*
* @param client MetaStudio client
* @param jobId 视频驱动任务ID
* @return 控制视频驱动响应
*/
public static ExecuteVideoMotionCaptureCommandResponse executeVideoMotionCaptureCommandJob(MetaStudioClient client, String jobId) {
System.out.println("executeVideoMotionCaptureCommandJob start");
ExecuteVideoMotionCaptureCommandRequest executeVideoMotionCaptureCommandRequest = new ExecuteVideoMotionCaptureCommandRequest().withJobId(jobId);
ControlDigitalHumanLiveReq controlDigitalHumanLiveReq = new ControlDigitalHumanLiveReq().withCommand(ControlDigitalHumanLiveReq.CommandEnum.BODY_POS_RESET);
executeVideoMotionCaptureCommandRequest.setBody(controlDigitalHumanLiveReq);
try {
ExecuteVideoMotionCaptureCommandResponse response = client.executeVideoMotionCaptureCommand(executeVideoMotionCaptureCommandRequest);
System.out.println("ExecuteVideoMotionCaptureCommandResponse" + response);
return response;
} catch (ConnectionException | RequestTimeoutException e) {
System.out.println("there is some error, exception:" + e);
}
return null;
}
/**
* 停止视频驱动任务
*
* @param client MetaStudio client
* @param jobId 视频驱动任务ID
* @return 停止视频驱动任务响应
*/
public static StopVideoMotionCaptureJobResponse stopVideoMotionCaptureJob(MetaStudioClient client, String jobId) {
System.out.println("stopVideoMotionCaptureJob start");
StopVideoMotionCaptureJobRequest stopVideoMotionCaptureJobRequest = new StopVideoMotionCaptureJobRequest().withJobId(jobId);
try {
StopVideoMotionCaptureJobResponse response = client.stopVideoMotionCaptureJob(stopVideoMotionCaptureJobRequest);
return response;
} catch (ConnectionException | RequestTimeoutException e) {
System.out.println("there is some error, exception:" + e);
}
return null;
}
/**
* 创建鉴权凭证
*
* @param ak 租户帐号对应的 Access Key(AK)
* @param sk 租户帐号对应的 Secret Access Key(SK)
* @return 鉴权凭证
*/
public static ICredential getCredential(String ak, String sk, String projectId) {
return new BasicCredentials()
.withAk(ak)
.withSk(sk)
.withProjectId(projectId);
}
/**
* 创建MetaStudio client
*
* @param region region信息
* @param auth 鉴权凭证
* @return MetaStudio client
*/
public static MetaStudioClient getClient(Region region, ICredential auth) {
// 使用默认配置
HttpConfig config = HttpConfig.getDefaultHttpConfig();
config.withIgnoreSSLVerification(true);
// 初始化metaStudio服务的客户端
return MetaStudioClient.newBuilder()
.withHttpConfig(config)
.withCredential(auth)
.withRegion(region) // 选择服务所在区域
.build();
}
}
更多信息请参考:
发布日期 | 文档版本 | 修订说明 |
---|---|---|
2023-04-12 | 1.0 | 文档首次发布 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。