作者 | 薄志浩
导读:本文介绍了在数字人 AI 技术倒退迅猛,整体 AI 数字人市场出现高速增长的趋势下,与强调高实时性互动的直播业务场景的联合与利用,通过数字人渲染技术、弱小的 AI 全栈能力、算力为虚构主播赋能,在面部表情、肢体动作、问答对话以及情绪反馈等交互成果上都达到了非常活泼拟人的成果,同时联合智能剧本的驱动技术,更是在电商代班场景下实现了 7 ×24 小时虚构主播不间断带货直播的能力,产生了真人主播无奈达成的价值和成果。
全文 8740 字,预计浏览工夫 22 分钟。
01 背景
2022 年开年以来,数字人简直成为 AI 第一热门赛道,在诸多利用场景大放荣耀。IDC 公布《中国 AI 数字人市场现状与机会剖析,2022》报告。报告显示:中国 AI 数字人市场规模出现高速增长趋势,到 2026 年中国 AI 数字人市场规模将达到 102.4 亿元人民币。目前市场上数字人品种繁多,有泛娱乐型数字人 / 企业级服务数字人,如浦发银行的智能数字人客服,以及百度智能云曦灵打造的 AI 手语主播,曾经为 2700 万听障用户提供直播及赛事的手语服务;还有中之人 / 真人驱动的演艺型数字人,如其中几个突出的是百度云的希加加,快手的关小芳等等,数字人在一些畛域曾经施展出显著的商业价值,尤其是音视频的实时直播场景,在这个背景下,基于目前的直播带货平台,利用数字人技术将会发明更多的产品和商业价值。
02 业务
百度电商直播平台是继承主播开播、带货、商品解说、直播散发、下单购买的综合平台,依靠百度流量池,基于泛滥百家号创作者和 UGC 主播通过线上直播丰盛的内容模式,给用户提供更个性化、更活泼、更高效的生产体验。与数字人的联合次要是基于代班主播的产品状态,提供虚构数字人主播直播带货的能力:
△高精数字人:BoBo
在直播层面,同真人主播相比,数字人可实现 24 小时全程直播,且可控性强、形象稳固,能无效防止人设“塌房”,能够作为品牌后行试水元宇宙的切入口和纽带。
7 月 19 日,百度 APP AI 摸索官度晓晓携手龚俊数字人举办了一场:数字人脱口秀直播,并将带货内容拓展至元宇宙。百度此次用数字人脱口秀关上直播带货,就是 Web3 时代下摸索数字人可能性的创意尝试,为直播带货带来了新鲜感。直播平台还内置了丰盛精美直播间场景,从演播厅到舞台,可按需匹配,一键解决搭建直播场景投入大、质感不高的难题;不仅如此,便捷的开播平台编辑器可预设直播模版,任意组合脚本、商品、才艺,升高直播的筹备门槛。对于商家而言,领有一个稳固、高效、可控的数字人主播,和不受工夫空间限度的直播间,大幅升高企业经营老本,是性价比之选。
03 整体架构
3.1 功能模块构造
整体功能模块分为三层:
数字人资产:次要包含数字人形象的生成、资产治理、个性化捏脸能力;数字人声音零碎(包含语音合成(多音色反对)语调语速等能力配置,以及唇动服务);数字人动作零碎(指令触发的各种身材、手势、面部的动作);
直播互动:反对数字人直播间内的性能和音视频等互动能力,反对 B 端的剧本编排,直播间内玩法性能互动,主播 AI 智能对话问答,以及中之人、真人接管能力;
流媒体管制:将渲染的音视频数据进行编码推流,以及通过导播台对音视频做一些插入批改等丰盛的性能,如混画合流、字幕插入等能力。
3.2 概要流程设计
剧本零碎
剧本零碎反对 B 端主播配置本人的代班主播剧本,即直播间内一系列有序的工作编排和互动成果配置;数字人驱动服务为剧本编排服务提供了队列配置和运行调度的能力撑持,剧本编排服务通过该能力可能灵便组织数字人直播间须要执行的内容。
基于此,剧本零碎服务反对了素材库配置:
1、商品:挂接商品、商品转场等;
2、营销流动:抽奖、优惠券、红包雨等;
3、互动邀请:邀请用户点赞、关注、分享等;
4、为谈话、动作、表情、切换背景、插入图片视频、位移、缩放等。
另外编排上能够反对:
1、创立编辑剧本根本信息;
2、编排剧本:能够通过选取素材库中的各种素材,组合生成剧本。
实时交互:除了既定剧本程序执行以外,数字人主播还会对用户进行实时的交互,以达到更实在拟人的成果;实时交互的解决分为以下两类:
- 用户行为反馈:反对对用户的点赞、分享、关注、加粉丝团等等用户行为做出反馈,使数字人主播可能与用户行为可能造成互动,晋升直播间体验;
- 智能问答:反对依据肯定的策略回复直播间内观众的音讯,该问答性能通过接入百度大脑,提供弱小的智能问答能力,使数字人主播更懂用户;
- 联合 AI 能力,主播还会有一些情景的交互插入,如直播间长时间冷清,主播会不快乐等等。
并且工作编排零碎能够智能的依据数字人实时的渲染状态,抉择最合适的打断理论插入对应的互动,且不影响后续剧本进行,达到和实在主播最靠近的成果。
数字人音频服务 会整合泛滥 AI 能力,其中包含通过 TTS 语音合成,生成反对多种可定制的音色的音频数据;通过 VTA 服务,生成与对应模型适配的唇动渲染数据;基于百度 unit 进行对话配置以及用意模型训练,反对和主播发问,闲聊等智能问答性能
驱动服务 依据剧本工作下发动作渲染指令和直播间信号指令,以及数字人音频服务下发的每一帧音频和唇动数据,整合下发到云渲染服务的会话核心;会话核心负责与上游(直播业务)、上游(渲染引擎)、其余模块(导播台)等建连,维持心跳,收敛会话服务;收集包装驱动数据下发给云渲染服务:
云渲染服务 通过承受会话核心的数据,包含各种动作指令,各种部位骨骼 bs 驱动数据来实时渲染数字人模型(渲染引擎包含自研、UE4、unity3D 等),同步生成视频流数据,返回到 BRTC 服务模块进行编码推流到 LSS,LSS 云导播台依靠百度智能云的音视频直播、媒体、AI 等技术,反对弱小的直播实时编辑能力,如数字人直播的一些视频混画,背景合成,字幕插入等性能;编辑之后进而推流通过 CDN 的边缘节点,最终到直播源站。
△直播间内画面多层混合
04 技术实现详述
4.1 服务端架构
渲染引擎运行环境
- DKE 是一个疾速、灵便、按需定制的 Kubernetes 部署引擎,基于 DKE 部署的 K8S 之上,运行着天牛平台以及数字人渲染引擎零碎;
- 天牛平台是为私有化交付所打造的容器治理平台,目前 ACG 交付业务应用的数字人渲染引擎零碎就是通过天牛进行私有化交付使用的;
- 显卡:人像渲染服务依赖于显卡。
渲染引擎服务依赖
- 根底软件:MySQL、ZK 等,能够应用天牛数字人安装包内自带的,也可通过配置应用自定义的服务;
- AI 能力:1)虚构形象生成技术:反对低成本,照片疾速生成形象(PTA),反对捏脸零碎,多维度自定义编辑形象。2)面部及动作捕获技术:通过捕获脸部表情与肢体动作,让真人实时驱动虚构形象。3)语音技术:如语音辨认(ASR)、智能问答对话(百度 UNIT)、语音合成(TTS)等,帮忙搭建智能语音对话零碎,反对用户与虚构形象轻松对话。
数字人渲染引擎
基于 ACG- 云渲染计划
- 提供 websocket 服务接口,用于接管数字人驱动服务发送过去的指令,通过调用 AI 能力进行语音了解、对话生成、合成语音等,调用基于渲染引擎的人像渲染服务生成人像视频,最终通过流媒体服务进行推流。
- 反对真人托管,应用真人托管平台可能通过应用摄像头或动作捕获设施进行人像动作采集并转化生成数字人音视频画面。
- 提供业务配置平台和相干 api 进行数字人人像治理。
基于 AR- 端云一体渲染计划
- 全自研渲染引擎反对数字人渲染所需的多项高性能渲染算法,包含仿真光线次外表散射属性的皮肤渲染材质、仿真各向异性个性的头发渲染材质以及眼睛渲染材质。
- 反对终端 + 云端部署运行,在终端最低占用 5M 客户端包体积,性能比照商业引擎更加优良;在云端对接流媒体服务进行推流,能够满足直播、视频生产业务需要,反对在网页端或者超低端设施运行。全方面笼罩终端设备,大量参数同步即可对齐端云渲染需要。
数字人驱动服务
用于驱动数字人渲染引擎执行相应的指令,对业务屏蔽了和数字人渲染引擎交互的简单逻辑,提供 http 接口给业务方接入,不便业务疾速接入数字人直播能力。本服务由架构组 server 团队开发保护,具体在“数字人驱动服务设计”中介绍。
剧本零碎
次要性能包含:
- 素材库:反对配置挂接商品及解说文案、营销流动即解说文案(抽奖、红包雨、优惠券)、场景话术素材(邀请分享、邀请点赞、邀请关注、剧本转场);
- 剧本编排:反对应用素材库中的素材来组合生成剧本;
- 实时互动:可能依据业务策略在剧本中的可打断地位插入主播发言等行为,比方感激关注点赞等等;
- 同步数字人驱动服务:将编排好的剧本以及实时互动队列通过接口同步给数字人驱动服务。
第三方业务服务
目前这一层只有直播电商,将来依据须要也能够接入征询,媒体、演艺秀场等其余业务。
4.2 数字人驱动服务
各模块概述
apiserver
对外提供 http 接口,解决业务方的剧本配置(人像抉择、背景设置、反复执行次数)、须要数字人执行的行为指令队列(包含:剧本队列、实时交互队列),数字人直播间状态管制等申请,在本架构也属于队列生产者。
队列
驱动服务保护两个先进先出队列,别离为:剧本队列、实时交互队列。
1、剧本队列
开播前事后编排好的队列,数字人直播间启动后,主节点会启动剧本队列生产,而后数字人依照事后编排好的内容执行,例如:开播中须要数字人演示的商品解说、抽奖、红包雨等,会提前同步到剧本队列中。
2、实时交互队列
开播中须要实时插入原先编排剧本的队列,以反对数字人给用户互动提供反馈,例如:数字人主播感激送礼关注等,能够通过实时交互队列实现。
worker
1、worker 从节点
未入选为主节点的节点,它只负责定时参加选举。
2、worker 主节点(master)**
入选为主节点的节点,作为消费者,生产生产者产生的队列,次要反对:
- 对开播中的直播间和数字人渲染引擎保护长连贯会话;
- 执行数字人直播间开关播调度、剧本调度、剧本队列调度、实时互动队列调度;
- 将队列指令转化成数字人渲染引擎可执行的 DRML 指令,并发送给渲染引擎。(DRML 是⼀种以 SSML 为根底的标记语⾔,SSML(Speech Synthesis Markup Language)是语⾳合成零碎中的标记语言,它以 XML 为根底,提供了⼀套规范⽅法来精密调整语⾳输入。DRML 涵盖了 SSML 中对语⾳输入的管制⽅法,另外还定义了对数字⼈的动作管制、动作与语⾳的交融⽅式,以及在屏幕上引⼊其余视觉元素的⽅法。
主从选举
1、初始状态
同一个集群中每个 worker 实例都有一个取值统一的 env 环境变量,作为所在集群分布式锁标识。此时还未产生 master 节点,集群分布式锁还是处于开释状态。
2、进行选举
初始状态下,集群内所有失常运行中的实例会定时通过 redis 的 setnx 指令抢占集群分布式锁进行选举。
3、成为主节点
抢到锁的则成为 master 主节点,入选为主节点后,会定时执行心跳,给抢到的锁进行续期,主节点会保护与数字人渲染引擎的长连贯、执行队列生产、直播间自动开关播。
4、成为从节点
未抢到锁的则仍旧持续负责 worker 节点,会定时进行选举,除此之外没有其余操作。
5、主节点异样
主节点异样,则会没有心跳,此时,变成初始状态、进行选举,集群中其余某个 worker 节点抢到锁之后会成为主节点。
队列生产
整体依附各层级的调度实现,层级关系如下图,以下各层级的调度均应用 golang 的 channel 以生产者消费者模型实现。
直播间调度
- 存在直播间启动监听器,以协程模式定时主动执行,它会从数据库中加载以后数字人直播间状态为已启动(room\_stauts=1)的直播间,并将加载的直播间通过 channel 信号的形式发送给直播间消费者管理器;
- 直播间消费者管理器通过监听 channel 接管直播间启动监听器发来的直播间,并为每个直播间启动一个 Consumer 协程;
- 为防止每个直播间被反复调度,master 外部保护了一个直播间消费者注册核心,用于保障一个直播间不会被 master 反复调度。
剧本调度
一个直播间能够关联多个剧本,多个剧本能够按程序编排,每个剧本能够执行 1 次或屡次。
1、剧本调度的三种状况
被调度的剧本分以下三种状况:
1. 按反复执行次数逐次调度的剧本;
2. 按编排程序一一调度的剧本;
3.master 异样退出生产,复原后继续执行上次中断的剧本。
2、调度流程
- consumer 查找以后待执行的剧本:
- 没有待执行的剧本,则筹备退出队列生产(期待实时队列生产完);
- 查找失败则退出 consumer,期待下次被直播间调度过程从新调度;
- 查找到则筹备启动队列调度,即进入流程 2。
- 为以后直播间建设与数字人渲染引擎的长连贯,并初始化长连贯会话;
- 更新直播间剧本执行偏移量(记录以后直播间进入以后剧本);
- 启动协程并行执行“剧本队列调度”流程、以及“交互队列调度”流程;
- 以后剧本队列调度执行结束,返回流程 1。
剧本队列调度
队列中的指令程序通过 seq_no 指定,会被依照从小到大的程序顺次执行,每次调度依照如下流程:
- 每次获取队列中的下一个 seq_no,并获取该 seq_no 对应的参数;
- 更新以后剧本队列执行点为以后 seq_no,并设置执行点状态为已启动
- 解析 seq_no 的指令参数,生成数字人渲染引擎的 DRML 指令;
- 生成 ReuqestId(本次申请的惟一标识)通过先前创立的长连贯会话,应用渲染引擎的 TEXT_RENDER 能力往渲染引擎发送 DRML 指令;
- 接管长连贯返回该 ReuqestId 的后果,一次 TEXT_RENDER 指令长连贯会依据渲染过程做屡次响应,如图:
其中:如果 drml 指令渲染失败,3 会返回 RENDER\_ERROR;
- 期待长连贯返回后果为渲染实现或失败、期待超时,则完结期待;
- 更新队列执行点状态为已执行,示意一个 seq\_no 行实现,回到流程 1;
- 若队列内没有未生产条目了,则开始查看交互队列是否有未生产条目,如果还有则持续期待交互队列生产实现,没有则告诉交互队列进行调度,并退出本身剧本队列调度。
交互队列调度
交互队列调度和剧本队列调度并行启动执行,执行流程如下:
- 交互队列调度每隔 500ms 依据以后记录的 auto\_seq\_no(执行偏移量)查问一次数据库内的交互队列是否有下一条待执行的 auto\_seq\_no,如果未找到则反复执行流程 1;
- 更新以后剧本队列执行点为以后 auto\_seq\_no,并设置执行点状态为已启动;
- 解析生成该 auto\_seq\_no 对应的 DRML 指令;
- 往数字人渲染引擎长连贯会话中发送 DRML 指令(交互队列调度和剧本调度共享同一个长连贯会话,通过即时发送指令到会话,联合剧本队列执行的 DRML 的可打断点,产生在剧本演示中插入实时交互行为的成果);
- 接管长连贯返回该 ReuqestId 的后果;
- 期待长连贯返回后果为渲染实现或失败、期待超时,则完结期待;
- 更新队列执行点状态为已执行,即一个 auto\_seq\_no 执行实现,回到流程 1
- 同时交互队列调度器会监听剧本队列调度器发来的退出信号,一旦收到信号,则退出交互队列调度,不再持续轮询。
多直播间长连贯保护
1、长连贯初始化
- 连贯数字人渲染引擎 websocket;
- 基于 websocket 创立会话;
- 以数字人渲染引擎 appid 为惟一标识,保留长连贯句柄到全局 map 中,以备后续申请 ws 时应用;
- 启动心跳协程;
- 启动长连贯响应监听散发协程。
2、长连贯心跳
长连贯在初始化的同时,master 会启动一个协程,该协程每隔 3s 向数字人渲染引擎发送心跳。如果数字人渲染引擎如果 30s 内没有检测到心跳,会主动开释资源。
3、长连贯申请
- 往长连贯响应散发协程中注册一个 channel,用来筹备接管以后申请的 RequestId 的响应后果;
- 往长连贯写入申请参数。
4、长连贯响 应
- 长连贯响应散发协程,会对立监听和解析长连贯返回的后果,将返回的 RequestId 写入对应的 channel 中;
- 通过期待该 RequestId 的 channel 信号,达到接管申请的响应后果目标。
5、长连贯故障转移
这一点在“容灾 – 数字人渲染引擎异样”中形容。
6、多主节点反对
在须要多主节点的场景中,例如:划分预览机和线上,或者须要减少集群解决能力的状况下,能够通过给实例设置不同的 env,来达到划分出多集群多主节点的目标,不同集群之间互不影响,原理是:
- apiserver 在注册数字人直播间时,会依据将集群 env 环境变量写入数字人直播间信息表中;
- worker 从节点会依据 env 变量来获取主节点锁,多个 env 变量即可产生出多个 master 节点;
- master 在进行数字人直播间调度时,会依据以后集群 env 来筛选获得对应的数字人直播间,即 master 只调度和本人 env 标识统一的直播间。
开关播
1、开播
在百家号平台开播数字人须要先创立预约直播间,预约创立实现后,反对以下两种形式启动数字人直播间:
(1)主动开播
master 到点主动启动数字人推流并开播,具体如下:
- 业务侧通过调用注册数字人直播间接口注册数字人直播间;
- master 会自动检测行将达到预约开播工夫的直播间,将须要开播的数字人直播间状态改为已启动;
- master 随即开始进行直播间调度等流程,即开始推流;
- master 调用百家号开播接口开播。
(2)手动开播
数字人驱动服务提供了手动启动数字人直播间的能力,当须要在指定工夫之前提前开播,可通过如下形式手动开播:
- 调用 apiserver 的注册数字人直播间接口增加数字人直播间;
- 调用启动数字人直播间接口(room/start),数字人直播间状态批改为已启动(room\_status=1);
- master 即开始直播间调度等流程;
- 生产队列开始即推流开始,随后在百家号平台即可开播。
2、关播
(1)主动关播
master 在所有队列执行结束后,会进行数字人直播间推流,具体如下:
- master 会在每个数字人直播间所有剧本队列生产实现后,期待直至实时队列生产结束,退出队列消费者;
- 调用百家号关播接口;
- 并更新数字人直播间状态为已完结(room\_status=-1)。
(2)手动关播
如须要手动进行数字人推流:
- 百家号平台先失常关播;
- master 会轮询以后正在生产中的所有数字人直播间的直播 meta 最新状态,如果为已关播则批改 room\_status 为 -1
- 如果检测到生产中的数字人直播间的 room\_status 为 -1,则会向对应的直播间队列消费者协程发送信号,该直播间消费者协程收到信号就退出生产。
容灾
以下列出了各种异常情况,及其对应的解决策略
1、数字人渲染引擎异样
(1)渲染引擎服务多实例部署
部署多套渲染引擎实例,应用同一套 mysql 数据库,使得多套渲染引擎的配置放弃同步,使同一个 appid、appkey,能够在不同实例上均可应用
(2)连贯渲染引擎故障转移
- 如果某一个渲染引擎实例长连贯无奈创立,master 内的长连贯会话管理器会主动做 2 次重试以及切换实例重试;
- 如果某一个渲染引擎实例长连贯能够创立,然而因为资源有余等起因无奈初始化会话,master 会退出以后直播间的队列调度,标记须要尝试应用下一个实例,并期待下一次被调度重试,被从新调度时,master 会主动选取预设的列表中的下一个实例。
2、数字人驱动主节点故障转移
- 主节点宕机或异样时,则主节点无奈给本人的任期续期,由此主节点锁会主动开释;
- 其余 worker 节点尔后抢到锁便主动成为主节点;
- 新的主节点开始解决主节点相干工作,故障主节点转移到新主节点会在 1s 实现。
3、数字人驱动主节点故障复原
(1)剧本调度异样复原
- 数字人直播间数据表会存储以后调度的剧本的 drama\_seq\_no(剧本调度序号),在该剧本失去调度的开始,master 就会将 drama\_seq\_no 记录到表中;
- 当 master 从宕机等异常情况中复原后,会读取 drama\_seq\_no,并持续调度该剧本。
(2)剧本队列调度异样复原
- 剧本队列调度在执行到每个队列条目开始时,会记录以后执行到的条目 seq\_no,并记录该 seq\_no 的执行状态为执行中;
- 剧本队列调度在执行到每个队列条目完结时,更新该 seq\_no 的执行状态为已执行;
- 当 master 从宕机等异常情况中复原后,会读取 seq\_no 及其执行状态,如果状态为执行中,示意该条目还未执行完 master 就挂了,须要从新执行该 seq\_no;如果为已执行,则继续执行下一个 seq\_no。
(3)实时交互队列调度异样复原
逻辑同剧本队列调度异样复原。
(4)故障现场复原
这里的“现场”指的是数字人在执行中的人像地位坐标、人像大小、直播间背景等信息,这些信息数字人驱动服务会在数字人 DRML 执行过程中进行保留。在数字人驱动服务在遇到异样复原时,如果不做现场复原,会造成异样复原前人像坐标、大小、背景等元素与预期不符的状况,因而,在异样复原时,数字人驱动服务会先读取保留的现场信息,并通过执行现场信息对应的 DRML 复原现场。
05 小结
本文具体的论述了基于数字人云渲染技术计划在直播业务架构中的利用,以及与泛滥 AI 能力的相结合,虚构主播在往年是热门 IP,强互动的直播场景无疑是数字人渲染的重点关注对象,后续渲染技术进一步欠缺和翻新,将数字人直播间更加拟人化、活泼、吸引眼球是咱们布局的方向,尽可能利用到更大更多的场景外面。
特别感谢:感激 AIG 加强事实技术团队与 ACG 智能云团队为云渲染服务共建提供技术支持。
————————END————————
举荐浏览:
百度工程师教你玩转设计模式(工厂模式)
超大模型工程化实际打磨,百度智能云公布云原生 AI 2.0 计划
前后端数据接口合作提效实际
前端的状态治理与工夫旅行:San 实际篇
百度 App 低端机优化 - 启动性能优化(概述篇)
面向大规模数据的云端治理,百度桑田存储产品解析
加强剖析在百度统计的实际