Sprachalarmierung mit Raspy kommuniziert Geräteanomalien

Mit TTS (Text To Speech) auf dem Raspberry Pi können Sie ihn dazu bringen, aus einem Text in natürlicher Sprache zu sprechen. Vor allem, wenn es sich um einen festen kurzen Satz handelt, kann dieser sogar bei der Leistung des Raspberry Pi nahezu in Echtzeit wiedergegeben werden.

Es kann in einer Vielzahl von Situationen eingesetzt werden, aber in industriellen Anwendungen ist es ein effektives Mittel für Fabrikhallen und andere Umgebungen, in denen Sensoren verwendet werden.
Nachdem eine Anomalie von einem Sensor oder ein Systemereignis von einem Gerät empfangen wurde, wird ein Alarm generiert und kann per Sprache über TTS mitgeteilt werden.

Selbst wenn das TTS nicht in ein bestehendes System integriert ist, kann es über eine API oder auf andere Weise mit einem Raspberry Pi verbunden werden, der mit TTS ausgestattet ist, um Sprachbenachrichtigungen und eine einfache Steuerung zu ermöglichen.
In dieser Ausgabe stellen wir eine Sprachsynthese-Software vor, die mit dem Raspberry Pi OS bookworm auf dem PL-R5m Industrie-Raspi verwendet werden kann, zusammen mit Codebeispielen.

Audio-Ausgang

Der PL-R5M industrial Raspberry Pi verfügt nicht über eine Audioausgangsbuchse. Der Raspberry Pi 5 verfügt ebenfalls nicht über eine 3,5-mm-Stereo-Klinkenbuchse, so dass er für die Audioausgabe auf die Lautsprecher des HDMI-Monitors angewiesen ist.
In Umgebungen, in denen das Gerät nicht an einen Monitor angeschlossen ist, wird kein Ton zu hören sein. Verwenden Sie in diesem Fall USB-angeschlossene Lautsprecher.

Nützliche Befehle zum Überprüfen der Audioausgabe:

# USB接続デバイスを調べる
lsusb
# デバイス番号を調べる
aplay -l
# Audioの出力先を調べる
sudo raspi-config
# サンプルサウンド再生
aplay /usr/share/sounds/alsa/Front_Center.wav

In diesem Fall erfolgt die Ausgabe über die an den PL-R5M angeschlossenen Monitorlautsprecher.

Open JTalk

Open JTalk is a speech synthesizer for use with the Raspberry Pi that runs nimbly with little memory.
Installation is also easy since it is an apt command.

Es gibt drei zu installieren.

  • open-jtalk –> Körper
  • open-jtalk-mecab-naist-jdic –> Wörterbuchdaten
  • hts-voice-nitech-jp-atr503-m001 –> Akustisches Modell
sudo apt update
sudo apt install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001

Unterstützt Paketmanager wie Docker, Homebrew, Node.js, .

Per Befehl ausführen

Open JTalk kann mit Befehlen ausgeführt werden. Führen Sie den folgenden Befehl auf einem Terminalbildschirm aus, indem Sie ihn kopieren und einfügen, um zu sehen, ob es irgendwelche Fehler gibt.

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
  • Die Option -x ist der Pfad zur Wörterbuchdatei
  • Option-m ist das verwendete Sprachmodell
  • Option-ow ist der Name der ausgegebenen WAV-Datei

Wenn ein kurzer, in ECHO geschriebener Satz sofort vom Sprecher gehört wird, ist dies ein Erfolg.

Befehl + kurzer Satz zum Ausführen

Es ist bequemer, den Befehl als Shell-Skript auszuführen, als jedes Mal die Argumentoptionen im Befehl anzugeben.
Angenommen, Sie speichern den folgenden Code als jvoice-m.shund führen ihn als sh jvoice-m.sh "こんにちは"in demselben Verzeichnis aus, in dem sich auch die sh-Datei befindet.

#!/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

Wenn Ausführungsrechte gewährt werden, wird sie sogar noch kürzer sein.

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

Den Benutzer Sätze sprechen lassen, die zuvor in Text gefiltert wurden (Shell-Skripte)

Wenn Sie nun möchten, dass der Reader einen Text liest, der etwas länger als ein kurzer Satz ist, speichern Sie ihn in einer Textdatei und laden Sie sie.
Beachten Sie, dass es bei einem langen Text eine Zeitverzögerung bis zur Wiedergabe geben wird.

Als Beispiel habe ich zwei Zeilen eines Wikipedia-Zitats ausprobiert. Mit der Leistung des PL-R5m, die der des Pi 5 und CM5 entspricht, wurde es nach etwa 1 Sekunde abgespielt.

Open JTalk ist eine Text-to-Speech-Software, die am Nagoya Institute of Technology für die japanische Sprache entwickelt wurde.
Es gibt zwei Versionen: eine eigenständige Version, die als Open Source erhältlich ist, und eine Online-Version, die auf der Website verfügbar ist.
Zitiert von: https://ja.wikipedia.org/wiki/Open_JTalk

Inhalt des Shell-Skripts:

#!/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

Dieser Code lässt es nicht zu, dass es in einer temporären Datei generiert und dann gelöscht wird, wie es vorher gemacht wurde.
Es wird als jvoice.wav im Home-Verzeichnis generiert und bleibt intakt.

Fügen Sie eine weibliche mei (mei) Stimme hinzu.

Ich werde auch eine weibliche Stimme hinzufügen. ver. 1.8.
In der Raspberry Pi-Umgebung wird das aus der Zip-Datei entnommene Verzeichnis in dem angegebenen Verzeichnis abgelegt.

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

Verschieben Sie die Datei nach dem Entpacken nach /usr/share/hts-voice/.

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

Auch wenn der Code derselbe ist wie bei der männlichen Stimme, die wir gerade ausprobiert haben, versuchen wir es mit einer Änderung des Pfades, der das Argument von -m ist (Zeile 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

Die heruntergeladene Audiodatei „Mai“ enthält fünf verschiedene Stile für unterschiedliche Emotionen.

mei_angry.htsvoice (wütend)
mei_happy.htsvoice (glücklich)
mei_sad.htsvoice (traurig)
mei_bashful.htsvoice (schüchtern)
mei_normal.htsvoice (normal)

Sie können auch eine andere weibliche Stimme ausprobieren, tohoku-f01. Sie können sie verwenden, indem Sie sie auf dieselbe Weise in /usr/share/hts-voice/kopieren.
tohoku-f01: https://github.com/icn-lab/htsvoice-tohoku-f01

Open JTalk in Python ausführen

Es folgt ein Beispielcode, der in Python ausgeführt wird.python3 test_openjtalk.pyGespeichert als

Beispiel für die Verwendung in einem Unterprozess:

import subprocess

# 入力テキスト
text = "こんにちは。ラズパイダからのお知らせです。"

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

# Open JTalk のコマンド実行
# -m で声質ファイル (HTS Voice)、-x で辞書を指定
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"
])

# 再生(aplayコマンド利用)
subprocess.run(["aplay", "output.wav"])

Bei Verwendung mit subprocess ist sie leichtgewichtig und wird sofort wiedergegeben.
Für kurze Benachrichtigungszwecke ist die Wiedergabe in einem Abspiel mit Unterprozess geeignet. Sie ist notwendig und ausreichend.

VOICEVOX

VOICEVOX, a free software that can also be used commercially, is another excellent text-to-speech software.
If you are using it on a Raspberry Pi, you can install the OSS version of VOICEVOX, which is different from the commercial version.

Wenn Sie jedoch die Binärdatei der arm64-Version so herunterladen, wie sie ist, wird sie aufgrund von Abhängigkeitsfehlern nicht auf dem Raspberry Pi funktionieren.
Wenn Sie es mit Docker verwenden, funktioniert es ohne Fehler.
Da das Format über eine API verwendet wird, ist es für Benachrichtigungen recht praktisch.

Um VOICEVOX auf einem Raspberry Pi zu installieren und zu verwenden, bereiten Sie einfach die Datei docker-compose.yamlund compose upvor, nachdem Sie Docker installiert haben. ( ~/VOICEVOX を作成して実行しました)

Docker-Installation:

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

# ルートレス化(管理者権限(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

Start des Containers:

docker compose up -d

Wenn auf die angegebene Portnummer ( http://localhost:50021/docs) zugegriffen wird, wird sie in der Swagger-Benutzeroberfläche angezeigt und kann mit der REST-API verwendet werden.

In diesem Fall wurde der folgende Python-Code verwendet, um das Programm einzurichten und auszuführen.
Das standardmäßige (Standard-)Betriebssystem des Raspberry Pi enthält das requests-Modul nicht, daher wird es weiterhin mit pip installiert.pip3 install requests

VOICEVOX Python Code Beispiel:

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:  # バイナリ書き込み
    f.write(res2.content)

# 3. 音声再生
subprocess.run(["aplay", wavfile])
os.remove(wavfile)

In diesem Code können die Lautsprecher in den Parametern „speaker“ und „style_id“ der audio_query angegeben werden; für die Synthese müssen genau dieselben Parameter verwendet werden.

In VOICEVOX gab es 39 verschiedene Arten von Stimmen.

Rednerliste:

Als ich es ausgeführt habe, wurde die erzeugte WAV nach ein paar Sekunden abgespielt.
Ich lasse es mit dem Unterprozess aplay wiedergeben, genau wie OpenJTalk.
Die Generierung dauert etwas länger, auch weil VOICEVOX eine bessere Tonqualität hat. Das Echtzeitsystem ist etwas schlechter, aber die Sprache klingt natürlicher als bei OpenJTalk.

VOICEPEAK für die kommerzielle Nutzung verfügbar

Wenn wir von KI-Sprachsynthese-Software sprechen, die kommerziell genutzt werden kann, ist das Paketprodukt „VOICEPEAK“ sehr bekannt. Youtube-Videos, die diese Stimme verwenden, sind alltäglich geworden.

Es ist sogar mit dem Raspberry Pi 4 kompatibel.
Da es jedoch die CLI (Befehlszeile) nicht unterstützt, kann es nicht eingebettet in ein Programm verwendet werden.
Sie können die Datei als Audiodatei speichern. Wenn Sie also eine vorgefertigte WAV-Datei verwenden möchten, können Sie diese im Programm aufrufen.

Unterstützte Betriebssysteme:
Windows 11/10 oder höher (64-bit)
macOS 10.13 oder höher
Ubuntu 20.04 oder höher (64-bit)
Raspberry Pi (Modell: Raspberry Pi 4 / OS: Raspberry Pi OS (64-bit))

Da es nicht von einem Programm aus aufgerufen werden kann, bietet es kaum Vorteile, es auf dem Raspberry Pi zu verwenden.

JTalk für Raspberry Pi öffnen

Letztendlich war Open JTalk bei der Leistung des Raspberry Pi die beste Wahl: es ist schnell und einfach für CLI- und Python-Code mit nur subprocesss+aplay.
Selbst wenn Sie es in Shell-Skripten oder Python aufrufen, gibt es bei Pi 5 und der CM5-Serie fast keine Verzögerung.
Die Tatsache, dass es mit dem apt-Paket installiert werden kann, ist einer der Gründe, warum es die beste Wahl ist.

Es ist praktisch als TTS (Text To Speech), um es für Benachrichtigungen sprechen zu lassen, wenn Sie mit der WEB API arbeiten.
Open JTalk wurde seit Ende 2018 nicht mehr aktualisiert, aber es ist stabil. Ich hoffe, Sie werden es ausprobieren.

VOICEVOX ist auch nützlich, um die Stimme des Sprechers zu wählen, die je nach Situation geändert werden kann. (Obwohl die Stimme für den geschäftlichen Gebrauch zu niedlich ist…)


Artikel beigetragen von Raspida

Raspberry Pi-Informationsseite, die auch von Nicht-Ingenieuren genutzt werden kann raspida.com eine Raspberry Pi-Informationsseite, die auch für Nicht-Ingenieure interessant ist und mit der sie umgehen können. Er schreibt auch technische Blogartikel auf der PiLink-Website über den Raspberry Pi für den industriellen Einsatz.