Einführung von openSMILE 3.0

,
Caro Bauer

Wir freuen uns, die Verfügbarkeit der nächsten Hauptversion 3.0 von openSMILE, audEERINGs Open-Source, plattformübergreifendem Audio-Feature-Extraktor, bekannt zu geben.

Mit mehr als 150.000 Downloads seit der ersten Veröffentlichung im Jahr 2010 und mehr als 2650 Zitaten in akademischen Arbeiten ist openSMILE zu einem äußerst beliebten Werkzeug in der Forschungsgemeinschaft, bei Audiounternehmen und Einzelpersonen geworden. Wir glauben fest daran, dass Forscher und Enthusiasten freien und uneingeschränkten Zugang zu den grundlegenden Werkzeugen haben sollten, die sie für ihre Arbeit und für neue Fortschritte in diesen Bereichen benötigen. Aus diesem Grund entwickelt und pflegt audEERING openSMILE weiter, indem es neue Funktionen hinzufügt, Fehler behebt, die Kompatibilität verbessert und Unterstützung für neue Plattformen hinzufügt. Die neue Version wird weiterhin unter der gleichen Lizenz wie die Vorgängerversionen zur Verfügung gestellt, d.h. kostenlos für Forscher und Einzelpersonen zur nicht-kommerziellen Nutzung.

openSMILE 3.0 auf GitHub

Beginnend mit Version 3.0 werden der Quellcode, die Binärdateien und die Dokumentation von openSMILE auf GitHub gehostet. Wir stellen vorgefertigte Binärdateien für 64-Bit-Linux, Windows und OS X zur Verfügung (generiert mit den Standard-Build-Flags, ohne externe Abhängigkeiten wie PortAudio oder FFmpeg). Wenn Sie eine dieser zusätzlichen Funktionen benötigen oder für eine andere Plattform bauen wollen, müssen Sie openSMILE selbst aus dem Quellcode kompilieren. Glücklicherweise wurde der Erstellungsprozess in Version 3.0 komplett überarbeitet und sollte auf den meisten Systemen problemlos funktionieren.

GitHub wird auch das neue empfohlene Zuhause für Nutzer sein, um über openSMILE zu diskutieren, Hilfe zu erhalten und Probleme zu melden und zu verfolgen. Es wird uns auch ermöglichen, Beiträge der Gemeinschaft zu akzeptieren.

Was ist neu in openSMILE 3.0

Die Version 3.0 ist der Höhepunkt einer mehrjährigen Entwicklung seit der letzten öffentlichen Version 2.3 von openSMILE. Daher gibt es zu viele Änderungen, um sie alle in diesem Blogbeitrag aufzulisten. Im Folgenden möchten wir Ihnen einige der bemerkenswertesten Verbesserungen vorstellen. Leser, die mit den Interna von openSMILE vertraut sind, sollten sich auch das technische Änderungsprotokoll mit einer detaillierteren Liste der Neuerungen ansehen.

opensmile Python-Paket

Als Teil von openSMILE 3.0 freuen wir uns, das opensmile Python-Paket ankündigen zu können, das es unglaublich einfach macht, openSMILE-Funktionen aus Python heraus zu nutzen.

Python ist zweifelsohne die Sprache der Wahl für Menschen, die im Bereich des maschinellen Lernens und der Datenwissenschaft arbeiten. Frühere Versionen von openSMILE waren in erster Linie als eigenständige Kommandozeilenanwendung gedacht. Das bedeutete, dass Anwender, die openSMILE in ihre Python-basierten Pipelines für maschinelles Lernen integrieren wollten, die ausführbare Datei SMILExtract manuell in ihren Skripten aufrufen und Daten über Audio-, CSV- oder WEKA-ARFF-Dateien hin- und herleiten mussten. Dieser Ansatz war oft mühsam einzurichten, generell fehleranfällig und in vielerlei Hinsicht ineffizient. Das neue opensmile Python-Paket bietet eine viel leistungsfähigere und effizientere Möglichkeit, die openSMILE-Merkmalextraktion mit Python durchzuführen. Die ersten Schritte sind so einfach wie das Ausführen:

$ pip installieren opensmile

Eine separate Installation von openSMILE ist nicht erforderlich.

Das Paket definiert eine objektorientierte Python-API, die einen Großteil der internen Komplexität von openSMILE verbirgt und der Einfachheit halber einen pandas.DataFrame zurückgibt. Das Extrahieren von akustischen Merkmalen der Basislinie von ComParE 2016 aus einer WAV-Datei wird so einfach wie möglich:

importieren openmile

smile = opensmile.Smile(
feature_set=opensmile.FeatureSet.ComParE_2016,
feature_level=opensmile.FeatureLevel.Functionals,
)

# Das Ergebnis ist ein pandas.DataFrame, das die Merkmale enthält.
y = smile.process_file(')audio.wav')

Anstatt die Eingabe aus einer Datei zu verarbeiten, können Sie auch ein numpy.ndarray mit rohen Audiodaten als Eingabe übergeben:


# x ist ein numpy.ndarray, das die Hörproben enthält
y = smile.process_signal(x, sampling_rate=16000)

Zusätzlich zu den Basisfunktionen von ComParE 2016 bietet die Bibliothek integrierte Unterstützung für eine Reihe anderer Konfigurationsdateien, die mit openSMILE geliefert werden. Natürlich ist es auch möglich, Ihre eigene, benutzerdefinierte Konfigurationsdatei zu erstellen.

Weitere Informationen über das Python-Paket finden Sie in der Dokumentation auf GitHub.

SMILEapi

Das Python-Paket basiert auf einer neuen Low-Level-C-API namens SMILEapi. Es bietet vollen programmatischen Zugriff auf alle Funktionen, die bereits vom Kommandozeilenwerkzeug SMILExtract angeboten werden, und bietet darüber hinaus erweiterte Möglichkeiten, Daten in Echtzeit an und von openSMILE zu übergeben. Während das Standalone-Tool weiterhin der empfohlene Weg ist, um neue Konfigurationsdateien zu entwickeln und eine manuelle Merkmalsextraktion über die Konsole durchzuführen, ist SMILEapi für Produktionsszenarien gedacht, in denen eine engere Integration von openSMILE gewünscht ist.

openSMILE wird mit Python- und C#-Wrappern für SMILEapi ausgeliefert, um den Aufruf der API aus diesen Sprachen heraus zu erleichtern. Weitere Informationen zu SMILEapi finden Sie in der Dokumentation.

Neue Komponenten

openSMILE 3.0 wird mit einer Reihe von neuen Komponenten ausgeliefert:

  • cDataPrintSink
  • cFunctionalModulation (aus Version 2.2 wieder eingefügt)
  • cFFmpegSource
  • cExternalSource
  • cExternalAudioSource
  • cExternalSink
  • cExternalMessageInterface
  • cVectorBinaryOperation

cDataPrintSink ist in erster Linie für Debugging-Zwecke gedacht und gibt Daten als Text auf der Standardausgabe oder in der Protokolldatei aus.

Die Komponente cFFmpegSource fügt eine FFmpeg-basierte Audiodateiquelle hinzu, mit der openSMILE fast jedes Audioformat lesen kann. Um diese Komponente nutzen zu können, müssen Sie die FFmpeg-Bibliotheken installiert haben und openSMILE aus dem Quellcode erstellen. Ersetzen Sie in jeder Konfigurationsdatei die Verwendung von cWaveSource durch cFFmpegSource, um die neue Komponente zu nutzen.

Die cExternal*-Komponenten sind speziell für die Interaktion mit der SMILEapi gedacht und ermöglichen die Weitergabe von Daten zwischen openSMILE und der Host-Anwendung.

Weitere Einzelheiten zu diesen und den anderen neuen Komponenten finden Sie im Abschnitt Komponenten der Dokumentation.

Neue Konfigurationsdateien

openSMILE 3.0 enthält ein kleines Update der GeMAPS- und eGeMAPS-Feature-Sets, das ein numerisches Stabilitätsproblem bestimmter Features behebt. Die ursprüngliche Version dieser Sets ist weiterhin als GeMAPS v01a und eGeMAPS v01a verfügbar, während die neue Version den Namen v01b trägt. Wir empfehlen, die neue Version für alle neuen Projekte zu verwenden. Aus Gründen der Rückwärtskompatibilität mit trainierten Modellen können Sie jedoch auch weiterhin die ursprüngliche Version verwenden.

Überarbeiteter Build-Prozess mit CMake

Die früheren Build-Skripte, die auf Autotools basierten, wurden modernisiert und mit CMake vollständig neu geschrieben. Der neue Prozess erleichtert die Anpassung des Builds, z. B. das Setzen von nicht standardmäßigen Build-Flags, die Verknüpfung mit externen Abhängigkeiten und die Verwendung von nicht standardmäßigen Compilern.

iOS-Unterstützung und überarbeitete Android-Integration

In openSMILE 3.0 wird neben Android, das seit Version 2.2 unterstützt wird, nun auch iOS als zweite mobile Plattform unterstützt. Die openSMILE-Distribution enthält zwei Beispielprojekte für Android Studio und Xcode, die zeigen, wie openSMILE mit Hilfe der SMILEapi in mobile Anwendungen integriert werden kann. Das in openSMILE 2.3 enthaltene Android-Beispiel wurde zu diesem Zweck komplett überarbeitet.

Verbesserungen bei Leistung und Speichernutzung

Die neue Version bringt eine Reihe bemerkenswerter leistungsbezogener Verbesserungen. Die größten individuellen Gewinne stammen aus Optimierungen der
cSpecScale- und cFunctionalsModulation-Komponenten (enthalten in z. B. GeMAPS und ComParE 2016 Feature Configs). In Kombination mit zahlreichen anderen Leistungsverbesserungen in der gesamten Codebasis sehen wir eine konsistente Reduzierung der Verarbeitungszeit für häufig verwendete Funktionen zwischen openSMILE 2.3 und 3.0 um 40-50 %:

openSMILE3 diagramCPU dunkel

Eine weitere wichtige Verbesserung wurde bei der Nutzung des Laufzeitspeichers für Datenspeicherebenen erzielt, die rohe Audiosamples speichern. Durch die Verringerung der Menge an Metadaten, die openSMILE intern für diese Ebenen speichert, konnten wir den Speicherverbrauch für gängige Feature-Sets um 80-90 % reduzieren:

openSMILE3 diagramRAM dunkel

HTML-Dokumentation

Die openSMILE-Dokumentation, die bisher als PDF-Datei zur Verfügung gestellt wurde (auch als "openSMILE-Buch" bekannt), ist nun online unter https://audeering.github.io/opensmile/ verfügbar. Viele Teile der Dokumentation wurden für diese Version überarbeitet und aktualisiert. Insbesondere enthält die Dokumentation nun Informationen aus dem eingebauten Komponenten-Hilfesystem von openSMILE, mit Beschreibungen und Parameterinformationen zu jeder openSMILE-Komponente. Diese Informationen waren bisher nur über den Hilfe-Befehl in SMILExtract zugänglich, sind nun aber auch online durchsuchbar. Sie finden sie in der Dokumentation unter der Rubrik Komponenten.

Farbige Log-Ausgabe

openSMILE hebt nun Teile von Logmeldungen je nach Typ der Logmeldung farblich hervor:

eingefärbtes Protokoll

Dies mag wie eine kleine Änderung erscheinen, kann aber sehr hilfreich sein, wenn Sie in einem langen, ausführlichen Protokoll nach Warnungen oder Fehlern suchen.

Nächste Schritte

Allen bisherigen Nutzern von openSMILE 2.x empfehlen wir dringend, auf die neue Version zu aktualisieren, um von den neuen Funktionen, Fehlerbehebungen und Leistungsverbesserungen profitieren zu können. Die Version 3.0 ist vollständig rückwärtskompatibel zu Konfigurationen, die für frühere Versionen erstellt wurden, so dass die Aktualisierung in den meisten Fällen sehr einfach sein sollte.

Bitte nutzen Sie den Issue Tracker auf GitHub, um uns Feedback zu geben und uns mitzuteilen, wenn Sie technische Probleme mit der neuen Version haben. Für kommerzielle Anfragen bezüglich der openSMILE-Lizenzierung oder unserer anderen Produkte kontaktieren Sie uns bitte unter info@audeering.com.