Jitsi视频会议部署(四):视频会议中实时语音转字幕

依赖于谷歌云的服务,将会议语音传给谷歌的 Google Cloud speech-to-text API,然后得到识别的文字,而且如果你说话停顿很小,可以自动修正上下文中的识别错误。文字会自动在屏幕上弹出来,同时在文字聊天窗口当中,每句话都会按时间自动增加文字段。

很强大的功能,谷歌基本上能识别所有国家语音,甚至一些方言,还有美式英语和英式英语等。我在YouTube上面看到印度三哥的演示,实时印度语的字幕。按照官方的说法,实时翻译成什么语言文字,取决于你的浏览器的locale设定。但是我折腾很久,也只有英文的,不知道是哪里的问题,github上面提问过,可惜官方直接忽视我的问题了。

 因为我的谷歌云支付账号到期了,以前是申请了一年的赠送账户来测试的。目前只能根据之前记录的笔记来整理步骤。

一切以官网为标准:  https://github.com/jitsi/jigasi

1,上文中说了Jigasi的安装,修改Jigasi的配置sip-communicator.propertie

org.jitsi.jigasi.ENABLE_TRANSCRIPTION=true   (容许实时翻译)

org.jitsi.jigasi.ENABLE_SIP=true   (容许打电话)

2,在ubuntu下面安装谷歌SDK 

前提条件:你有谷歌云账号,你建了项目,你为你的项目绑定支付账户,你的项目开启了语音识别服务(我之前另外一篇文章,Freeswitch+unimrcp,也是用的这个服务)

export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install google-cloud-sdk google-cloud-sdk-app-engine-java
gcloud init
gcloud auth application-default login

(下面安装过程删除了一些敏感数据)

root@test01:/etc/jitsi# gcloud init
Welcome! This command will take you through the configuration of gcloud.

Your current configuration has been set to: [default]

You can skip diagnostics next time by using the following flag:
  gcloud init --skip-diagnostics

Network diagnostic detects and fixes local network connection issues.
Checking network connection...done.                                                                                        
Reachability Check passed.
Network diagnostic passed (1/1 checks passed).

You must log in to continue. Would you like to log in (Y/n)?  y

Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/auth?redirect_urig???????????????????%3Aoaapis.com%2Fauth%2Fappengine.admin+https%3A%2Fte+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&access_type=offline


Enter verification code: 4/IAHgRqkCLxQkadfhskajdfhskajdfhksad44owqAZaMFwy9HszKxgzaEEQ
You are logged in as: [michael01????o@gmail.com].

Pick cloud project to use: 
 [1] e-centaur-232307
 [2] vibrant-chain-234506
 [3] Create a new project
Please enter numeric choice or text value (must exactly match list 
item):  2

Your current project has been set to: [vibrant-chain-234506].

Not setting default zone/region (this feature makes it easier to use
[gcloud compute] by setting an appropriate default value for the
--zone and --region flag).
See https://cloud.google.com/compute/docs/gcloud-compute section on how to set
default compute region and zone manually. If you would like [gcloud init] to be
able to do this for you the next time you run it, make sure the
Compute Engine API is enabled for your project on the
https://console.developers.google.com/apis page.

Created a default .boto configuration file at [/root/.boto]. See this file and
[https://cloud.google.com/storage/docs/gsutil/commands/config] for more
information about configuring Google Cloud Storage.
Your Google Cloud SDK is configured and ready to use!

* Commands that require authentication will use michael01chaochao@gmail.com by default
* Commands will reference project `vibrant-chain-234506` by default
Run `gcloud help config` to learn how to change individual settings

This gcloud configuration is called [default]. You can create additional configurations if you work with multiple accounts and/or projects.
Run `gcloud topic configurations` to learn more.

Some things to try next:

* Run `gcloud --help` to see the Cloud Platform services you can interact with. And run `gcloud help COMMAND` to get help on any gcloud command.
* Run `gcloud topic --help` to learn about advanced features of the SDK like arg files and output formatting
root@DN2NVC01:/etc/jitsi# gcloud auth application-default login
Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/auth?redirect_uri=urn%3Agoogleapis.com%2Fauth%2Fcloud-platform&access_type=offline


Enter verification code: 4/IAFUIdzs5_2w8_tasdfasdfsadfasdOIzTIcFz0Zvi98ezMBo

Credentials saved to file: [/root/.config/gcloud/application_default_credentials.json]

These credentials will be used by any library that requests
Application Default Credentials.

To generate an access token for other uses, run:
  gcloud auth application-default print-access-token
root@test01:/etc/jitsi# 

3,注意上面,我们最后实际拿到了一个json的密匙文件,保存在

Credentials saved to file: [/root/.config/gcloud/application_default_credentials.json]

在Jigasi配置文件中   /etc/jitsi/jigasi/config  增加

GOOGLE_APPLICATION_CREDENTIALS=/root/.config/gcloud/application_default_credentials.json

然后Jigasi就可以通过密匙链接谷歌云服务了。

===================================================================================

第2,3步当中我的秘钥只用了半年就失效了,找了很多原因,应该是谷歌云加强了认证,就是在你的秘钥当中必须包含私钥,也就是说你必须在谷歌云上自己手动去生成一个秘钥,具体步骤看这里

https://cloud.google.com/dialogflow/docs/quick/setup#authentication-and-access-control

之前ubuntu本地生成的秘钥文件不能用(结构类似下面)

vim /root/.config/gcloud/application_default_credentials.json
{
“client_id”: “
764086051850-6qr4pXXXXXpt8ejuXXXX1hur.apps.googleusercontent.com”,
“client_secret”: “d-FL95Q1XXXXXXXXpd7hHD0Ty”,
“refresh_token”: “1/H8cj_vxNXXXXXXXXXRe8K6xCACJKpcb5pGna2c”,
“type”: “authorized_user”
}

所以从谷歌云拿到的秘钥请直接替换原来的秘钥文件就可以了。

=========================================================================================

4,检查  /etc/jitsi/meet/domain-config.js 容许启用实时翻译

                     transcribingEnabled: true,

     检查  /usr/share/jitsi-meet/interface_config.js

                      DISABLE_TRANSCRIPTION_SUBTITLES: false,

    修改/etc/jitsi/jigasi/sip-communicator.properties:

# send formats  (实时字幕是json,聊天框显示是txt)
org.jitsi.jigasi.transcription.SEND_JSON=true
org.jitsi.jigasi.transcription.SEND_TXT=true
# delivering final transcript (语音识别的文字保存位置,并且可以用网页来打开全部字幕内容)
org.jitsi.jigasi.transcription.DIRECTORY=/etc/jitsi/jigasi/transcripts
org.jitsi.jigasi.transcription.BASE_URL=https://domain.com.cn/transcripts
org.jitsi.jigasi.transcription.jetty.port=-1
org.jitsi.jigasi.transcription.ADVERTISE_URL=true

5,重启下服务器,再进入会议应该可以看到左下角看到一个CC的图标。

点击CC按钮,自动会有一个名字叫“transcribe”的用户加入会议,然后你说话,屏幕上就有字幕了,聊天窗口也会出现文字内容了。

如果你点了CC按钮没反应,大概哪儿没有配置好,点击右下角的"+"符号,有个邀请人窗口,输入“jitsi_meet_transcribe”,确定。然后transcribe就进来了,有时候翻译官进来了,会自动掉线退出,你重新再邀请一次就好了。

当然可以试下另外一种命令的方式启动实施翻译。

因为你用的chrome,然后打开chrome的调试窗口,在调试窗口输入 APP.conference._room.dial("jitsi_meet_transcribe"),这个的效果和上面点+的效果是一样的。

 

基本上这个功能就是这样配置了,相比其他很多会议系统,这个功能有点“厉害”,应该还是说谷歌厉害。

附带语种列表

Afrikaans (Suid-Afrika)    af-ZA    南非荷兰语(南非)
አማርኛ (ኢትዮጵያ)    am-ET    阿姆哈拉语(埃塞俄比亚)
Հայ (Հայաստան)    hy-AM    亚美尼亚语(亚美尼亚)
Azərbaycan (Azərbaycan)    az-AZ    阿塞拜疆语(阿塞拜疆)
Bahasa Indonesia (Indonesia)    id-ID    印度尼西亚语(印度尼西亚)
Bahasa Melayu (Malaysia)    ms-MY    马来语(马来西亚)
বাংলা (বাংলাদেশ)    bn-BD    孟加拉语(孟加拉)
বাংলা (ভারত)    bn-IN    孟加拉语(印度)
Català (Espanya)    ca-ES    加泰罗尼亚语(西班牙)
Čeština (Česká republika)    cs-CZ    捷克语(捷克共和国)
Dansk (Danmark)    da-DK    丹麦语(丹麦)
Deutsch (Deutschland)    de-DE    德语(德国)
English (Australia)    en-AU    英语(澳大利亚)
English (Canada)    en-CA    英语(加拿大)
English (Ghana)    en-GH    英语(加纳)
English (Great Britain)    en-GB    英语(英国)
English (India)    en-IN    英语(印度)
English (Ireland)    en-IE    英语(爱尔兰)
English (Kenya)    en-KE    英语(肯尼亚)
English (New Zealand)    en-NZ    英语(新西兰)
English (Nigeria)    en-NG    英语(尼日利亚)
English (Philippines)    en-PH    英语(菲律宾)
English (Singapore)    en-SG    英语(新加坡)
English (South Africa)    en-ZA    英语(南非)
English (Tanzania)    en-TZ    英语(坦桑尼亚)
English (United States)    en-US    英语(美国)
Español (Argentina)    es-AR    西班牙语(阿根廷)
Español (Bolivia)    es-BO    西班牙语(玻利维亚)
Español (Chile)    es-CL    西班牙语(智利)
Español (Colombia)    es-CO    西班牙语(哥伦比亚)
Español (Costa Rica)    es-CR    西班牙语(哥斯达黎加)
Español (Ecuador)    es-EC    西班牙语(厄瓜多尔)
Español (El Salvador)    es-SV    西班牙语(萨尔瓦多)
Español (España)    es-ES    西班牙语(西班牙)
Español (Estados Unidos)    es-US    西班牙语(美国)
Español (Guatemala)    es-GT    西班牙语(危地马拉)
Español (Honduras)    es-HN    西班牙语(洪都拉斯)
Español (México)    es-MX    西班牙语(墨西哥)
Español (Nicaragua)    es-NI    西班牙语(尼加拉瓜)
Español (Panamá)    es-PA    西班牙语(巴拿马)
Español (Paraguay)    es-PY    西班牙语(巴拉圭)
Español (Perú)    es-PE    西班牙语(秘鲁)
Español (Puerto Rico)    es-PR    西班牙语(波多黎各)
Español (República Dominicana)    es-DO    西班牙语(多米尼加共和国)
Español (Uruguay)    es-UY    西班牙语(乌拉圭)
Español (Venezuela)    es-VE    西班牙语(委内瑞拉)
Euskara (Espainia)    eu-ES    巴斯克语(西班牙)
Filipino (Pilipinas)    fil-PH    菲律宾语(菲律宾)
Français (Canada)    fr-CA    法语(加拿大)
Français (France)    fr-FR    法语(法国)
Galego (España)    gl-ES    加利西亚语(西班牙)
ქართული (საქართველო)    ka-GE    格鲁吉亚语(格鲁吉亚)
ગુજરાતી (ભારત)    gu-IN    古吉拉特语(印度)
Hrvatski (Hrvatska)    hr-HR    克罗地亚语(克罗地亚)
IsiZulu (Ningizimu Afrika)    zu-ZA    祖鲁语(南非)
Íslenska (Ísland)    is-IS    冰岛语(冰岛)
Italiano (Italia)    it-IT    意大利语(意大利)
Jawa (Indonesia)    jv-ID    爪哇语(印度尼西亚)
ಕನ್ನಡ (ಭಾರತ)    kn-IN    卡纳达语(印度)
ភាសាខ្មែរ (កម្ពុជា)    km-KH    高棉语(柬埔寨)
ລາວ (ລາວ)    lo-LA    老挝语(老挝)
Latviešu (latviešu)    lv-LV    拉脱维亚语(拉脱维亚)
Lietuvių (Lietuva)    lt-LT    立陶宛语(立陶宛)
Magyar (Magyarország)    hu-HU    匈牙利语(匈牙利)
മലയാളം (ഇന്ത്യ)    ml-IN    马拉雅拉姆语(印度)
मराठी (भारत)    mr-IN    马拉地语(印度)
Nederlands (Nederland)    nl-NL    荷兰语(荷兰)
नेपाली (नेपाल)    ne-NP    尼泊尔语(尼泊尔)
Norsk bokmål (Norge)    nb-NO    博克马尔挪威语(挪威)
Polski (Polska)    pl-PL    波兰语(波兰)
Português (Brasil)    pt-BR    葡萄牙语(巴西)
Português (Portugal)    pt-PT    葡萄牙语(葡萄牙)
Română (România)    ro-RO    罗马尼亚语(罗马尼亚)
සිංහල (ශ්රී ලංකාව)    si-LK    僧伽罗语(斯里兰卡)
Slovenčina (Slovensko)    sk-SK    斯洛伐克语(斯洛伐克)
Slovenščina (Slovenija)    sl-SI    斯洛文尼亚语(斯洛文尼亚)
Urang (Indonesia)    su-ID    巽他语(印度尼西亚)
Swahili (Tanzania)    sw-TZ    斯瓦希里语(坦桑尼亚)
Swahili (Kenya)    sw-KE    斯瓦希里语(肯尼亚)
Suomi (Suomi)    fi-FI    芬兰语(芬兰)
Svenska (Sverige)    sv-SE    瑞典语(瑞典)
தமிழ் (இந்தியா)    ta-IN    泰米尔语(印度)
தமிழ் (சிங்கப்பூர்)    ta-SG    泰米尔语(新加坡)
தமிழ் (இலங்கை)    ta-LK    泰米尔语(斯里兰卡)
தமிழ் (மலேசியா)    ta-MY    泰米尔语(马来西亚)
తెలుగు (భారతదేశం)    te-IN    泰卢固语(印度)
Tiếng Việt (Việt Nam)    vi-VN    越南语(越南)
Türkçe (Türkiye)    tr-TR    土耳其语(土耳其
اردو (پاکستان)    ur-PK    乌尔都语(巴基斯坦)
اردو (بھارت)    ur-IN    乌尔都语(印度)
Ελληνικά (Ελλάδα)    el-GR    希腊语(希腊)
Български (България)    bg-BG    保加利亚语(保加利亚)
Русский (Россия)    ru-RU    俄语(俄罗斯)
Српски (Србија)    sr-RS    塞尔维亚语(塞尔维亚)
Українська (Україна)    uk-UA    乌克兰语(乌克兰)
עברית (ישראל)    he-IL    希伯来语(以色列)
العربية (إسرائيل)    ar-IL    阿拉伯语(以色列)
العربية (الأردن)    ar-JO    阿拉伯语(约旦)
العربية (الإمارات)    ar-AE    阿拉伯语(阿拉伯联合酋长国)
العربية (البحرين)    ar-BH    阿拉伯语(巴林)
العربية (الجزائر)    ar-DZ    阿拉伯语(阿尔及利亚)
العربية (السعودية)    ar-SA    阿拉伯语(沙特阿拉伯)
العربية (العراق)    ar-IQ    阿拉伯语(伊拉克)
العربية (الكويت)    ar-KW    阿拉伯语(科威特)
العربية (المغرب)    ar-MA    阿拉伯语(摩洛哥)
العربية (تونس)    ar-TN    阿拉伯语(突尼斯)
العربية (عُمان)    ar-OM    阿拉伯语(阿曼)
العربية (فلسطين)    ar-PS    阿拉伯语(巴勒斯坦国)
العربية (قطر)    ar-QA    阿拉伯语(卡塔尔)
العربية (لبنان)    ar-LB    阿拉伯语(黎巴嫩)
العربية (مصر)    ar-EG    阿拉伯语(埃及)
فارسی (ایران)    fa-IR    波斯语(伊朗)
हिन्दी (भारत)    hi-IN    印地语(印度)
ไทย (ประเทศไทย)    th-TH    泰语(泰国)
한국어 (대한민국)    ko-KR    韩语(韩国)
國語 (台灣)    zh-TW    中文、普通话(台湾繁体)
廣東話 (香港)    yue-Hant-HK    中文、粤语(香港繁体)
日本語(日本)    ja-JP    日语(日本)
普通話 (香港)    zh-HK    中文、普通话(香港简体)
普通话 (中国大陆)    zh    中文、普通话(中国简体)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值