当前位置:首页|资讯|ChatGPT|Whisper|GitHub

stream-translator-gpt: 基于Whisper和ChatGPT的直播实时翻译

作者:ionic_bond发布时间:2023-04-06

stream-translator-gpt是什么?

stream-translator-gpt是本人基于stream-translator进行改进的一个项目,对直播流使用Whisper进行语音转文字,再使用ChatGPT进行翻译,达到实时机翻的效果。

演示视频:

Github地址:https://github.com/ionic-bond/stream-translator-gpt

关于原项目stream-translator的介绍,可以看站内另一篇专栏:

关于stream-translator原有的功能,本文将不再详细介绍。

本项目stream-translator-gpt主要进行了以下改进:

  1. 基于人声检测的切片逻辑替换了原项目的按固定时间的切片逻辑

  2. 引入ChatGPT API来提供翻译功能。

  3. 引入go-cqhttp API来提供把翻译结果发送到QQ的功能。

  4. 使用yt-dlp替换streamlink,这样就可以使用cookies来读取会员限定的直播流


准备工作

为了避免浪费你的宝贵时间,在阅读本文正式内容之前,你需要准备以下这些工具/条件:

  1. OpenAI API的访问权限

    你需要有一个OpenAI账号,然后确认 https://platform.openai.com/account/usage 里边有可用的免费/付费额度,然后在 https://platform.openai.com/account/api-keys 获取你的API key。

    关于OpenAI的注册和充值网上有很多教程,本文不会做这方面的说明。

    (如果你不需要翻译功能也可以不用这个)

  2. 你需要自己部署一个go-cqhttp

    本程序发送到QQ的功能是基于go-cqhttp的HTTP API的,所以你需要自己部署一个go-cqhttp,部署的方法请看go-cqhttp的文档,本文不会做说明。

    (如果你不需要发送到QQ功能也可以不用这个)

  3. 可以不需要编程经验,但需要有在命令行环境下运行程序的经验,起码需要知道参数怎么填,文件路径是什么。本程序不是一键傻瓜包,你需要理解每一步在做什么才能在本地正确地运行起来

  4. 一个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模型下)

whisper和faster-whisper的对比测试

个人的经验:在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个参数均为开头提到过的基于人声检测的切片逻辑的参数,分别表示:

  1. 处理的精度(单位:秒),即对于直播流会切成多长的单位来进行人声判断,不能小于0.03(30ms)

  2. 连续多少秒没有人声则进行切片

  3. 切片最小长度

  4. 切片最大长度

  5. 人声判断的阈值,取值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下有可能出现的问题:

  1. yt-dlp:因为程序不是在python里边而是在系统调用yt-dlp,所以pip安装的yt-dlp在Windows下调用不了,你需要自己下载 https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe ,然后放到一个目录,然后把这个目录加到环境变量里。

  2. 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

  3. 可能出现的报错: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



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1