Raspy 语音警报可传达设备异常情况

在 Raspberry Pi 上使用 TTS(文本到语音),可以让它用自然语音说出文本。尤其是固定的短句,即使 Raspberry Pi 的性能不佳,也能近乎实时地播放出来。

它可用于各种情况,但在工业应用中,它是工厂车间和其他使用传感器的环境的有效手段。
从传感器接收到异常情况或从设备接收到系统事件后,就会生成警报,并可通过 TTS 语音通知。


本期我们将介绍可在 PL-R5m 工业 Raspi 上与 Raspberry Pi OS 书虫配合使用的语音合成软件,并附有代码示例。

本文演示了如何使用 Open JTalk 和 VOICE BOX 进行日语文本到语音的转换。如果您打算使用其他语言,请考虑使用其他软件。

音频输出

PL-R5M 工业级 Raspberry Pi 没有音频输出插孔;Raspberry Pi 5 也没有,但省略了 3.5 毫米立体声插孔,因此它依靠 HDMI 显示器上的扬声器进行音频输出。
在未连接显示器的环境中,将听不到任何声音。在这种情况下,请使用 USB 连接的扬声器。

验证音频输出的实用命令

# Step 1: List all connected USB devices
lsusb

# Step 2: Check the audio device number
aplay -l

# Step 3: Configure and check the audio output destination
sudo raspi-config

# Step 4: Play a sample sound for testing
aplay /usr/share/sounds/alsa/Front_Center.wav

在这种情况下,输出来自连接到 PL-R5M 的监听扬声器。

Open JTalk

Open JTalk 是一款适用于 Raspberry Pi 的开源日语文本转语音系统。它运行高效,内存占用率低,使用 apt 命令即可轻松安装。

需要安装三个。

  • open-jtalk –> 正文
  • open-jtalk-mecab-naist-jdic –> 词典数据
  • hts-voice-nitech-jp-atr503-m001 –> 声学模型
sudo apt update
sudo apt install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001

支持软件包管理器,如 docker、homebrew、node.js 和 .NET。

按命令运行

打开的 JTalk 可以使用命令运行。通过复制和粘贴在终端屏幕上运行以下内容,看看是否有任何错误。

echo "おはようございます" | open_jtalk \
  -x /var/lib/mecab/dic/open-jtalk/naist-jdic \
  -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
  -ow out.wav
aplay out.wav
  • 选项 -x 是字典文件的路径
  • 选项-m 是使用的语音模式
  • 选项-ow 是输出 WAV 文件的名称

如果用 ECHO 书写的简短句子立即从说话者口中传出,那就是成功。

命令 + 短句执行

将命令作为 shell 脚本运行比每次在命令中指定参数选项更方便。
假设你将以下代码保存为jvoice-m.sh,并在 sh 文件所在的同一目录下以sh jvoice-m.sh "こんにちは"的形式运行。

#!/bin/sh
TMP=/tmp/jsay.wav
echo "$1" | open_jtalk \
-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $TMP && \
aplay -q $TMP
rm -f $TMP

如果有执行权限,时间会更短。

chmod +x jvoice-m.sh
./jvoice-m.sh おはようございます

让用户说出预先过滤成文本的句子(shell 脚本)

接下来,如果想让阅读器阅读比短句稍长的文本,可将其保存到文本文件中,然后加载。
注意,如果文本较长,在播放之前会有一定的时间差。

例如,我试着播放维基百科上的两行引文,以 PL-R5m 的性能(相当于 Pi 5 和 CM5),大约 1 秒左右就能播放完毕。

Open JTalk 是名古屋工业大学为日语开发的文本到语音软件。
有两个版本:作为开放源代码提供的独立版本和网站上提供的在线版本。
转引自:https://ja.wikipedia.org/wiki/Open_JTalk

shell 脚本内容:

#!/bin/sh
WAV=~/jvoice.wav
TXT=~/voice_text.txt
echo "$1" | open_jtalk \
-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $WAV $TXT && \
aplay -q $WAV

该代码不会让它在临时文件中生成,然后像之前那样将其删除。
,它会在主目录中生成 jvoice.wav,并保持原样。

添加女声 mei(mei)。

我还将添加一个女声。1.8.
在 Raspberry Pi 环境下,从压缩文件中提取的目录会放置在指定目录中。

wget http://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.8/MMDAgent_Example-1.8.zip

解压缩后,将文件移至/usr/share/hts-voice/

unzip MMDAgent_Example-1.8.zip
sudo cp -R ./MMDAgent_Example-1.8/Voice/mei /usr/share/hts-voice/

尽管代码与我们刚才试听的男声相同,但我们试听时改变了路径,即-m 的参数(第 4 行)。
/usr/share/hts-voice/mei/

#!/bin/sh
TMP=/tmp/jsay.wav
echo "$1" | open_jtalk \
-m /usr/share/hts-voice/mei/mei_normal.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $TMP && \
aplay -q $TMP
rm -f $TMP

下载的音频文件 “五月 “有五种不同的风格,适合不同的情绪。

mei_angry.htsvoice (生气)
mei_happy.htsvoice (快乐)
mei_sad.htsvoice (悲伤)
mei_bashful.htsvoice (害羞)
mei_normal.htsvoice (正常)

您还可以试试另一个女声 tohoku-f01。您可以用同样的方法将它们复制到/usr/share/hts-voice/
tohoku-f01: https://github.com/icn-lab/htsvoice-tohoku-f01

在 Python 中运行 Open JTalk

以下是在 Python 代码中执行的示例代码。python3 test_openjtalk.py保存为

子流程中的使用示例:

import subprocess

# Input text
text = "こんにちは。ラズパイダからのお知らせです。"

# ファイルにテキストを書き込む
with open("input.txt", "w", encoding="utf-8") as f:
    f.write(text)

# Execute the Open JTalk command
# -m specifies the voice file (HTS Voice), -x specifies the dictionary
subprocess.run([
    "open_jtalk",
    "-x", "/var/lib/mecab/dic/open-jtalk/naist-jdic",
    "-m", "/usr/share/hts-voice/mei/mei_normal.htsvoice",
    "-ow", "output.wav",
    "input.txt"
])

# Playback using the aplay command
subprocess.run(["aplay", "output.wav"])

与子进程一起使用时,它是轻量级的,可以立即播放。
对于短时间的通知,在带子进程的播放器中播放是合适的。这是必要的,也是足够的。

VOICEVOX

VOICEVOX 是一款支持商业用途的免费、高质量文本到语音软件。它特别适合日语语音合成,能提供自然而富有表现力的声音。在 Raspberry Pi 上运行时,您可以安装 VOICEVOX 的开源(OSS)版本,该版本有别于标准商业版本。

不过,如果原封不动地下载 arm64 版本的二进制文件,则会因依赖关系错误而无法在 Raspberry Pi 上运行。
如果与 Docker 一起使用,则可以无错运行。
由于格式是通过 API 使用的,因此通知起来相当方便。

要在 Raspberry Pi 上安装和使用 VOICEVOX,只需在安装 docker 后准备docker-compose.yaml文件和compose up。(~/VOICEVOX を作成して実行しました)

安装 Docker:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

# Rootless execution (allowing a user to run without granting administrator privileges via sudo)
sudo apt install -y uidmap
dockerd-rootless-setuptool.sh install

docker-compose.yaml:

services:
  voicevox:
    image: voicevox/voicevox_engine:cpu-arm64-latest
    container_name: voicevox
    ports:
      - "50021:50021"
    volumes:
      - ./voicevox_data:/workspace
    restart: unless-stopped

集装箱启动:

docker compose up -d

通过指定端口号 (http://localhost:50021/docs) 访问时,它将显示在 Swagger UI 中,并可与 REST API 配合使用。

在这种情况下,使用以下 Python 代码来设置和运行程序。
默认(标准)的 Raspberry Pi 操作系统不包含 requests 模块,因此仍使用 pip 进行安装。pip3 install requests

VOICEVOX Python 代码示例:

import requests
import subprocess
import os

VOICEVOX_URL = "http://localhost:50021"

text = "温度異常検知!設備を確認してください。"

# 1. audio_query
res = requests.post(f"{VOICEVOX_URL}/audio_query",
                    params={"text": text, "speaker": 14, "style_id": 0})
res.raise_for_status()
audio_query = res.json()

# 2. synthesis
res2 = requests.post(f"{VOICEVOX_URL}/synthesis",
                     params={"speaker": 14, "style_id": 0},
                     json=audio_query)
res2.raise_for_status()

wavfile = "voicevox_output.wav"
with open(wavfile, "wb") as f:  # Write binary
    f.write(res2.content)

# 3. Play audio
subprocess.run(["aplay", wavfile])
os.remove(wavfile)

在这段代码中,可以在 audio_query 的 “speaker “和 “style_id “参数中指定扬声器;合成时必须使用完全相同的参数。

VOICEVOX 有 39 种不同的声音。

发言人名单:

当我运行它时,生成的 WAV 在几秒钟后就播放了。
我让它用子进程 aplay 播放,就像 OpenJTalk 一样。
生成语音的时间稍长,部分原因是 VOICEVOX 的音质更好。实时系统稍差,但语音听起来比 OpenJTalk 更自然。

VOICEPEAK 可用于商业用途

说起可用于商业用途的人工智能语音合成软件,打包产品 “VOICEPEAK “可谓家喻户晓。在 Youtube 上,使用这种语音的视频已经屡见不鲜。

事实上,它还兼容 Raspberry Pi 4。
不过,由于这款软件不支持 CLI(命令行),因此不能嵌入程序中使用。
可以将文件保存为音频文件,因此如果想使用预制的 WAV 文件,可以在程序中调用。

支持的操作系统:
Windows 11/10 或更高版本(64 位)
macOS 10.13 或更高版本
Ubuntu 20.04 或更高版本(64 位)
Raspberry Pi(型号:Raspberry Pi 4 / OS:树莓派操作系统(64 位)

由于它不能从程序中调用,因此在 Raspberry Pi 上使用它没有什么好处。

为 Raspberry Pi 打开 JTalk

最后,考虑到 Raspberry Pi 的性能,Open JTalk 是最佳选择:它速度快,易于 CLI 以及 Python 代码的使用,只需子进程+播放即可。
即使在 shell 脚本或 Python 中调用,Pi 5 和 CM5 系列也几乎没有延迟。
它可以通过 apt 软件包安装,这也是它成为最佳选择的原因之一。

如果您使用 WEB API,它还可以作为 TTS(文本到语音)实用工具,让它为通知说话。
Open JTalk 自 2018 年底以来没有更新过,但它很稳定。希望你能一试。

VOICEVOX 还可以选择说话者的声音,并可根据情况进行更改。(虽然语音语调太可爱,不适合商务用途……)。


文章由拉斯必达提供

非工程师也能愉快使用的 Raspberry Pi 信息网站 raspida.com一个非工程师也能享受和使用的 Raspberry Pi 信息网站。他还为 PiLink 网站提供有关工业用 Raspberry Pi 的技术博客文章