语音助手伊琳娜
伊琳娜是一个离线工作的俄语语音助手。需要Python 3.5+(可能需要更低的版本,但至少需要Python 3)。
支持插件(技能)。
在Habr上的文章 | 第二篇Habr上的文章 | 第三篇Habr上的文章 | Telegram群组
通过作者的另一个项目服务VseGPT.ru:
- 支持与ChatGPT、GPT-4、Claude 3的交流。
- 支持通过特殊模型Perplexity Online从互联网上获取参考信息(命令“справка”)。
- 支持OpenAI的语音合成(如果本地安装困难) (插件配置指南)。(也可以使用任何兼容OpenAI的端点)
Windows下最快的安装方法
访问https://github.com/janvarev/Irene-VA-win-installer,下载代码(Code/Download ZIP)并按照说明进行操作。
安装后可用的命令有:"ирина привет"、"ирина подбрось монетку"、"ирина подбрось кубик"、"ирина игра больше меньше"、"ирина таймер три минуты"。
要进行进一步的设置或解决问题,请运行start-settings-manager.bat
启动设置管理器——您可以微调插件并了解更多命令。
更多关于此选项的设置文档:docs/INSTALL_WIN_COMPACT.md
Windows下最快的安装方法2(已废弃)
- 访问发布页面:https://github.com/janvarev/Irene-Voice-Assistant/releases
- 下载发布并按照说明进行操作。Python和GIT已包含在发布中,不需要额外安装。
安装后将可用离线命令(因为这是默认配置)。 例如:"ирина привет"、"ирина подбрось монетку"、"ирина подбрось кубик"、"ирина игра больше меньше"、"ирина таймер три минуты"。
如何微调此选项:docs/INSTALL_WIN_COMPACT.md
安装 / 快速启动
您需要已安装的Python(大约在3.7-3.11之间)。
-
要快速安装所有所需的依赖项,可以使用以下命令:
pip install -r requirements.txt
(对于Linux和macOS - 请先安装audioplayer的包) -
要启动,请从根文件夹运行文件runva_vosk.py。 默认情况下,它将启动离线语音识别器vosk,用于从麦克风识别语音, 并使用pyttsx引擎合成助手的语音。 更多关于pyttsx的信息。
-
启动后可以通过简单命令进行测试——对麦克风说"Ирина, привет!"
启动伊琳娜后将会出现包含设置的options文件夹,您可以在其中修改设置。
更多关于Win安装的分步信息(特别是Win 7):docs/INSTALL_WIN.md
在Linux下安装时解决某些问题:docs/INSTALL_LINUX.md
在Mac下安装时解决某些问题:docs/INSTALL_MAC.md
安装时问题调试的原则:docs/INSTALL_DEBUG.md
可以在ISSUES中报告BUG,在Telegram中讨论
设置管理器
从版本9.0开始,通过gradio提供了Web设置管理器。
要启动,请从根文件夹运行文件runva_settings_manager.py。
通过Docker进行安装
如果您想通过Docker启动所有内容:docs/INSTALL_DOCKER.md(还包括ARM(树莓派等)Docker镜像,由Ivan-Firefly提供)
如果您只想通过Docker启动复杂的关键组件:docs/INSTALL_DOCKER_COMP.md
总体逻辑
所有命令的启动都以助手的名字开头(可在options/core.json中设置,默认是Ирина)。 这样做是为了避免在持续监听麦克风时误触发。 以下将描述不带前缀“Ирина”的命令。
引擎内置了通过Web界面管理MPC-HC播放器的本地支持,因此在其他条件相同的情况下建议使用它。 可以在options/core.json中设置。
插件
插件支持在自定义引擎Jaa.py上实现 - 一个极简的一文件插件支持引擎及其设置。
插件放置在plugins文件夹中,应该以“plugins_”前缀开头。
插件的设置(如果有)放置在“options”文件夹中(第一次启动后创建)。
已准备好的插件/技能(已在plugins文件夹中)
对于每个插件,都会说明是否需要在线。 要禁用,请从plugins文件夹中删除。
更多信息:docs/PLUGINS.md
第三方插件
如果您想了解:
- 还有哪些其他开发者的插件
- 发布自己制作的插件链接
请访问:https://github.com/janvarev/Irene-Voice-Assistant/issues/1
插件管理器
(从版本10.0.0开始) 要启动,请运行runva_plugin_installer.py
注意:所提供的插件由第三方开发者支持,可能会进行补充和修改! 伊琳娜的作者不对其内容负责!
对于开发者:如果您想将自己的插件添加到此列表以简化安装,您需要执行以下操作:
- 将插件放在GitHub上
- 根目录下应有类型为plugin_x.py的文件。可能会有多个
- 如果需要安装额外的模块,应有requirements.txt文件
- 通过运行runva_plugin_installer选择选项0(自动设置GitHub插件地址)测试安装自己的插件
- 完成后,请在Issue中发布链接或通过pull request更改plugins_catalog.json,该文件包含已知的辅助插件链接。
插件示例:https://github.com/janvarev/irene_plugin_boltalka2_openai
与Home Assistant的集成
有一个不错的第三方插件,允许通过伊琳娜启动Home Assistant场景: https://github.com/timhok/IreneVA-hassio-script-trigger-plugin
核心设置(core.json)
具体插件设置请查看插件
{
"isOnline": true, # 将此设置为false将为需要在线的插件命令返回占位符。推荐离线使用。
"linguaFrancaLang": "ru", # 数字转换为lingua-franca的语言。如果使用其他语言请更改
"logPolicy": "cmd", # all|cmd|none。在从麦克风识别语音时输出到控制台的选项:total | 仅命令 | 从不
"mpcHcPath": "C:\\Program Files (x86)\\K-Lite Codec Pack\\MPC-HC64\\mpc-hc64_nvo.exe", # 使用MPC HC路径,如使用则添加
"mpcIsUse": true, # 是否使用MPC HC?
"mpcIsUseHttpRemote": true, # MPC HC管理是否通过Web界面启用?
"playWavEngineId": "audioplayer", # 播放WAV文件的插件。有些WAV文件需要sounddevice。
"replyNoCommandFound": "Извини, я не поняла", # 不能理解时的回应
"replyNoCommandFoundInContext": "Не поняла...", # 在上下文状态下不能理解时的回应
"replyOnlineRequired": "Нужен онлайн", # 启动需要在线的离线插件时的回应
"tempDir": "temp", # 临时文件夹
"ttsEngineId": "pyttsx", # 使用的TTS引擎
"ttsEngineId2": "", # 使用的第二个TTS引擎。仅用于本地合成——例如缓冲区。通过命令say2调用
"useTTSCache": false, # 设置为true时,将在tts_cache文件夹中缓存由TTS引擎生成的.wav文件
"v": "1.7", # 核心插件版本。自动更新,请勿修改
"voiceAssNames": "ирина|ирины|ирину", # 如果出现在音频流中,则接下来是一个命令。(建议多个辅助名称)
"voiceAssNameRunCmd": { # 如果您以这个名字呼叫助手,将在命令前添加相应的词语
"альбина": "чатгпт"
}
}
调试和开发(供开发者使用)
为调试方便,可以通过runva_cmdline.py文件启动系统。
它通过命令行接口启动核心(VACore in vacore.py),比语音指令更方便。
- 可以通过创建plugins_插件连接自己的技能。查看示例。
- 可以通过插件连接自己的TTS。查看plugins_tts_console.py, plugins_tts_pyttsx.py作为示例。
- 也可以通过创建自己的runva_文件,根据需要连接自己的语音识别引擎。
插件开发
远程工作(服务器-客户端,多麦克风/机器安装)
在“客户端-服务器”模式下的多实例安装更复杂,但允许管理伊琳娜:
- 从多个麦克风
- 从不同机器
- 从Telegram(通过telegram bot)
通过VOSK remote进行语音识别
如果在安装VOSK时遇到问题(例如在Mac上),您可以使用 通过Docker启动的VOSK Auto Speech Recognition Server进行工作。
- 启动
docker run -d -p 2700:2700 alphacep/kaldi-ru:latest
(详情:https://alphacephei.com/vosk/server )- 或者,您可以通过重定义内部参数启动
vosk_asr_server.py
- 或者,您可以通过重定义内部参数启动
args.interface = os.environ.get('VOSK_SERVER_INTERFACE', "0.0.0.0")
args.port = int(os.environ.get('VOSK_SERVER_PORT', 2700)
- 启动
runva_voskrem.py
。它将读取麦克风数据并发送到服务器进行识别。
如果需要在另一台机器上启动识别,请使用参数-u(--uri):runva_voskrem.py -u=ws://100.100.100.100:2700
以指定服务器地址。
通过SpeechRecognition进行语音识别
SpeechRecognition是一个经典的通过Google等服务进行语音识别的引擎。 要启动此识别,请通过文件runva_speechrecognition.py启动系统。
为了工作需要:
pip install PyAudio
pip install SpeechRecognition
如果有安装 PyAudio 的问题,请阅读 EnjiRouz 的详细信息
特点: 数词识别。相同的短语识别如下:
- VOSK: 计时器十秒
- SpeechRecognition (Google): 计时器 10 秒
多语言支持
项目总体上没有考虑多语言支持,因为它使用了插件中的自定义词解析。 但是,核心代码 (vacore.py) 完全与语言无关,您可以通过为插件重写语言,构建其他语言的独立安装。
几句定义语言助手核心行为的语言短语(如其名称以及类似于“我不明白”的短语)可以在 core 插件的配置文件中进行设置。
模糊处理短语
从版本 7.5 开始支持用户输入的模糊处理。
为了设置识别阈值,在 core.json 中有一个全局参数 fuzzyThreshold, 它接受从 0 到 1 的值(1 表示对短语的完全确认)
已知的支持此功能的插件:
- https://github.com/janvarev/irene_plugin_fuzzy_thefuzz - 通过 thefuzz,模糊字符串比较
- https://github.com/modos189/irene_plugin_fuzzy_sklearn - 通过 scikit-learn
- https://github.com/janvarev/irene_plugin_fuzzy_ai_sentence - 神经网络句子语义比较(sentence_transformers)
Vasya 语音助手的插件
从版本 8.1 起,测试性地支持 Vasya 语音助手的核心插件: https://github.com/Oknolaz/vasisualy
如何添加:
- 将插件放入 plugins_vasi/skills 目录中(来自 https://github.com/Oknolaz/vasisualy/tree/master/vasisualy/skills )
- 每个插件预计在模块中定义了 triggers,用于生成命令列表。如果没有,需要对插件进行修改。
在最简单的情况下可以运行—在 coin 和 crystall_ball 插件上测试通过。
如果无法正常运行—请阅读代码。 支持通过 plugin_vasi.py 插件实现。
贡献
如果你想向项目贡献,请先熟悉 CONTRIBUTING.md 政策。
简要说明:
- 插件最好独立创建 Github 项目(或托管到其他地方),并且你愿意进行维护。可以将链接发布到 https://github.com/janvarev/Irene-Voice-Assistant/issues/1,以便其他人找到你的插件。不要将附加插件提交到此项目—我没有时间和精力去维护我不熟悉的东西。
- 做一些小的改动,以改善功能或修复错误(例如在某些情况下不起作用)。这些 Pull Request 很可能会被接受。
- 大量的代码变动(风格统一、导入整理)不会被考虑并会被拒绝。请不要做这些。
致谢
感谢 @EnjiRouz 的语音助手项目:https://github.com/EnjiRouz/Voice-Assistant-App,这成为了基础(不过进行过大量修改)
感谢 AlphaCephei 出色的 Vosk 语音识别库( https://alphacephei.com/vosk/index.ru )
对项目的支持
在开源中,主要的困难不是写代码。写代码很有趣。
开源的困难在于长时间维护代码和用户。
回答问题。修复错误。撰写文章和文档。
如果您希望支持我的兴趣并确保 Irene 作为不依赖大公司的独立语音助手得到长久的支持,您可以:
- 编写新插件(这总是让我很开心!)
- 通过订阅在 https://boosty.to/irene-voice 资助我。订阅者越多,我就越能理解这个项目的需求。
- 向他人介绍 Irene 或帮助他们进行设置。
- 在这个话题中说一句“谢谢”:https://github.com/janvarev/Irene-Voice-Assistant/issues/12