Voice-Recognition
Voice-Recognition
Hallo,
ich habe eine Frage bezüglich des Script-Examples der voice-recognition. Ich habe alle Schritte der Anleitung befolgt, klappt auch soweit, wenn ich jetzt aber zur online voice-recognition gelange, erhalte ich die Meldung: unable to create FFT Lesson
Wäre toll wenn mir jemand helfen könnte.
lg Crafter
ich habe eine Frage bezüglich des Script-Examples der voice-recognition. Ich habe alle Schritte der Anleitung befolgt, klappt auch soweit, wenn ich jetzt aber zur online voice-recognition gelange, erhalte ich die Meldung: unable to create FFT Lesson
Wäre toll wenn mir jemand helfen könnte.
lg Crafter
Re: Voice-Recognition
Hallo,
danke für die Rückmeldung!
Ich kann das Problem nun nachvollziehen, es scheint eine Timing-Sache zu sein: Wenn die Aufnahmezeit für den Erkennungsmodus kurz gewählt wird (Default ist hier 2 sec), dann kommt es offensichtlich gehäuft zu diesem Problem. Vielleicht benötigt der Hard Disk Ogg hier zu lange, um die Aufnahme zu starten, ich werde der Sache nachgehen.
Einstweilen hilft es, die Aufnahmezeit hochzusetzen:
In der Datei 'GlobalDefinitions.as', welche sich im Unterverzeichnis 'Includes' des VoiceRecognition Scripts befindet, steht oben die Zeile:
Diesen Wert erhöhen (z.B. auf den Wert 3) sollte als 'Workaround' funktionieren, bis ich das näher Problem eingekreist habe.
Viel Erfolg und Grüße
danke für die Rückmeldung!
Ich kann das Problem nun nachvollziehen, es scheint eine Timing-Sache zu sein: Wenn die Aufnahmezeit für den Erkennungsmodus kurz gewählt wird (Default ist hier 2 sec), dann kommt es offensichtlich gehäuft zu diesem Problem. Vielleicht benötigt der Hard Disk Ogg hier zu lange, um die Aufnahme zu starten, ich werde der Sache nachgehen.
Einstweilen hilft es, die Aufnahmezeit hochzusetzen:
In der Datei 'GlobalDefinitions.as', welche sich im Unterverzeichnis 'Includes' des VoiceRecognition Scripts befindet, steht oben die Zeile:
Code: Select all
// Overall recording duration per detection cycle during detection [s]
const uint OVERALL_REC_SECONDS_FOR_DETECTION = 2;
Viel Erfolg und Grüße
Thomas Jetter
Re: Voice-Recognition
Hallo Herr Jetter,
ich habe eine weitere Frage, nämlich wenn ich die Dateien nicht aufnehmen, sondern extern einfügen will, wie muss ich diese Dateien bearbeiten, dass sie verwendet werden können? Habe dies nämlich bereits probiert, die Dateien konnten jedoch nicht gelesen werden.
lg Crafter
ich habe eine weitere Frage, nämlich wenn ich die Dateien nicht aufnehmen, sondern extern einfügen will, wie muss ich diese Dateien bearbeiten, dass sie verwendet werden können? Habe dies nämlich bereits probiert, die Dateien konnten jedoch nicht gelesen werden.
lg Crafter
Re: Voice-Recognition
Was genau haben Sie denn versucht?Crafter wrote:Habe dies nämlich bereits probiert, die Dateien konnten jedoch nicht gelesen werden.
Das Script erwartet während des Trainings und der Erkennung eine Datei mit festem Namen im Arbeitsverzeichnis des Scripts. Diese Wave-Datei wird dann in eine Lesson eingelesen, eine FFT darüber berechnet, gemittelt und das Ergebnis dann je nach zu erkennendem Teilnehmer abgespeichert.
Wenn Sie also selbst vorgenerierte Wave Files nutzen möchten, dann müssen Sie diese vorher entsprechend oben beschriebenem Vorgang umwandeln.
Im Script geschieht dies in der Funktion
Code: Select all
/*
Convert the wave file (sWavePath) into a new lesson in the Lesson Editor and set the
new lesson to be the active one.
The wave file is read in by use of an object of the script class 'WaveFile'.
After reading in the file portions of length SAMPLE_COUNT_PER_SNIPPET are taken and transformed
to the frequency domain using an FFT transform. After the transformation the patterns are
averaged with respect to their inputs in order to fit into the specified input dimension
given by the constant INPUT_DIMENSION.
*/
void ConvertWaveToNewAveragedFftLesson()
...
Vielleicht haben Sie obiges aber auch schon versucht und es klemmt an dem speziellen Wave-File Format, das Sie verwenden?
Thomas Jetter
Re: Voice-Recognition
Hallo,
erstmal danke für die Antwort.
Ja ich habe die Datei bereits in Sample umbenannt und eine Methode weiter oben im Script aufgerufen, dass er die Aufnahme nicht durchführt, sondern gleich die Datei verwendet(so habe ich das zumindest gedacht). Daraufhin bekam ich die Meldung dass er die Datei nicht lesen kann. Was für ein wav-Format brauche ich denn direkt?
Vielen Dank für die Hilfe
Crafter
erstmal danke für die Antwort.
Ja ich habe die Datei bereits in Sample umbenannt und eine Methode weiter oben im Script aufgerufen, dass er die Aufnahme nicht durchführt, sondern gleich die Datei verwendet(so habe ich das zumindest gedacht). Daraufhin bekam ich die Meldung dass er die Datei nicht lesen kann. Was für ein wav-Format brauche ich denn direkt?
Vielen Dank für die Hilfe
Crafter
Re: Voice-Recognition
Die Implementierung für das Einlesen des Wave Files ist in der Klasse 'WaveFile' in der Script-Datei WaveFile.as zu finden.Crafter wrote:Was für ein wav-Format brauche ich denn direkt?
Diese kann im Moment nur WaveFiles des Formats 'PCM' einlesen.
Sie können mit Hilfe des Script-Debuggers auch einfach einmal in die Methoden der Klasse hinein Debuggen.
Dazu bitte vorher noch eine Anpassung vornehmen:
In der Datei 'VoiceRecognition.as' sind oben die anderen Script-Dateien includiert, mit Anweisungen wie z.B.:
Code: Select all
#include "Includes\\WaveFile.as"
Außerdem kann in der Datei 'GlobalDefinitions.as' die boolsche Variable 'DEBUG' auf true gesetzt werden. Dann werden ins Script-Trace-Fenster Debug-Ausgaben geschrieben, die in den Skripten untergebracht sind, z.B. in WaveFile.as.
Sollten Sie sich dazu entscheiden, die WaveFile.as auf weitere Formate zu erweitern, dann wäre das als eigener Post im Bereich Scripting natürlich schön
Viele Grüße und viel Erfolg!
Thomas Jetter
Re: Voice-Recognition
Hallo Herr Jetter,
ich habe auch noch eine Frage zu diesem Thema. Ich muss für mein W-Seminar Informatik in der Schule ein neuronales Netz in Membrain nachbauen/abwandeln/selbst erstellen, welches Altersklasse und Geschlecht einer Person anhand ihrer Stimme bestimmt. Hierzu habe ich ihre Datei Voice Recognition abgewandelt, also die Participants durch z.B. "jünger als 20, weiblich" ersetzt. Damit komme ich auf 8 "Participants" (Natürlich auch im Netz auf 8 Outputs erweitert) Für die Trainingsbeispiele würde ich gerne bereits aufgenommene Dateien im wav Format verwenden. Was müsste ich im Script ändern, um das Problem so zu lösen?
Danke für Ihre Antwort!
Sophia
ich habe auch noch eine Frage zu diesem Thema. Ich muss für mein W-Seminar Informatik in der Schule ein neuronales Netz in Membrain nachbauen/abwandeln/selbst erstellen, welches Altersklasse und Geschlecht einer Person anhand ihrer Stimme bestimmt. Hierzu habe ich ihre Datei Voice Recognition abgewandelt, also die Participants durch z.B. "jünger als 20, weiblich" ersetzt. Damit komme ich auf 8 "Participants" (Natürlich auch im Netz auf 8 Outputs erweitert) Für die Trainingsbeispiele würde ich gerne bereits aufgenommene Dateien im wav Format verwenden. Was müsste ich im Script ändern, um das Problem so zu lösen?
Danke für Ihre Antwort!
Sophia
Re: Voice-Recognition
Hallo,
Wenn Sie bereits aufgenommene Wave Files verwenden möchten, dann müssen Sie das Skript so umschreiben, dass es diese nacheinander einliest und jeweils eine MemBrain 'Lesson' daraus generiert bzw. diese für jedes Wave File um einen Eintrag erweitert. Dazu schauen Sie sich am besten an, wie in der Funktion eine einzelne Stimmprobe aufgenommen und anschließend die Funktion aufgerufen wird:
Die Variable ist eine skriptglobale Variable. Diese müssen Sie jeweils vor dem Aufruf der Funktion auf den jeweils korrekten Dateipfad setzen, analog zum Code oben. D.h., bei Ihnen würden in einer Schleife alle Participants abgearbeitet (Variable muss hierfür jeweils gesetzt werden) und für alle Wave Files jedes Participants die Funktion aufgerufen, nachdem die Variable jeweils so gesetzt wurde, dass sie auf die entsprechende Wave-Datei zeigt. Die Funktion würden Sie NICHT aufrufen, sie ist dazu da, neue Wave-Files aufzuzeichnen.
Das Ganze packen Sie am besten in eine vollständig neue Funktion, ich würde sie z.B. nennen. Diese können Sie dann zu Beginn des Skriptes optional aufrufen (vielleicht mit einer entsprechenden Rückfrage an den Benutzer).
Genügt das als 'Wegweiser'?
Viele Grüße und viel Erfolg!
Wenn Sie bereits aufgenommene Wave Files verwenden möchten, dann müssen Sie das Skript so umschreiben, dass es diese nacheinander einliest und jeweils eine MemBrain 'Lesson' daraus generiert bzw. diese für jedes Wave File um einen Eintrag erweitert. Dazu schauen Sie sich am besten an, wie in der Funktion
Code: Select all
void CollectTrainData()
Code: Select all
BuildParticipantLesson
Code: Select all
switch (ret)
{
case IDYES:
// Build full path for target wave file and start recording. If the user accepted the sample then
// convert the data and add it to the participant's training data lesson.
sWavePath = sWorkDir + "\\" + PARTICIPANT_DIR + "\\"+ participantName + "\\" + WAVE_FILE_NAME;
if (RecordParticipant())
{
BuildParticipantLesson();
}
break;
Code: Select all
sWavePath
Code: Select all
BuildParticipantLesson()
Code: Select all
sCurParticipantIdx
Code: Select all
BuildParticipantLesson
Code: Select all
sWavePath
Code: Select all
RecordParticipant
Das Ganze packen Sie am besten in eine vollständig neue Funktion, ich würde sie z.B.
Code: Select all
ImportExistingWaveFiles
Genügt das als 'Wegweiser'?
Viele Grüße und viel Erfolg!
Thomas Jetter