it-swarm.com.de

Open-Source-Code für die Spracherkennung und -unterscheidung

Ich habe 15 Tonbänder, von denen ich glaube, dass sie eine alte Aufnahme meiner Großmutter und meiner selbst enthalten. Ein schneller Versuch, den richtigen Ort zu finden, brachte es nicht auf. Ich möchte nicht 20 Stunden Band hören, um es zu finden. Der Speicherort befindet sich möglicherweise nicht am Anfang eines der Bänder. Der größte Teil des Inhalts scheint in drei Kategorien zu fallen - in der Reihenfolge der Gesamtlänge die längste zuerst: Stille, Sprechfunk und Musik.

Ich plane, alle Bänder in ein digitales Format umzuwandeln und dann erneut nach der Aufnahme zu suchen. Der naheliegende Weg ist, sie alle im Hintergrund abzuspielen, während ich andere Dinge tue. Für mich ist das viel zu einfach, also: Gibt es Open-Source-Bibliotheken oder anderen Code, der es mir ermöglicht, in der Reihenfolge der zunehmenden Komplexität und Nützlichkeit zu finden:

  1. Nicht-stille Regionen
  2. Regionen mit menschlicher Sprache
  3. Regionen mit meiner eigenen Rede (und der meiner Großmutter)

Ich bevorzuge Python, Java oder C.

Fehlgeschlagene Antworten, Hinweise zu Suchbegriffen würden ich begrüßen, da ich nichts über das Feld weiß.

Ich verstehe, dass ich leicht mehr als 20 Stunden damit verbringen könnte.

24
Croad Langshan

Was Sie wahrscheinlich die meiste Zeit sparen, ist die Verkündigung des Sprechers. Dies geschieht durch Kommentieren der Aufzeichnung mit Sprecher-IDs, die Sie dann mit sehr geringem Aufwand manuell an reale Personen zuordnen können. Die Fehlerraten liegen normalerweise bei etwa 10-15% der Aufzeichnungslänge, was schrecklich klingt. Dazu gehören jedoch, dass zu viele Lautsprecher erkannt und zwei IDs derselben Person zugeordnet werden, was nicht schwer zu reparieren ist.

Ein solches gutes Werkzeug ist SHoUT Toolkit (C++), auch wenn das Eingabeformat etwas wählerisch ist. Siehe Verwendung für dieses Tool from author . Es gibt Sprach-/Sprachaktivitätserkennung Metadaten UND Lautsprecherdarstellung aus, was bedeutet, dass Sie den 1. und 2. Punkt (VAD/SAD) und ein bisschen mehr erhalten, da sie mit Anmerkungen versehen, wann derselbe Sprecher aktiv ist in einer Aufnahme.

Das andere nützliche Werkzeug ist LIUM spkdiarization (Java), das im Grunde dasselbe tut, außer dass ich noch nicht genug Mühe gegeben habe, um herauszufinden, wie man VAD-Metadaten erhält. Es enthält ein Nizza-Paket downloadable .

Mit etwas Kompilieren sollte dies in weniger als einer Stunde funktionieren.

14
hruske

Die beste Option wäre, ein Open-Source-Modul zu finden, das Spracherkennung oder Sprecheridentifizierung (nicht Spracherkennung) durchführt. Die Sprecheridentifikation wird verwendet, um einen bestimmten Sprecher zu identifizieren, während die Spracherkennung gesprochenes Audio in Text umwandelt. Möglicherweise gibt es Open-Source-Sprecheridentifizierungspakete. Sie können beispielsweise SourceForge.net nach "Sprecheridentifikation" oder "Sprache UND Biometrie" durchsuchen. Da ich selbst keine verwendet habe, kann ich nichts empfehlen.

Wenn Sie nichts finden können, aber daran interessiert sind, eine eigene zu rollen, gibt es viele Open-Source-FFT-Bibliotheken für jede gängige Sprache. Die Technik wäre:

  • Erhalten Sie eine typische Aufnahme, in der Sie normal sprechen und Ihre Großmutter normal in digitaler Form spricht, mit möglichst wenig Hintergrundgeräuschen.
    • Nehmen Sie die FFT von jeder Sekunde Audio in den Zielaufnahmen auf
    • Filtern Sie aus dem Array von FFT-Profilen, die Sie erstellt haben, alle unterhalb einer bestimmten durchschnittlichen Energieschwelle, da diese höchstwahrscheinlich Rauschen sind
    • Erstellen Sie ein Master-FFT-Profil, indem Sie den Durchschnitt der nicht gefilterten FFT-Momentaufnahmen berechnen
    • Wiederholen Sie dann die FFT-Abtastmethode oben auf dem digitalisierten Ziel-Audio (die 20 Stunden).
    • Kennzeichnen Sie Bereiche in den Ziel-Audiodateien, in denen der FFT-Schnappschuss zu einem beliebigen Zeitpunkt Ihrem Master-FFT-Profil für Sie und Ihre Großmutter ähnlich ist. Sie müssen mit der Ähnlichkeitseinstellung spielen, damit Sie nicht zu viele Fehlalarme erhalten. Beachten Sie auch, dass Sie möglicherweise den Vergleich Ihrer FFT-Frequenzbereiche auf die Frequenzbereiche Ihres Master-FFT-Profils beschränken müssen, die über Energie verfügen. Andernfalls, wenn das Zielaudio von Ihnen und Ihrer Großmutter, die sprechen, erhebliche Hintergrundgeräusche enthält, wird Ihre Ähnlichkeitsfunktion ausgeschaltet.
    • Eine Liste der Zeitindizes für die manuelle Inspektion erstellen

Beachten Sie, dass die Anzahl der Stunden zum Abschließen des Projekts die 20 Stunden des manuellen Abhörens der Aufnahmen leicht überschreiten kann. Aber es wird viel mehr Spaß machen, als 20 Stunden Audiomaterial durchzubrennen, und Sie können die von Ihnen erstellte Software zukünftig wieder verwenden.

Wenn das Audio aus Datenschutzsicht nicht sensibel ist, können Sie die Audio-Audition-Aufgabe natürlich an etwas wie den mechanischen Trubel von Amazon auslagern.

5
Robert Oschler

Sie können auch pyAudioAnalysis versuchen, um:

  1. Stille Entfernung:

from pyAudioAnalysis import audioBasicIO as aIOfrom pyAudioAnalysis import audioSegmentation as aS[Fs, x] = aIO.readAudioFile("data/recording1.wav")segments = aS.silenceRemoval(x, Fs, 0.020, 0.020, smoothWindow = 1.0, Weight = 0.3, plot = True)

segments enthält die Endpunkte der Segmente ohne Stille.

  1. Klassifizierung: Unterscheidung von Sprache und Musik: pyAudioAnalysis enthält auch vorab trainierte Klassifizierer, mit denen unbekannte Segmente entweder in Sprache oder Musik klassifiziert werden können. 

wenn Sie mit Java vertraut sind, können Sie versuchen, die Audiodateien durch Minimieren zu füttern und einige FFT-Spektren zu berechnen. Die Stille könnte erkannt werden, indem ein Mindestpegel für die Amplitude der Abtastwerte festgelegt wird (um Rauschen auszuschließen). Um Sprache von Musik zu trennen, kann das FFT-Spektrum eines Zeitfensters verwendet werden. Sprache verwendet einige sehr unterschiedliche Frequenzbänder, die als Formanten Bezeichnet werden - insbesondere für Vovels -, dass Musik gleichmäßiger im Frequenzspektrum verteilt wird. 

Sie erhalten wahrscheinlich keine 100% ige Trennung der Sprach-/Musikblöcke, aber es sollte gut sein, die Dateien zu markieren und nur die interessanten Teile zu hören. 

http://code.compartmental.net/tools/minim/

http://en.wikipedia.org/wiki/Formant

3

Ich habe vor einem Blogartikel über die Verwendung der Windows-Spracherkennung geschrieben. Ich habe eine grundlegende Anleitung zum Konvertieren von Audiodateien in Text in C #. Sie können hier überprüfen.

2
mrtsherman

Zwei Ideen:

  • Schauen Sie in das Feld "Spracherkennung", zum Beispiel CMUSphinx
  • Audacity hat ein Werkzeug "Stille abschneiden", das nützlich sein kann.
2
Anders Lindahl
0
Kickaha