如何利用AI再次见到父亲(1) 1.在应用程序上实现它。
笔者调研了原生和跨终端的解决方案,以及控制成本的原因,选择了跨终端 Flutter 的实现。
主页开发
笔者使用Muke作为协同UI标注平台,在分析布局后,应采用布局方法:
脚手架页体全贴**,以宽度为瓦片,头像根据不规则位置采用堆叠布局,预设最多30个位置,随机显示底部栏,采用定位方式,弧形背景为**,按钮加有高架按钮, 详情如下(系列文章结束后,源码会开源,我会提前发给大家留言)。
收集代理页面
或者先分析版面,半个弹窗页面,底部可以发送文字,整体是一个对话信息页面。
半弹窗使用showmodalbottomsheet在底部弹出,给予一定程度的通透性,对话部分使用列+滚动容器,实现语音模块本身的原生TTS组件,关键细节如下:
实时通信页面
这是踩坑的开始,当初使用D-ID的时候,Demo是一个纯前端的解决方案,当时还以为都是标准的WebRTC,而且flutter本身也有支持WebRTC的标准组件,没有过多考虑最后的兼容性问题,实现后发现不同的Android版本和iOS版本在支持原生WebRTC,最后决定用H5页面代替对话,用结束+H5的方式解决兼容性问题,关键**如下:
其他零散的页面,难度不大,就不高亮了,以下是服务器的实现细节。
2.服务器端实现。
笔者对 J**A、GO 和 Rust 比较熟悉,但因为需要对接不同的模型和第三方 SDK,所以是 Python,而且 Python 服务端语言的成本较低,小规模优势更多。
语音TTS模块,采用ElevenLab,声音克隆能力与科大讯飞相比,Microsoft TTS、火山引擎语音包,对话交流模块效果更好,采用GPT4,多轮对话和角色扮演比对,GLM3文鑫一言通易千问,整体流程效果更好,首先是APP端的语音转文字, 通过 WebSocket 传输到后台,用 GPT4 助手回复,得到的文字通过 ElevenLab 转换为语音,最后调用 D-ID 用语音驱动**片的唇形(我有一种预感,后期过程会很长)关键**逻辑如下(注意一下, 然后打开它):
其中,GPT4 需要科学地连接到互联网,所以我们需要一个可以与 OpenAI 接口通信的服务器(Linux 版本的 Clash 没有突出显示,如果需要可以在评论区进行通信)。
至此,演示版的开发已经完成,下一步就是开始我们的内部投诉环节了。
在APP端、H5端、服务器端开发后,带着极大的成就感,我开始和朋友一起进行内部测试:
假朋友A:哥哥,说完,你怎么不1分钟回复。
假朋友B:+1
假朋友C:+1
我:哎呀,我想先把语音转换成文字,文字给gpt,gpt会回复我,我还要调整界面生成语音,我会通过语音驱动器说话。
假朋友D:啊,那,为什么这么慢?
假朋友 e: +1
假朋友 f: +1
假朋友n:哎呀,辣鸡,bug子太多了,你做不到,兄弟,果然产品不能参与研发。
我:。。 于是开始修复各种bug,优化各种优化。
最后,每次将通信响应缩短到 30 秒,可汗! 速度也非常慢,所以现在有两种方法,一种是继续优化,或者自己训练模型,或者使用MetaHuman超现实模型,另一种是从产品角度改变思维方式。
1.语音驱动嘴型的不同技术研究。
sadtalker:
1西安交通大学 2腾讯人工智能实验室 3蚂蚁集团 头像联合发布的一款模型,让头像说话,使用WebUI Colab进行白色卖淫后,发现还是比较慢的,如果质量不高,效果会更差。
w**2lip:
部署 colab 后,对 ** file 的支持更好,同时 GFPGAN 也可以修复不协调的口型,但 ** 支持是通用的,需要自己改造,而且项目更老实,有了 3080,4080 需要自己升级,并行逻辑也需要增强(看到有人在 B 站变身后效果还可以, 但不可能完全实时,一个500*500,大约1分钟**,大约20-30秒的延迟)。
videoretalking:
我个人觉得更像是sadtalker的升级版,支持固定位置的图像比较好,但是**说话,需要变换,同时分辨率要求更高,最后还是延迟的问题,1分钟**,4080最好效果是13秒。
最后我发现,只要图像效果与真人相关,就不是很好,于是我改变了研究思路,从游戏建模的角度来衡量自己是否能满足自己的要求。
MetaHuman:虚幻引擎发布的超写实数字人,可以驱动整个身体和空间。 不能重蹈D-ID的覆辙,一部iPhone 12(或更新机型)和一台台式电脑可以改造成一个完整的面部捕捉和动画解决方案,父亲去世时,他没有留下太多**和声音,面部表情和身体特征都是从**和声音中提取出来的,那就比较麻烦了,别人还得重新开始, 它对还活着的人更友好,可以作为替代方案,例如:将一个人的**,完成3D后,优化细节并导入MetaHuman模型。
nvidia omniverse audio2face:
官网介绍:生成式AI可用于从音频中即时创建面部表情动画**。 这不就是我在想的吗,我看了看上手的难度,有点打鼓,然后联系了本地版的企业,好吧,我错了。
服务器端的主流解决方案都可以搜索,也可以在国内外论坛上寻求帮助,主流的就是这些,大概花了1周时间,是时候改变思维方式了。
系列文章完成后,相关原型、设计、源代码、数据库等将开源。
未完待续。