{"id":32782831,"url":"https://github.com/febilly/vrchat-interpretor-ci","last_synced_at":"2025-11-04T23:01:56.324Z","repository":{"id":321088575,"uuid":"1083679874","full_name":"febilly/VRChat-Interpretor-CI","owner":"febilly","description":"更适合中国宝宝体质的 VRChat 语音翻译器 - A VRChat Interpretor/Translator for native Chinese speakers","archived":false,"fork":false,"pushed_at":"2025-11-03T18:57:13.000Z","size":118,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-03T20:31:01.038Z","etag":null,"topics":["interpretation","translation","vrchat"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/febilly.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-26T14:12:18.000Z","updated_at":"2025-11-03T18:57:17.000Z","dependencies_parsed_at":"2025-10-30T12:00:14.033Z","dependency_job_id":null,"html_url":"https://github.com/febilly/VRChat-Interpretor-CI","commit_stats":null,"previous_names":["febilly/vrchat-interpretor-ci"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/febilly/VRChat-Interpretor-CI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/febilly%2FVRChat-Interpretor-CI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/febilly%2FVRChat-Interpretor-CI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/febilly%2FVRChat-Interpretor-CI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/febilly%2FVRChat-Interpretor-CI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/febilly","download_url":"https://codeload.github.com/febilly/VRChat-Interpretor-CI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/febilly%2FVRChat-Interpretor-CI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":282727657,"owners_count":26717232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-04T02:00:05.887Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["interpretation","translation","vrchat"],"created_at":"2025-11-04T23:00:24.477Z","updated_at":"2025-11-04T23:01:56.316Z","avatar_url":"https://github.com/febilly.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VRChat 翻译器 非流式输出版\n\n更适合中国 [~~计科~~](#局限性) 宝宝体质的 VRChat 语音翻译器（翻译你自己的声音）\n\n- 使用阿里的 [qwen3实时语音识别（默认）](https://bailian.console.aliyun.com/?tab=model#/model-market/detail/qwen3-asr-flash) 或 [Fun-ASR](https://bailian.console.aliyun.com/?tab=model#/model-market/detail/fun-asr-realtime) 进行语音转文本\n- 使用 DeepL 进行翻译\n    - 可以切换为开箱即用的谷歌翻译（当然你的网得行）\n- 将结果通过 OSC 发送至游戏\n- ~~其实就是把一堆 API 粘在了一起~~\n\n有一些特殊功能，请看下文\n\n## 不是已经有人做过了吗，为什么要再做一个翻译器？？？\n\n目前，语音翻译最大的短板在语音识别上。而现有的给 VRChat 做的翻译器识别中文及带中文口音的英语的效果并不好。\n_可以说我就是为了这点醋包的这顿饺子_\n\n### 语音识别方面\n- 准确性方面：\n    - 断句断不准是最致命的问题，这个解决不了的话其他都白干\n    - Whisper识别汉语效果实在是一坨\n    - Edge的WebSpeech面对中国人口音识别效果不好\n    - VRChat里经常出现一些一般的语音识别认不出来的词，需要用热词功能提升识别效果\n- 一些细节的优化问题：\n    - VAD断句需要一两秒的时间来等待说话结束\n    - 闭麦时可能会漏掉用户说的最后一个字\n\n### 翻译方面\n- 翻译需要上下文\n    - 没有上下文的话，比如看这句翻译：\n        - 现在总行 _(xíng)_ 了吧？\n        - Is the head office now?\n\n## 特点\n\n### 语音识别方面\n\n- 准确性：\n    - 使用阿里的 qwen3 或者 Fun-ASR：我试了好几个 STT 的 API，感觉阿里这个是挺好的，以及他有给免费额度\n        - 但我对比的大部分都是国外的 API，感觉不是很公平...... 有更好的 API 可以跟我说一声！\n    - 增加了热词词库\n        - 自带一部分公共的词库\n            - 部分比较， _咳咳，不太好_ 的词被我删掉了，请自行添加\n        - 可自己添加私人的词库\n- 断句：\n    - 游戏内语音模式请使用 toggle 模式。说完一句话后，按下静音键，即视为一句话说完，马上全部进行转录。这样能提高响应速度。\n        - 停止录制时会额外继续录制一小段音频（默认0.3s），防止漏掉最后一个字\n    - VAD：仍然有 VAD 作为补充断句方法\n\n### 翻译方面\n\n- 实现了翻译的上下文，默认附带一条简短的场景说明，和最近的6条消息\n- 附带备用语言选项，如果识别到的源语言和主目标语言相同，则翻译至备用语言\n    - 可以实现两种语言之间的互译\n- 默认使用Deepl翻译\n    - 可以指定翻译的正式程度（比如对于日语来说）\n    - 原生支持上下文\n    - 可以自定义词库（本项目还没实现）\n- 可以切换为开箱即用的谷歌翻译（但有网络连通性问题，及速率限制）\n- 可以切换为使用大模型进行翻译，但由于延迟问题，默认不使用\n\n## 局限性\n- 你得会配环境（\n- 目前没（懒得）写 GUI，所有配置需要在 `main.py` 里面直接改\n- 使用脚本启动时系统的默认麦克风\n- 需要用商业服务的API Key，有一定免费额度，但免费额度用完后需要付钱\n    - 阿里云的免费额度是一次性的，但是大学生可以拿到每年的免费额度\n    - DeepL的免费额度每月重置，但是怎么拿到Key需要自己想办法\n        - 实在懒得折腾可以把翻译器换成谷歌的\n- 目前暂不支持和其他 OSC 程序同时运行\n- 语言识别默认使用一个简单的中日韩英检测器\n    - 如需其他语言，请自行修改配置\n\n## 快速开始\n\n懒得自己写了，下面的东西让 AI 写了，我看了下，基本上写的没毛病，就凑合看一下吧，抱歉抱歉\n\n### 1. 克隆项目\n\n```bash\ngit clone https://github.com/febilly/VRChat-Interpretor-CI\ncd VRChat-Interpretor-CI\n```\n\n### 2. 创建虚拟环境（推荐，非必须）\n\n```bash\npython -m venv .\n.venv\\Scripts\\activate  # Windows\nsource .venv/bin/activate  # macOS/Linux\n```\n\n### 3. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 4. 配置环境变量\n\n在项目根目录创建 `.env` 文件，添加以下内容：\n\n```env\n# 必需：阿里云百炼 API Key\nDASHSCOPE_API_KEY=your_dashscope_api_key_here\n\n# 可选：DeepL API Key（如果使用默认的 DeepL 翻译）\nDEEPL_API_KEY=your_deepl_api_key_here\n```\n\n### 5. 运行程序\n\n```bash\npython main.py\n```\n\n## API Key 获取\n\n- 阿里云百炼：https://bailian.console.aliyun.com/?tab=model#/model-market/detail/fun-asr-realtime\n- DeepL：https://www.deepl.com/en/pro-api\n\n## 配置说明\n\n在 `main.py` 文件顶部有详细的配置选项。这里的说明可能已过时，请以源码为准。\n\n\u003cdetails\u003e\n\n### 翻译语言配置\n\n```python\nSOURCE_LANGUAGE = 'auto'  # 翻译源语言\n# 'auto': 自动检测\n# 或指定：'en'=英文, 'ja'=日文, 'zh-CN'=简体中文 等\n\nTARGET_LANGUAGE = 'ja'  # 翻译目标语言\n# 'zh-CN': 简体中文\n# 'en': 英文\n# 'ja': 日文\n# 'ko': 韩文\n# 'es': 西班牙语\n# 'fr': 法语 等\n\nFALLBACK_LANGUAGE = 'zh'  # 备用翻译语言\n# 当检测到源语言与目标语言相同时，自动使用此语言\n# 设置为 None 则禁用此功能\n```\n\n### 语言检测器配置\n\n```python\n# 选择语言检测器（取消注释一行）\n# from language_detectors.fasttext_detector import FasttextDetector as LanguageDetector  # 通用检测器\nfrom language_detectors.cjke_detector import CJKEDetector as LanguageDetector  # 中日韩英检测器（推荐）\n# from language_detectors.enzh_detector import EnZhDetector as LanguageDetector  # 中英检测器\n```\n\n**推荐配置：**\n- 主要使用中日韩英语言 → 使用 `CJKEDetector`（速度快、准确度高）\n- 只使用中英双语 → 使用 `EnZhDetector`\n- 需要更多语言支持 → 使用 `FasttextDetector`\n    - 附带一些针对中文和日语的特殊规则，提高短文本准确性\n\n### 翻译 API 配置\n\n```python\n# 选择翻译 API（取消注释一行）\n# from translators.translation_apis.google_web_api import GoogleWebAPI as TranslationAPI  # Google 标准版（免费）\n# from translators.translation_apis.google_dictionary_api import GoogleDictionaryAPI as TranslationAPI  # Google 快速版（免费）\nfrom translators.translation_apis.deepl_api import DeepLAPI as TranslationAPI  # DeepL（需 API Key）\n```\n\n**API 对比：**\n| API | 优点 | 缺点 | API Key |\n|-----|------|------|---------|\n| Google Web | 免费、稳定 | 速度较慢 | 不需要 |\n| Google Dictionary | 免费、快速 | 可能会被谷歌封杀掉 | 不需要 |\n| DeepL | 质量最高 | 有免费额度限制 | 需要 |\n\n### 翻译上下文\n\n```python\nCONTEXT_PREFIX = \"This is an audio transcription of a conversation within the online multiplayer social game VRChat:\"\n# 为翻译提供上下文信息，提高翻译质量\n# 可根据实际场景修改\n```\n\n### 麦克风控制配置\n\n```python\nENABLE_MIC_CONTROL = True  # 是否启用 VRChat 麦克风控制\n# True: 根据 VRChat 内麦克风开关控制识别启停\n# False: 程序启动后立即开始识别，忽略麦克风状态\n\nMUTE_DELAY_SECONDS = 0.3  # 静音后延迟停止的秒数\n# 避免频繁开关导致识别中断\n# 设置为 0 则立即停止\n```\n\n### 热词配置\n\n```python\nENABLE_HOT_WORDS = True  # 是否启用热词功能\n# True: 使用热词表提高特定词汇识别准确度\n# False: 不使用热词\n```\n\n### 显示配置\n\n```python\nSHOW_PARTIAL_RESULTS = False  # 是否显示部分识别结果\n# True: 识别过程中实时显示部分结果（可能覆盖掉之前的翻译结果）\n# False: 只显示完整句子的识别结果（推荐）\n```\n\u003c/details\u003e\n\n## 热词配置\n\n热词功能可以显著提高特定词汇的识别准确度，特别适合专业术语、人名、地名等。\n以及某些 VRChat 的 _特殊_ 词汇\n\n\u003cdetails\u003e\n\n### 热词文件结构\n\n```\nSTT/\n├── hot_words/          # 公共热词目录（会被提交到 Git）\n│   ├── zh-cn.txt      # 中文热词\n│   ├── en.txt         # 英文热词\n│   └── ...\n└── hot_words_private/  # 私人热词目录（不会被提交到 Git）\n    ├── zh-cn.txt      # 中文私人热词\n    ├── en.txt         # 英文私人热词\n    └── ...\n```\n\n### 热词文件格式\n\n每个热词文件是纯文本格式，每行一个词\n\n**注意事项：**\n- 每行一个热词，不要有多余空格\n- 空行会被忽略\n- 总热词数量不超过 500 个（阿里云限制）\n\n### 如何设置私人热词\n\n- **编辑私人热词文件**\n\n   打开 `hot_words_private/` 目录下对应语言的文件（如不存在则请手动创建）：\n   例如：\n\n   ```\n   hot_words_private/zh-cn.txt\n   hot_words_private/en.txt\n   ```\n\n- **启用的语言配置**\n\n   在 `hot_words_manager.py` 中配置要加载的语言：\n   \n   ```python\n   # 要加载的语言列表\n   ENABLED_LANGUAGES = ['zh-cn', 'en']  \n   # 可添加更多：['zh-cn', 'en', 'ja', 'ko']\n   ```\n\n\u003c/details\u003e\n\n## VRChat OSC 配置\n\n### 启用 OSC\n\n1. 启动 VRChat\n2. 打开快捷菜单（Action Menu）\n3. 进入 Options → OSC\n4. 点击 \"Enable\" 启用 OSC\n\n## 常见问题\n\n### 1. 没有任何转录\n\n- 检查系统的默认麦克风是否为你在用的麦克风\n- 检查麦克风有没有声音\n\n### 2. VRChat 聊天框没有显示\n\n- 确认 VRChat OSC 已启用\n- 如果你修改了 OSC 端口，请在 `main.py` 中同步修改 `OSC_PORT` 配置\n\n## 附录\n\n- 要翻译别人的声音的话建议用 [soniox](https://console.soniox.com/org/e784abf7-3ab5-4127-8823-ecfc18f68b90/projects/2b220fdd-f158-4b7a-9b12-447947b5098a/playground/speech-to-text/)，用它的网页端 Playground 就行，配合 Powertoys 的窗口裁剪器\n    - 也可以试试 [LiveCaptions Translator](https://github.com/SakiRinn/LiveCaptions-Translator)\n- 我还没太试过国内其他家的识别服务效果怎样，如果有更好的（并且有不少免费额度的）请告诉我谢谢\n\n## 致谢\n- 本项目部分基于阿里给的 Fun-ASR 示例代码\n- 快速的 Google Translate API 来自 https://github.com/SakiRinn/LiveCaptions-Translator","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffebilly%2Fvrchat-interpretor-ci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffebilly%2Fvrchat-interpretor-ci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffebilly%2Fvrchat-interpretor-ci/lists"}