跳转到主要内容

Hermes协议音频服务部分的开源实现

项目描述

Hermes Audio Server

Build status Maintainability Code quality Python versions PyPI package version GitHub license

Hermes音频服务器实现了由Snips定义的Hermes协议中的音频服务部分。

它旨在与Rhasspy一起使用,Rhasspy是一个离线、多语言语音助手工具包,可与Home Assistant一起工作,并且完全开源。

使用Hermes音频服务器,您可以将电脑(如Raspberry Pi)的麦克风和扬声器用作Rhasspy系统的远程音频输入和输出。

系统要求

Hermes 音频服务器需要 Python 3。它已在运行 Raspbian 9.8 的树莓派和运行 Ubuntu 19.04 的 x86_64 笔记本电脑上进行过测试。原则上,它应该是跨平台的。当您遇到问题或软件以“您的平台不受支持”的消息退出时,请在 GitHub 上打开一个问题

安装

您可以通过以下方式安装 Hermes 音频服务器及其依赖项

sudo apt install portaudio19-dev
sudo pip3 install hermes-audio-server

注意:这将全局安装 Hermes 音频服务器。如果您想在 Python 虚拟环境中安装 Hermes 音频服务器,请删除 sudo

作为服务运行

您可以将 Hermes 音频服务器作为服务运行。

建议以系统用户身份运行它。创建此用户时不要提供登录 shell,也不要为用户创建主目录

sudo useradd -r -s /bin/false hermes-audio-server

此用户还需要访问您的音频设备

sudo usermod -a -G audio hermes-audio-server

配置

Hermes 音频服务器在 JSON 文件 /etc/hermes-audio-server.json 中进行配置,其格式如下

{
    "site": "default",
    "mqtt": {
        "host": "localhost",
        "port": 1883,
        "authentication": {
            "username": "foobar",
            "password": "secretpassword"
        },
        "tls": {
            "ca_certificates": "",
            "client_certificate": "",
            "client_key": ""
        }
    },
    "vad": {
        "mode": 0,
        "silence": 2,
        "status_messages": true
    }
}

请注意,这假设您正在使用身份验证和 TLS 连接到您的 MQTT 代理,并且这启用了实验性的语音活动检测(见下文)。

配置文件中的所有键都是可选的。默认行为是连接到 localhost:1883,不进行身份验证和 TLS,并使用 default 作为站点 ID,禁用语音活动检测。这种情况下的配置文件可能如下所示

{
    "site": "default",
    "mqtt": {
        "host": "localhost",
        "port": 1883
    }
}

目前 Hermes 音频服务器使用系统的默认麦克风和扬声器。在未来的版本中,这将可配置。

语音活动检测

语音活动检测是 Hermes 音频服务器中的一个实验性功能,默认情况下是禁用的。它基于 py-webrtcvad,并尝试在无语音时抑制发送音频帧。请注意,这一尝试的成功高度依赖于您的麦克风、您的环境和您对 VAD 功能的配置。Hermes 音频服务器的语音活动检测不应被视为隐私功能,而是一个节省网络带宽的功能。如果您真的不想在网络中发送音频帧,除非发出语音命令,您应该在您的设备上运行唤醒词服务,然后才开始将音频流式传输到您的 Rhasspy 服务器,直到命令结束。

如果配置文件中没有指定 vad 键,则语音活动检测不会启用,并且所有记录的音频帧将连续在网络中流式传输。如果您不想这样,请指定 vad 键,以便仅在检测到语音活动时流式传输音频。您可以使用以下子键配置 VAD 功能

  • mode:这应该是一个介于 0 和 3 之间的整数。0 是最不激进的非语音过滤,3 是最激进的。默认为 0。
  • silence:这定义了在多少秒的沉默(未检测到语音)之后,Hermes 音频记录器认为这是语音消息的结束。默认为 2。请确保此值高于或等于 在 Rhasspy 命令监听器的配置中min_sec,否则命令监听器的音频流可能会太早终止。
  • status_messages:这是一个布尔值:truefalse。指定 Hermes 音频记录器是否在检测到语音消息的开始或结束时在 MQTT 上发送消息。默认为 false。这在调试时很有用,当您想找到 modesilence 的正确值时。

运行 Hermes 音频服务器

赫密士音频服务器由两个命令组成:赫密士音频播放器,它接收MQTT上的WAV文件并在扬声器上播放,以及赫密士音频录制器,它从麦克风录制WAV文件并将它们作为音频帧发送到MQTT。

您可以这样运行赫密士音频播放器:

hermes-audio-player

您可以这样运行赫密士音频录制器:

hermes-audio-recorder

您可以同时运行它们,或者如果您只想使用扬声器或麦克风,则只运行其中一个。

使用方法

两个命令都了解--help选项,该选项为您提供有关识别选项的更多信息。例如

usage: hermes-audio-player [-h] [-v] [-V] [-c CONFIG]

hermes-audio-player is an audio server implementing the playback part of
    the Hermes protocol.

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         use verbose output
  -V, --version         print version information and exit
  -c CONFIG, --config CONFIG
                        configuration file [default: /etc/hermes-audio-
                        server.json]
  -d, --daemon          run as daemon

已知问题/待办事项列表

  • 您还不能选择音频设备:命令使用系统的默认麦克风和扬声器。
  • 这个项目实际上是Hermes协议音频服务器部分的最小实现,旨在与Rhasspy一起使用。它不是snips-audio-server的直接替代品,因为它缺少WAV帧中的附加元数据

变更日志

  • 0.2.0 (2019-06-04):增加了日志记录和守护进程模式。
  • 0.1.1 (2019-05-30):使音频播放器在接收到错误的WAV文件时更健壮。
  • 0.1.0 (2019-05-16):增加了语音活动检测选项。
  • 0.0.2 (2019-05-11):第一个公开版本。

其他有趣的项目

如果您觉得赫密士音频服务器很有趣,也可以看看以下项目:

  • Rhasspy:一个离线、多语言语音助手工具包,与Home Assistant一起使用,并且是完全开源的。
  • Snips Led Control:一种简单控制Snips兼容设备LED的方法,当检测到热词时,设备正在监听、说话、空闲等时,会有LED模式。
  • Matrix-Voice-ESP32-MQTT-Audio-Streamer:Matrix Voice ESP32板的Hermes Audio Server的等效产品,包括LED控制和OTA更新。
  • OpenSnips:与Snips语音平台相关的开源项目的集合。

许可

本项目由Koen Vervloesem提供,作为开源软件,MIT许可。有关更多信息,请参阅LICENSE文件。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

hermes-audio-server-0.2.0.tar.gz (16.9 kB 查看哈希值)

上传时间 源代码

构建分发

hermes_audio_server-0.2.0-py3-none-any.whl (20.0 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面