Speech-to-Text

Für den Audio-Lesen-Testschritt kann ein Speech-to-Text-Service konfiguriert werden. Standardmäßig unterstützt ecu.test aktuell die Spracherkennung der Windows SAPI. Darüber hinaus können nutzerdefinierte Speech-to-Text-Services über UserPyModules angebunden werden.

Benutzerdefinierte Spracherkennung

Die Spracherkennung lässt von einem Speech-to-Text-Service eine Audiodatei in einen Text umwandeln um diesen anschließend mit einem Referenztext vergleichen zu können. Um in ecu.test für Spracherkennung verfügbar zu sein, muss ein Python-Script bestimmte Voraussetzungen erfüllen:

  • Das Skript muss sich unterhalb des UserPyModules-Ordners im Workspace befinden

  • Auf oberster Ebene muss MODULE_TYPE = ‚SpeechToTextService‘ definiert sein.

  • Die Datei muss eine Klasse „SpeechToTextService“ enthalten.

  • Diese Klasse muss die Methoden __init__, GetProfiles, RecognizeText, GetFileExtensions und GetServiceId implementieren.

  • Es darf nicht zwei SpeechToTextServices mit derselben Service Id geben.

  • Profile können anhand von Name und Sprache eindeutig identifiziert werden.

Neu erstellte Speech-to-Text-Services sind nach dem Aktualisieren der Benutzerbibliotheken verfügbar. Dies können Sie in ecu.test im Menü „Extras“ tun.

Minimaler SpeechToTextService anhand eines Beispiels

Dies ist ein Beispiel für eine nutzerdefinierte Spracherkennung

MODULE_TYPE = 'SpeechToTextService'


class SpeechToTextService:
    """
    Test SpeechToTextService that returns static strings
    """

    def __init__(self):
        self._profiles = {
            'Default EN': 'en',
            'Default DE': 'de',
            'FancyAlgorithm DE': 'de',
        }

    def GetProfiles(self) -> list[tuple[str, str]] | list[tuple[str, str, str]]:
        """
        Returns list of available profiles as tuple (name, language) or
        (name, language, description). The name has to be unique.
        """
        return [(key, value) for key, value in self._profiles.items()]

    def RecognizeText(self, filePath: str, profileName: str, language: str) -> str:
        if profileName not in self._profiles.keys():
            raise RuntimeError(f'Profile {profileName} not found. Available profiles: '
                               f'{self.GetProfiles()}')

        if profileName == 'Default EN':
            return 'I\'m afraid I can\'t do that, Dave.'

        if profileName == 'Default DE':
            return 'Das kann ich nicht tun, Dave.'

        if profileName == 'FancyAlgorithm DE':
            return 'Gehirne der Serie 9000 sind die besten Computer, die jemals gebaut worden ' \
                   'sind. Kein Computer der Serie 9000 hat jemals einen Fehler gemacht oder ' \
                   'unklare Informationen gegeben. Wir alle sind hundertprozentig zuverlässig ' \
                   'und narrensicher - wir irren uns nie.'
        return ''

    @staticmethod
    def GetFileExtensions() -> list[str]:
        """
        Supported extensions for audio files.
        """
        return ['wav', 'flac', 'mp3', 'ogg']

    @staticmethod
    def GetServiceId() -> str:
        """
        Service name as to be displayed in the voice selection.
        """
        return 'FakeSTT'

Erklärung der verfügbaren Methoden

Klasse „SpeechToTextService“

Diese Klasse muss vom Python-Skript implementiert werden.

__init__

Diese Methode muss ohne Argumente implementiert werden, darf aber leer sein.

GetProfiles

Diese Methode liefert eine Liste der Profile, also beispielsweise Erkennungsalgorithmus und Sprache, die für diesen Speech-to-Text-Service verfügbar sind. Die Angabe erfolgt als Tupel (Name, RFC 5646 Sprachcode, optional: Beschreibung). Die Profile werden in der Testkonfiguration nach folgendem Format gelistet: „<service id>: <profile name>[, <description>] (<language>)“.

RecognizeText

Diese Methode erkennt in der übergebenen Audiodatei gesprochenen Text und gibt diesen als String zurück.

  • für die Audiodatei unter dem Pfad filePath

  • mit dem gewünschten Profil profileName des Moduls

  • und der Sprache language des übergebenen Profils.

GetFileExtensions

Von der Spracherkennung unterstützte Audioformate bzw. Dateiendungen als Liste von Strings, beispielsweise [‚wav‘, ‚flac‘, ‚mp3‘, ‚ogg‘].

GetServiceId

Eindeutiger Bezeichner des Speech-to-Text-Services.