免部署的数字人 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示例代码,或者调用有问题,欢迎交流~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/83305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣HOT100之贪心算法:45. 跳跃游戏 II

这道题刷代码随想录的时候也刷过,本来以为有了上一题55.跳跃游戏的基础,这道题会好做一点,但是依旧想不出来思路,回去看了下自己当时写的博客,没想到今天的感受和当时的感受都一模一样。。。What can I say?看了下代码…

使用Docker申请Let‘s Encrypt证书

1、安装Docker # 安装Docker https://docs.docker.com/get-docker/# 安装Docker Compose https://docs.docker.com/compose/install/# CentOS安装Docker https://mp.weixin.qq.com/s/nHNPbCmdQs3E5x1QBP-ueA 2、申请Lets Encrypt证书 详见: https://docs.linuxse…

算法题(167):FBI树

审题: 本题需要我们将字符串按照题目要求进行递归展开,并按照后序遍历的顺序输出 思路: 方法一:递归 首先我们需要模拟一下题目的意思 其实就是第一步判断属于什么字符,然后将字符串分两半进行下一轮判断。而由于题目要…

从“分散开发”到“智能协同” —— Gitee 如何赋能河南农担构建金融级研发体系?

河南省农业信贷担保有限责任公司(以下简称「河南农担」)成立于 2016 年,是河南省属骨干国有企业,承担破解“三农”融资难题的重要职责。截至 2024 年底,河南农担累计实现担保规模 1037.05 亿元,位居全国农担…

青少年编程与数学 01-011 系统软件简介 14 Foxpro数据库

青少年编程与数学 01-011 系统软件简介 14 Foxpro数据库 一、历史沿革二、技术架构三、主要功能四、应用场景五、产品版本六、使用方法七、技术价值八、历史意义全文总结 **摘要:**FoxPro 是一款经典的桌面数据库管理系统,起源于 1984 年的 FoxBASE&…

android studio向左向右滑动页面

本文演示了Android Studio中使用ViewPager实现页面切换的方法。通过创建包含3个页面的ViewPager示例,详细展示了实现步骤:1)在XML布局中配置ViewPager和切换按钮;2)使用LayoutInflater动态加载页面布局;3)自定义SimplePagerAdapte…

数据可视化新姿势:Altair的声明式魔法

文章目录 一、告别编程式绘图的苦日子二、5分钟极速入门安装篇(记得先备好虚拟环境!)核心三剑客 三、高阶玩法揭秘1. 交互功能秒实现2. 复合图表so easy3. 魔改样式有套路 四、避坑指南(血泪经验)五、Altair vs 其他库…

PostgreSQL --数据库操作

一、基本操作 1、登录 #切换pg用户 su - postgres#重启服务 pg_ctl -D /usr/local/pgsql/data -l logfile restart#进入pg psql2、数据库操作 2.1、列出库 \l\lselect datname from database; \l:输出比\l多了Size,Tablespace 和 Description 列 :扩展输…

树莓派超全系列教程文档--(63)rpicam-apps可用选项介绍之常用选项

rpicam-apps可用选项介绍之常用选项 rpicam-apps 选项参考常用选项helpversionlist-camerascameraconfigtimeoutpreviewfullscreenqt-previewnopreviewinfo-textwidth 和 heightviewfinder-width 和 viewfinder-heightmode打包格式详细信息解压格式详细信息 viewfinder-modelor…

AI的发展过程:深度学习中的自然语言处理(NLP);大语言模型(LLM)详解;Transformer 模型结构详解;大模型三要素:T-P-G 原则

AI的发展过程:深度学习中的自然语言处理(NLP);大语言模型(LLM)详解;Transformer 模型结构详解;大模型三要素:T-P-G 原则 AI的发展过程与大模型原理详解一、AI的发展过程符…

SDXL 和 SDXL-Turbo 的区别

(1) SDXL(Stable Diffusion XL) 标准扩散模型,基于传统的多步去噪(通常 20~50 步)。 训练充分,特征更稳定,适合用于特征提取、方向学习(如 LoRA、SAE)。 计算成本高&am…

PyTorch:让深度学习像搭积木一样简单!!!

文章目录 🚀 一、 PyTorch的王炸:动态图 vs 静态图静态图的“痛苦回忆”(前方高能吐槽!)PyTorch动态图的降维打击🔥 🔥 二、 不只是灵活!PyTorch的三大杀器1. 张量(Tenso…

LeetCode--27.移除元素

解题思路: 1.获取信息: 给定一个数组和一个值,删除数组中等于这个值的值 要求是,返回数组中不等于这个值的数的数目 并且要求在数组上删除,不能使用额外辅助空间 还是给了评测标准(你可以根据它的原理来实现…

WebRTC(二):工作机制

核心组成 GetUserMedia:获取本地音视频设备(摄像头、麦克风)数据流。RTCPeerConnection:实现点对点的媒体流传输和网络连接管理。RTCDataChannel:点对点的任意数据通道(除音视频外传输数据)。 …

机器学习+城市规划第十五期:时空地理加权回归(STGWR)

机器学习城市规划第十五期:时空地理加权回归(STGWR) 引言 随着城市化进程的加速,城市规划面临越来越多复杂的挑战。在传统的城市规划中,通常会考虑到地理位置的影响,但往往忽略了时间维度。而在现代城市的…

用虚拟机安装macos系统之后进入Boot Manager页面

安装教程:在VMware中安装macos系统教程 在VMware中安装macos系统时启动后进入Boot Manager界面,通常是由于虚拟机的固件类型设置于镜像不兼容所致。 解决办法:虚拟机默认使用UEFI启动模式,但是部分macos镜像需要切换到BIOS模式才…

基于API的Redis缓存实现

1.使用Redis API 进行业务数据缓存管理 编写一个进行业务处理的类ApiCommentService,使用Autowired注解注入Redis API中常用的RedisTemplate(类似于Java基础API中的JdbcTemplate); 然后在数据查询、修改和删除三个方法中,根据业…

前沿论文汇总(机器学习/深度学习/大模型/搜广推/自然语言处理)

文章目录 1 前言2 大模型/自然语言处理2.1 FreeAL:在大模型时代实现无需人工的主动学习2.2 COLD:中文攻击性语言检测基准2.3 将词汇的对比信息融入词嵌入以实现反义词-同义词区分2.4 LogRAG:基于检索增强生成的半监督日志异常检测2.5 RankRAG…

PP-OCRv5 ubuntu20.04 OCR识别服务

目录 说明 使用 效果 下载 说明 PP-OCRv5 ubuntu20.04 OCR识别服务 使用 1、下载后解压 2、进入目录、运行程序 效果 1、浏览器访问 2、接口调用 下载 方式1 源码下载 方式2 通过网盘分享的文件:lw.PP_OCRService.tar.gz 链接: https://pan.baidu.com…

VScode打开后一直显示正在重新激活终端 问题的解决方法

一、问题 本人打开“.py”文件后,同时会出现以下两个问题。 1、VScode一直循环在”正在重新激活终端“ 2、日志显示intellicode报错: Sorry, something went wrong activating IntelliCode support for Python. Please check the “Python” and “VS I…