依赖于谷歌云的服务,将会议语音传给谷歌的 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: [[email protected]].
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 [email protected] 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 中文、普通话(中国简体)