当前位置: 首页 > news >正文

免部署的数字人 API 调用教程:基于 wav2lip模型训练的开放API,附 PHP 代码示例

前言

去年我开始研究数字人模型算法,测试了市面上几乎所有开源数字人模型,过程中踩了不少坑。最大的痛点就是训练太烧显卡了,光租显卡的费用就花了我6个月的薪资,每次看到账单都心疼。不过现在终于把基于wav2lip的数字人API做出来了,而且不需要自己部署,直接对接就行!

API服务平台优势

之前试运营的时候需要28张显卡,晚上闲置很浪费。现在用了弹性部署方案,平均在线10张卡就能支撑并发量,高峰期也稳定,成本大大降低了。

注册壹定开放平台

操作步骤

  1. 打开官方地址:壹定开放平台
  2. 点击控制台,进入登录页面,点击"免费注册用户"
  3. 注册并登录后,进入开放平台首页

开通服务与创建密钥

具体流程

  1. 在左侧菜单找到"API服务"栏目,点击"应用"
  2. 开通"数字人"应用和API服务
  3. 继续在左侧菜单找到"密钥"选项,点击"创建密钥"
  4. 填写名称,勾选已开通的"数字人"和"API服务"
  5. 过期时间和点数限制可以不填,提交后生成专属密钥

数字人生成流程解析

数字人生成主要分为两大部分:

  • 第一部分:克隆语音并合成音频
  • 第二部分:克隆分身形象,然后用形象和音频合成数字人视频

不管是文本驱动还是语音驱动,核心都是先处理音频。

语音克隆接口调用

接口说明

  • 接口地址:/app/human/human/Voice/clone
  • 请求方式:POST
  • 免费接口,对质量要求不高可以直接用

PHP代码示例

public function cloneVoice() {$client = new Client();$response = $client->post(BASE_URL . '/app/human/human/Voice/clone', ['json' => ['name' => '你的声音名称','audio_url' => 'https://示例音频地址.mp3','description' => '声音描述'],'headers' => ['Authorization' => 'Bearer ' . YIDEVS_KEY,'Accept' => 'application/json','Content-Type' => 'application/json']]);$response = json_decode($response->getBody()->getContents(), true);if ($response['code'] == 200 && $response['data']['task_id']) {// 保存task_id和voice_id} else {// 处理错误}dd($response);
}

返回结果

成功后会返回类似这样的数据:

array('code' => 200,'msg' => 'success','data' => array('voice_id' => '生成的voice_id','task_id' => '任务ID')
)

音频合成接口调用

接口说明

  • 接口地址:/app/human/human/Voice/created
  • 请求方式:POST
  • 用克隆好的声音ID合成音频

PHP代码示例

public function generateVoice() {$client = new Client();$response = $client->post(BASE_URL . '/app/human/human/Voice/created', ['json' => ['text' => '你想合成的文字内容','voice_id' => '之前生成的voice_id'],'headers' => ['Authorization' => 'Bearer ' . YIDEVS_KEY,'Accept' => 'application/json','Content-Type' => 'application/json']]);$response = json_decode($response->getBody()->getContents(), true);if ($response['code'] == 200 && $response['data']['audio_url']) {// 获取音频地址} else {// 处理错误}dd($response);
}

返回结果

成功后会返回音频地址和Base64编码的音频文件:

array('code' => 200,'msg' => 'success','data' => array('audio_url' => 'https://生成的音频地址.mp3','audio_base64' => 'base64编码内容')
)

数字人形象克隆

接口说明

  • 接口地址:/app/human/human/Scene/created
  • 请求方式:POST
  • 需要提供一个视频作为形象基础

PHP代码示例

public function cloneHuman() {$client = new Client();$response = $client->post(BASE_URL . '/app/human/human/Scene/created', ['json' => ['callback_url' => '你的回调地址','video_name' => '数字人名称','video_url' => 'https://基础视频地址.mp4'],'headers' => ['Authorization' => 'Bearer ' . YIDEVS_KEY,'Accept' => 'application/json','Content-Type' => 'application/json']]);$response = json_decode($response->getBody()->getContents(), true);if ($response['code'] == 200) {// 保存scene_task_id} else {// 处理错误}dd($response);
}

返回结果

成功后会返回场景任务ID:

array('code' => 200,'msg' => 'success','data' => array('scene_task_id' => '场景任务ID')
)

数字人视频合成

接口说明

  • 有免费接口和付费接口可选
    • 免费接口:/app/human/human/Index/created
    • 付费接口:/app/human/human/Musetalk/create,1积分/秒
  • 用克隆好的形象和音频合成视频

PHP代码示例

public function generate() {$client = new Client();$response = $client->post(BASE_URL . '/app/human/human/Musetalk/create', ['json' => ['callback_url' => '你的回调地址','scene_task_id' => '之前生成的scene_task_id','audio_url' => '合成的音频地址.mp3'],'headers' => ['Authorization' => 'Bearer ' . YIDEVS_KEY,'Accept' => 'application/json','Content-Type' => 'application/json']]);$response = json_decode($response->getBody()->getContents(), true);if ($response['code'] == 200) {// 保存video_task_id} else {// 处理错误}dd($response);
}

返回结果

成功后会返回视频任务ID:

array('code' => 200,'msg' => 'success','data' => array('video_task_id' => '视频任务ID')
)

任务查询接口

接口说明

  • 接口地址:/app/human/human/Musetalk/task
  • 请求方式:GET
  • 注意不要频繁请求,否则会被拉黑

PHP代码示例

public function task() {$client = new Client();$response = $client->get(BASE_URL . '/app/human/human/Musetalk/task', ['json' => ['task_id' => '要查询的任务ID'],'headers' => ['Authorization' => 'Bearer ' . YIDEVS_KEY,'Accept' => 'application/json','Content-Type' => 'application/json']]);$response = json_decode($response->getBody()->getContents(), true);if ($response['code'] == 200) {// 处理查询结果} else {// 处理错误}dd($response);
}

返回结果

成功后会返回视频地址等信息,注意地址有效期24小时:

array('code' => 200,'msg' => 'success','data' => array('scene_task_id' => '场景任务ID','videoUrl' => '生成的视频地址.mp4','coverUrl' => '封面地址.jpg','tips' => '视频地址有效期24H,请及时下载','state' => '状态码')
)

回调地址处理

  • 回调地址需要是可访问的,支持POST方式
  • 建议在回调方法中用日志记录详细参数,方便调试
  • 示例回调处理代码:
public function notify() {file_put_contents('notify.txt', json_encode($_POST));
}

结语

整个数字人API调用流程就是这样啦,从语音克隆到视频合成,步骤虽然多但很清晰。如果你用免费语音接口+免费数字人合成接口,基本就是零成本使用。

在壹定开放平台还有很多其他有意思的接口服务,大家在调用过程中有什么问题或者好的建议,都可以反馈。如果需要完整的PHP示例代码,或者调用有问题,欢迎交流~

相关文章:

  • 大模型与人工智能
  • React Vue 编译/运行流程
  • 11. 线性表的顺序表示和实现(3)
  • 新闻类鸿蒙应用全链路测试实践:性能、兼容性与体验的深度优化
  • 【多模态/T5】[特殊字符] 为什么视频生成模型还在用T5?聊聊模型选择的学问
  • 中兴B860AV1.1江苏移动-自动降级包
  • Spring MVC完全指南 - 从入门到精通
  • 电路板的 “双面绣”:猎板双色油墨如何重塑电子制造新范式
  • 线 性 数 据 结 构 双 雄:栈 与 队 列 的 原 理、实 现 与 应 用
  • HDFS 异构存储及存储策略
  • 《Linux C编程实战》笔记番外:如何避免子进程成为僵尸进程
  • 每日Prompt:人像写真
  • uni-app bitmap.load() 返回 code=-100
  • xilinx的gt的ALIGN_COMMA_WORD设置的作用
  • 鸿蒙新闻应用全链路优化实践:从内核重构到体验革新
  • 实时获取印度国家股票数据 API 实操
  • Explore Image Deblurring via Encoded Blur Kernel Space论文阅读
  • AIStor 的模型上下文协议 (MCP) 服务器: 工作原理
  • [Git] 配置 Git
  • 3D IC(立体集成电路)的生态机会
  • win8 metro风格网站后台管理模板/外贸网站推广优化
  • 建筑招工哪个平台靠谱/开封搜索引擎优化
  • 实验设计方案怎么写模板/网站seo设计方案案例
  • 找潍坊做网站的/2021时事政治热点50条
  • 商务网站模板下载/千博企业网站管理系统
  • 甘肃建设项目审批权限网站/今日新闻最新头条10条内容