Vortrag Idee

Dieser Teil des Projektes beschäftigt sich mit der Implementation eines Tools zur Aufnahme von Sprachdateien. Wir haben dieses Tool in Java mittels Java.Sound implementiert. Wir benutzen ein Programm "SilenceSupressingAudioRecorder.java" von www.tritonus.org. Tritonus ist eine unabhängige Implementation der Java Sound API.

Unser Programm gliedert sich in zwei Teile: Der eine Teil dient zum Hinzufügen eines neuen Benutzers zum System und der andere Teil zur Identifizierung eines Benutzers, der sich an dem System anmeldet. Die Sprachdaten werden in eine .wav-Datei gerspeichert.

Probleme bei der Aufnahme: Hintergrundgeräusche, Mikrophon, usw.

Anfangs wurde die "Stille" manuell entfernt. In dieser .wav-Datei wird nun die "Stille" herausgeschnitten indem erst der Schwellwert dynamisch aus dem Mittelwert der Mittelwerte der Frames berechnet, und dann alle Frames, deren Mittelwert unter diesem Schwellwert liegt, herausgeschnitten werden. Wir verwenden hierfür eine veränderte Version des Programmes von Tritonus.

Es ist insofern besser einen dynamischen Schwellwert für das herausschneiden der Stille zu benutzen, da bei einem statischen Schwellwert das Problem auftauchen könnte, dass bei verschiedenen Signalen zuviel oder zuwenig herausgeschnitten wird. Wir hatten zuvor, als wir noch mit einem statischen Schwellwert gearbeitet hatten versucht, das Problem dadurch zu lösen, dass wir das Signal vorher zu einem bestimmten Wert normalisieren. Dieser Ansatz ist dadurch gescheitert, dass wird damit ebenfalls die Hintergrundgeräusche normalisiert haben und somit das Problem beibehielten.

Die Ergebnisse sind zwar nicht so perfekt wie jene, bei denen die Stille manuell herausgeschnitten wurde, aber sie erfüllen ihren Dienst.

Momentan werden 2 Sprachproben eines Benutzers gesammelt, um später damit den individuellen Schwellwert zu berechnen. Beide Sprachproben werden hintereinander aufgenommen. Es wäre besser einige Tage abstand zwischen den Proben zu haben, damit es "verschieden" Versionen gibt.

Es kann immernoch passieren, dass ein Buchstabe entfernt wird oder ein starkes Geräusch im Signal bleibt.

Nachdem 2 Sprachproben aufgenommen wurden wird der neue Benutzer in einer XML-Datenbank gespeichert, wobei folgende Struktur verwendet wird:

< users>

< user idUser=1>

< name>test< /name>

< password textPass="Hallo maschine" threshold="value">

< passfile version="1">1test1.wav< /passfile>

< passfile version="2">1test2.wav< /passfile>

< /password>

< /user>

< /users>

Falls wir das System später erweitern wollen, z.B. mehrere Passwörter, brauchen wir nur sehr wenig an der Struktur der XML-Datenbank ändern, z.B. nur einen neuen Tag für ein neues Passwort einfügen.

Jeder Benutzer bekommt eine einmalige Id-Nummer, die den ersten Teil des Dateinamens bildet. Der zweite Teil des Dateinamens ist der Benutzername. Und der dritte Teil ist die Nummer der Sprachprobe. Wobei die Id und die Nummer der Sprachprobe natürliche Zahlen über 0 sind.

Es können keine zwei Benutzer mit dem selben Benutzernamen existieren.

Danach wird beim Hinzufügen eines neuen Benutzers von beiden Sprachproben die Merkmale gewonnen. Beim Identifizieren werden natürlich nur die Merkmale der Datei "testuser.wav" gewonnen.

Es werden die Dateinamen und die Schwellwerte für alle Benutzer aus der XML-Datenbank herausgenommen und an den Ähnlichkeitsvergleich weitergegeben. Beim Hinzufügen zur Neuberechnung der individuellen Schwellwerte der Benutzer und Passwörter. Beim Identifizieren dienen diese zum Vergleich der Benutzer mit der Sprachprobe, die identifiziert werden soll, um zu erkennen um es sich um einen registrierten Benutzer handelt und wenn ja wen.

-- DennisGoetsch -- 01 Jul 2004

Warning: Can't find topic SpeakerId.WebLeftBarExample

 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback