口播数字人免费API调用方案
想要开发数字人,对于普通人来说,技术上是不可跨越的鸿沟
市面上也有很多数字人开发方案,如腾讯云、阿里云、百度云等,都有成熟的数字人方案,但是,价格方面还是比较高昂的
github上虽然也有一些所谓开源的数字人项目,但是基本上都是挂羊头卖狗肉,并非真正的开源
最近,我在对接小甲鱼数字人,只需要调用一下http接口,就可以轻松地实现数字人开发,下面是一些开发方面的流程
整个开发过程,我是用的免费的开发方案(免费的数字人克隆+合成)+(免费的语音克隆+语音合成),这样就能实现所有接口都是免费。
下面这些是所用到的接口
具体步骤如下:
第一步:
调用声音相关接口(涵盖免费的语音克隆与语音合成),即可完成声音的克隆与合成。
第二步:
依据官方文档,通过免费接口(数字人克隆与合成)可实现数字人的克隆,最终会返回一个video_task_id。
随后,通过调用通用接口(任务查询 - 通用)即可获取对应的视频链接。虽然该链接有效期仅为24小时,但对于数字人这类即时服务而言,已足够使用。当然,如有需要,也可自行下载并保存,不过通常并无此必要。
整个调用过程均采用最基础的http请求,对程序员而言几乎无门槛。同时,该服务无平台限制,无论是Android、iOS、小程序还是web端,均可正常使用。只需按照官方文档正确传参即可。
下面是我用java写的一个简单的调用示例,其他接口也是同样的调用思路,可以参考
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;public class YiDevsApiClient {public static void main(String[] args) {// API配置信息String apiUrl = "https://api.yidevs.com/app/human/human/Index/created";String token = "Bearer your_token_here"; // 替换为你的实际Token// 请求参数String callbackUrl = "https://baidu.com";String sceneTaskId = "1208";String audioUrl = "https://baidu.mp3";// 构建JSON请求体String requestBody = String.format("{\"callback_url\":\"%s\",\"scene_task_id\":\"%s\",\"audio_url\":\"%s\"}",callbackUrl, sceneTaskId, audioUrl);try {// 创建URL对象URL url = new URL(apiUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置请求方法connection.setRequestMethod("POST");// 设置请求头connection.setRequestProperty("Authorization", token);connection.setRequestProperty("Accept", "application/json");connection.setRequestProperty("Content-Type", "application/json");// 启用输出流connection.setDoOutput(true);// 发送请求体try (OutputStream os = connection.getOutputStream()) {byte[] input = requestBody.getBytes(StandardCharsets.UTF_8);os.write(input, 0, input.length);}// 获取响应码int responseCode = connection.getResponseCode();System.out.println("Response Code: " + responseCode);// 读取响应内容(这里简化了,实际应该读取输入流)if (responseCode == HttpURLConnection.HTTP_OK) {System.out.println("Request successful");// 实际应用中应该解析返回的JSON数据// 这里只是示例,实际返回数据见题目描述} else {System.out.println("Request failed");}// 关闭连接connection.disconnect();} catch (Exception e) {e.printStackTrace();}}
}