stream-translator-gpt是本人基于stream-translator进行改进的一个项目,对直播流使用Whisper进行语音转文字,再使用ChatGPT进行翻译,达到实时机翻的效果。
演示视频:
Github地址:https://github.com/ionic-bond/stream-translator-gpt
关于原项目stream-translator的介绍,可以看站内另一篇专栏:
关于stream-translator原有的功能,本文将不再详细介绍。
本项目stream-translator-gpt主要进行了以下改进:
用基于人声检测的切片逻辑替换了原项目的按固定时间的切片逻辑。
引入ChatGPT API来提供翻译功能。
引入go-cqhttp API来提供把翻译结果发送到QQ的功能。
使用yt-dlp替换streamlink,这样就可以使用cookies来读取会员限定的直播流。
为了避免浪费你的宝贵时间,在阅读本文正式内容之前,你需要准备以下这些工具/条件:
OpenAI API的访问权限
你需要有一个OpenAI账号,然后确认 https://platform.openai.com/account/usage 里边有可用的免费/付费额度,然后在 https://platform.openai.com/account/api-keys 获取你的API key。
关于OpenAI的注册和充值网上有很多教程,本文不会做这方面的说明。
(如果你不需要翻译功能也可以不用这个)
你需要自己部署一个go-cqhttp
本程序发送到QQ的功能是基于go-cqhttp的HTTP API的,所以你需要自己部署一个go-cqhttp,部署的方法请看go-cqhttp的文档,本文不会做说明。
(如果你不需要发送到QQ功能也可以不用这个)
可以不需要编程经验,但需要有在命令行环境下运行程序的经验,起码需要知道参数怎么填,文件路径是什么。本程序不是一键傻瓜包,你需要理解每一步在做什么才能在本地正确地运行起来。
一个Google账号,用于在colab上运行程序。
废话不多说,先上colab:https://colab.research.google.com/drive/1-9KqeACyep4Y1dFTTZy2deIAtbYPwKBn?usp=sharing
接下来我们按着colab一步一步讲解运行流程
(建议把colab复制到自己的云盘再修改,分享的colab不能保存你自己的修改)
看显卡信息的,一般不用管,colab白嫖一般给的都是Tesla T4。
下载代码并安装环境依赖,运行就可以了,不用管
这一段的作用是把whisper模型转换成faster-whisper模型
(如果不想看太多细节,一句话概括:用就完事了,可以跳到下一段)
faster-whisper是stream-translator的作者最近支持的,相比whisper,faster-whisper速度要快4倍,而显存只用不到50%(在large v2模型下)
个人的经验:在colab的Tesla T4上使用whisper的large model的话,会有累积延迟,与直播的时间差会越来越大。而faster-whisper的large model则是快的不行,用视频来测试的时候甚至输出速度超过了ChatGPT API的限制。
接下来终于到重点了(废话,都最后一个了),前边都是环境准备,这个是程序的运行,所有需要填写/调整的参数也都在这里,接下来我们逐个说明参数的作用和怎么填。
直播/视频的地址,无需多说,换成你需要翻译的直播地址。
支持的网站,请看yt-dlp的支持网站:https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md
当不使用faster-whisper的时候(后边有说),这个参数才生效,指定whisper使用的模型。
直播流的语言,不填会自动识别,但最好填一下,全称或缩写都行,支持的语言列表见 https://github.com/openai/whisper/blob/main/whisper/tokenizer.py
经常使用whisper的朋友应该知道,在没有人声只有BGM的地方whisper经常会输出奇奇怪怪的东西。
(原因大概是whisper训练用了一些视频的字幕,那些奇奇怪怪的输出通常就是字幕里对应BGM时段的内容,什么感谢观看啊,什么字幕作者啊)
所以我自己收集了一些常见的错误输出,做了个过滤器,欢迎提Pull requests补充,或者联系我。
这两个参数的作用是启用前边提到过的faster-whisper。
如果你想用原本的whisper,请删掉这两个参数。
如果你是在本地运行,请把后边的路径改成正确的faster-whisper模型的文件夹地址。
首先,请填上你的OpenAI API key。
然后,用过ChatGPT的朋友应该知道,用ChatGPT来翻译的话,需要对它说“请翻译***为**语言”,这里的prompt就是发给ChatGPT API的命令,用目标语言来写就行(我加了句不要输出原文是因为它太喜欢把原文一起输出了)
填入你部署好的的go-cqhttp程序的url,就可以发送到QQ
(注:在colab运行的话可以先跳过这步,除非你另外在一台有公网IP的服务器上运行go-cqhttp)
比如go-cqhttp部署在同一台机器,然后我要发送到12345678这个QQ号,那就填
http://127.0.0.1:5700/send_msg?user_id=12345678
其他用法请看 https://docs.go-cqhttp.org/api/
token是你部署go-cqhttp的时候设置的,没有设置的话留空就行。
以上就是colab运行的全部讲解
除了上边说的一些经常需要调整的参数外,还有一些通常不太需要调整的参数,如果你需要进一步控制程序的行为,请看这里。
(注:以下参数如有默认值我会填上,如无默认值则只写出参数名字)
直播/视频的格式,这个参数是直接传递给yt-dlp的,详细见 https://github.com/yt-dlp/yt-dlp#format-selection
wa*的意思是音频要最差的,视频有没有都行。
因为whisper和人声检测都是16000 Hz的,主流视频网站最差的音频一般都不低于这个,用最差的主要是省流量,不放心可以改成best,会给你拉1080p的视频。
如果直播是会员限定的,则需要传入你的cookies文件,获取cookies我一般用“Get cookies.txt”这个插件
这5个参数均为开头提到过的基于人声检测的切片逻辑的参数,分别表示:
处理的精度(单位:秒),即对于直播流会切成多长的单位来进行人声判断,不能小于0.03(30ms)
连续多少秒没有人声则进行切片
切片最小长度
切片最大长度
人声判断的阈值,取值0~1,如果你觉得输出吞掉了一些人声,那么可以尝试减少这个值,反之亦然
(以上前4个参数不需要构成整除关系,程序会自动处理)
如果你想看切片的具体代码,请在代码里搜“StreamSlicer”。
使用哪个GPT模型,gpt-3.5-turbo就是ChatGPT,富哥可以改成gpt-4(如果你有gpt-4的使用资格)
调用GPT API的超时时间,调用是并行的,不需要担心累积延迟。
输出翻译结果时会确保顺序,如果你觉得翻译偶尔卡很久宁可放弃某一条,可以调小这个值。
还有一些应该不太会用到的参数,这里就不说了,感兴趣可以在Github的README上查看。
Linux下运行按着colab来一般不会出什么问题,Windows的python和cuda环境安装stream-translator那篇专栏有说,下边说说新增的部分在Windows下有可能出现的问题:
yt-dlp:因为程序不是在python里边而是在系统调用yt-dlp,所以pip安装的yt-dlp在Windows下调用不了,你需要自己下载 https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe ,然后放到一个目录,然后把这个目录加到环境变量里。
faster-whisper:跟上边一样的原因,pip安装的转换程序不能运行,所以我把转换好的faster-whisper模型打包上传到网盘了,下载解压然后把文件夹地址填到 --faster_whisper_model_path 就行了
https://pan.baidu.com/s/1kZnbGVPguhPY5Q2E9iVjag?pwd=vkn2
或
https://drive.google.com/file/d/1U5Cjzqi-Tkcr64xJxbBMmpwUVS2azcgG/view?usp=sharing
可能出现的报错:ValueError: Requested float16 compute type, but the target device or backend do not support efficient float16 computation.,可能是因为显卡比较旧,加上 --faster_whisper_compute_type int8 应该就行了。
虽然演示用了视频,但其实这个工具是为直播串流的场景开发的,在视频上并不是最优解,视频的话肯定是整个输入Whisper再把结果整个翻译效果好得多,毕竟上下文在语音转文字和翻译上都很重要。
如果这个工具能给你带来帮助,你又刚好有Github账号,那可以给我的项目点个star吗,谢谢~
https://github.com/ionic-bond/stream-translator-gpt