开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
人脸识别

    虚拟主播视频生产-卡通版(邀测)

    如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:

    • 在百度云控制台内提交工单,咨询问题类型请选择人工智能服务
    • 如有需要讨论的疑问,欢迎进入AI社区 与其他开发者们一同交流
    • 特效用户交流QQ群:583486416

    能力介绍

    基于语音驱动动画技术,提供定制化的虚拟主播视频模板服务,帮助媒体、教育、营销类客户低成本、规模化、快速生成带虚拟主持人或虚拟老师的视频内容。

    • 唇形面部驱动:可根据文字、语音精准驱动虚拟形象的唇形和面部肌肉,配合丰富的表情和动作定制,让虚拟主播具有更加逼真的表现力。
    • 预置形象库:预设3D卡通半拟真、3D卡通动画两类形象库,供客户灵活租用和专属定制。并承接"人脸3D虚拟形象生成”技术,实现批量生产个性化形象。

    调用方式

    请求URL数据格式

    向API服务地址使用POST发送请求,必须在URL中带上参数access_token,可通过后台的API Key和Secret Key生成,具体方式请参考“Access Token获取”。

    示例代码

    #!/bin/bash
    curl -i -k 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的AK】&client_secret=【百度云应用的SK】'
    <?php
    function request_post($url = '', $param = '') {
            if (empty($url) || empty($param)) {
                return false;
            }
            
            $postUrl = $url;
            $curlPost = $param;
            $curl = curl_init();//初始化curl
            curl_setopt($curl, CURLOPT_URL,$postUrl);//抓取指定网页
            curl_setopt($curl, CURLOPT_HEADER, 0);//设置header
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
            curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
            curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
            $data = curl_exec($curl);//运行curl
            curl_close($curl);
            
            return $data;
        }
    
        $url = 'https://aip.baidubce.com/oauth/2.0/token';
        $post_data['grant_type']       = 'client_credentials';
        $post_data['client_id']      = '你的 Api Key';
        $post_data['client_secret'] = '你的 Secret Key';
        $o = "";
        foreach ( $post_data as $k => $v ) 
        {
            $o.= "$k=" . urlencode( $v ). "&" ;
        }
        $post_data = substr($o,0,-1);
        
        $res = request_post($url, $post_data);
    
        var_dump($res);
    
    ?>
    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;
    
    /**
     * 获取token类
     */
    public class AuthService {
    
        /**
         * 获取权限token
         * @return 返回示例:
         * {
         * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
         * "expires_in": 2592000
         * }
         */
        public static String getAuth() {
            // 官网获取的 API Key 更新为你注册的
            String clientId = "百度云应用的AK";
            // 官网获取的 Secret Key 更新为你注册的
            String clientSecret = "百度云应用的SK";
            return getAuth(clientId, clientSecret);
        }
    
        /**
         * 获取API访问token
         * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
         * @param ak - 百度云官网获取的 API Key
         * @param sk - 百度云官网获取的 Securet Key
         * @return assess_token 示例:
         * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
         */
        public static String getAuth(String ak, String sk) {
            // 获取token地址
            String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
            String getAccessTokenUrl = authHost
                    // 1. grant_type为固定参数
                    + "grant_type=client_credentials"
                    // 2. 官网获取的 API Key
                    + "&client_id=" + ak
                    // 3. 官网获取的 Secret Key
                    + "&client_secret=" + sk;
            try {
                URL realUrl = new URL(getAccessTokenUrl);
                // 打开和URL之间的连接
                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输入流来读取URL的响应
                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;
        }
    
    }
     # encoding:utf-8
    import requests 
    
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
    response = requests.get(host)
    if response:
        print(response.json())
    #include <iostream>
    #include <curl/curl.h>
    #include <json/json.h>
    #include "access_token.h"
    // libcurl库下载链接:https://curl.haxx.se/download.html
    // jsoncpp库下载链接:https://github.com/open-source-parsers/jsoncpp/
    // 获取access_token所需要的url
    const std::string access_token_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials";
    // 回调函数获取到的access_token存放变量
    // static std::string access_token_result;
    /**
     * curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在result中
     * @param 参数定义见libcurl库文档
     * @return 返回值定义见libcurl库文档
     */
    static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
        // 获取到的body存放在ptr中,先将其转换为string格式
        std::string s((char *) ptr, size * nmemb);
        // 开始获取json中的access token项目
        Json::Reader reader;
        Json::Value root;
        // 使用boost库解析json
        reader.parse(s,root);
        std::string* access_token_result = static_cast<std::string*>(stream);
        *access_token_result = root["access_token"].asString();
        return size * nmemb;
    }
    
    /**
     * 用以获取access_token的函数,使用时需要先在百度云控制台申请相应功能的应用,获得对应的API Key和Secret Key
     * @param access_token 获取得到的access token,调用函数时需传入该参数
     * @param AK 应用的API key
     * @param SK 应用的Secret key
     * @return 返回0代表获取access token成功,其他返回值代表获取失败
     */
    int get_access_token(std::string &access_token, const std::string &AK, const std::string &SK) {
        CURL *curl;
        CURLcode result_code;
        int error_code = 0;
        curl = curl_easy_init();
        if (curl) {
            std::string url = access_token_url + "&client_id=" + AK + "&client_secret=" + SK;
            curl_easy_setopt(curl, CURLOPT_URL, url.data());
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
            std::string access_token_result;
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &access_token_result);
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
            result_code = curl_easy_perform(curl);
            if (result_code != CURLE_OK) {
                fprintf(stderr, "curl_easy_perform() failed: %s\n",
                        curl_easy_strerror(result_code));
                return 1;
            }
            access_token = access_token_result;
            curl_easy_cleanup(curl);
            error_code = 0;
        } else {
            fprintf(stderr, "curl_easy_init() failed.");
            error_code = 1;
        }
        return error_code;
    }
    using System;
    using System.Collections.Generic;
    using System.Net.Http;
    
    namespace com.baidu.ai
    {
        public static class AccessToken
    
        {
            // 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
            // 返回token示例
            public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";
    
            // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
            private static String clientId = "百度云应用的AK";
            // 百度云中开通对应服务应用的 Secret Key
            private static String clientSecret = "百度云应用的SK";
    
            public static String getAccessToken() {
                String authHost = "https://aip.baidubce.com/oauth/2.0/token";
                HttpClient client = new HttpClient();
                List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
                paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
                paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
                paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));
    
                HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
                String result = response.Content.ReadAsStringAsync().Result;
                Console.WriteLine(result);
                return result;
            }
        }
    }
    var https = require('https');
    var qs = require('querystring');
    
    const param = qs.stringify({
        'grant_type': 'client_credentials',
        'client_id': '您的 Api Key',
        'client_secret': '您的 Secret Key'
    });
    
    https.get(
        {
            hostname: 'aip.baidubce.com',
            path: '/oauth/2.0/token?' + param,
            agent: false
        },
        function (res) {
            // 在标准输出中查看运行结果
            res.pipe(process.stdout);
        }
    );

    注意access_token的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新token

    例如虚拟主播视频生产(卡通版)接口,使用HTTPS POST发送:

    https://aip.baidubce.com/rpc/2.0/creation/v1/avatar/task/add?access_token=24.f9ba9c5341b67688ab4added8bc91dec.2592000.1485570332.282335-8574074

    POST中Body的参数,按照下方请求参数说明选择即可。

    提示:如果您为百度云老用户,正在使用其他非AI的服务,可以参考百度云AKSK鉴权方式发送请求,虽然请求方式鉴权方法和本文所介绍的不同,但请求参数和返回结果一致。

    请求说明

    注意事项

    • 请求形式:POST,以form表单形式发送请求,视频生产接口请求中仅有一个key——data,其对应的value为字符串化的json

    请求示例

    HTTP方法:POST
    请求URL:https://aip.baidubce.com/rpc/2.0/creation/v1/avatar/task/add https://aip.baidubce.com/rpc/2.0/creation/v1/avatar/task/get

    URL参数:

    参数
    access_token 通过API Key和Secret Key获取的access_token,参考“Access Token获取

    Header:

    参数
    Content-Type application/x-www-form-urlencoded (或 multipart/form-data)

    Body中放置请求参数,参数详情见下文。

    1. 虚拟主播视频生产(卡通版)接口

    在线调试

    您可以在 API Explorer 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。

    请求路径https://aip.baidubce.com/rpc/2.0/creation/v1/avatar/task/add

    请求参数

    参数 必选 类型 说明
    data string a对应的value为字符串化的json,在json字符串由如下参数组成
    model_id string 人物形象参数,小老鼠=401,西服女=402,红裙女=403
    per string 物音色参数,度小鹿:"4118" 度博文:"106" 度米朵:"103" 度小娇:"5" 度逍遥:"4003" 七哥:"x2_qige" 小媛:"x2_xiaoyuan"
    template_id string 该值为生成视频模板选项,目前固定为"3"
    text string 待播报内容,汉字数小于500字,两个英文字符视为一个汉字。

    示例代码

    key value
    data {"model_id":"402","per":"4118","template_id":"3","text":"您好,欢迎试用虚拟主播智能创作接口。"}

    value转换为字符串为:

    "{\"model_id\":\"401\",\n \"template_id\":\"3\",\n \"per\":\"4118\",\n \"text\":\"您好,欢迎试用虚拟主播智能创作接口。\"}"

    返回结果

    参数名称 参数类型 参数说明
    err_code int 错误码
    err_msg string 错误信息
    log_id string 日志唯一标识
    data map 数据字段,map里面的key:video_id代表视频的唯一标识,后续查询结果需要根据此id进行查询,类型string

    返回示例

    {
        "log_id": "3440407666",
        "err_code": 0,
        "err_msg": "success",
        "data": {
    		"video_id":"2000"
    	}
    }

    2. 虚拟主播视频生产结果查询(卡通版)接口

    轮询调用该接口,以获取视频生成结果,建议3-5s轮询一次。

    在线调试

    您可以在 API Explorer 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。

    请求路径https://aip.baidubce.com/rpc/2.0/creation/v1/avatar/task/get

    请求参数

    参数 必选 类型 说明
    video_ids string 由生产接口返回的视频id,可以传多个,中间以逗号隔开,比如:100,102

    示例代码

    key value
    video_ids 2000

    返回结果

    参数 类型 说明
    err_code int 错误码
    err_msg string 日志唯一标识
    log_id string 日志唯一标识
    data map 数据字段,其中包括key:lists,lists字段数据结构如下
    +lists array 数据字段,其中包括id、status、video_url
    ++id string 视频id
    ++status string 视频生产状态,1:合成成功,2:合成中,3:合成失败
    ++video_url string 视频合成成功后url地址

    返回示例

    {
       "log_id": "3399467065",
        "err_code": 0,
        "err_msg": "success",
        "data": {
            "lists": [
                {
                    "id": 601,
                    "status": 3, //合成失败
                    "video_url": ""
                },
                {
                    "id": 602,
                    "status": 2,  //合成中
                    "video_url": ""
                },
                {
                    "id": 603,
                    "status": 1,  //成功
                    "video_url": "https://ar-fm.cdn.bcebos.com/ar/sta_server/video/1609826299877952531video_new.mp4"
                }
            ]
        }
    }
    上一篇
    虚拟主播视频生产-拟真版(邀测)
    下一篇
    高清人像美化(邀测)