Ich habe viele Fragen zu SO gelesen, und ehrlich gesagt beschreibt jede von ihnen keinen bestimmten Weg, um dies zu erreichen. Einige sagen "do FFT" und andere sagen "Nulldurchgang" usw. Aber ich bin nur so weit gegangen zu verstehen, dass der digitale Audioeingang aus einer Reihe von Amplituden für eine bestimmte Frequenz besteht und gut. Ich weiß nicht wirklich viel darüber hinaus.
Jetzt kenne ich den Nyquist-Satz, die Frequenz, die Amplitude, die Fourier-Reihe usw., und das war vor zwei bis drei Jahren, als ich das in einem Semester in meinem Universitätsprogramm gemacht habe. Aber damals wurde uns die reale Verwendung von Fourier wirklich nicht viel beigebracht, und ich habe mich nicht darum gekümmert, mehr über das Thema zu lernen, als nur genug zu lernen, um das Thema zu bestehen. Aber jetzt muss ich all das Zeug benutzen.
Hier ist eine Momentaufnahme der Geräusche, die ich zu erkennen versuche:
Offensichtlich haben die Sounds einzigartige Grafiken. Ich möchte nur verstehen, wie man ihre besonderen Eigenschaften für ihre einzigartigen stacheligen Linien in der Grafik extrahiert. Wie welche Amplitude, Frequenz usw. Und für wie viel Zeit - obwohl das trivial ist, denke ich.
Ich möchte eine einfache Schritt-für-Schritt-Liste mit nicht vagen Anweisungen - ich kann die Terminologie googeln, die ich nicht verstehe.
Wie vielleicht das? - -
Erhalten Sie Audio-Eingabedaten
Plotspektogramm
Erhalten Sie ein Spektogrammdiagramm für den Ton, den Sie in einer geräuschlosen Umgebung erkennen möchten
Studieren Sie diese Grafik - zeichnen Sie einzigartige Eigenschaften dieses Klangs
Erstellen Sie eine Funktion, mit der diese besonderen Merkmale im Live-Audio-Feed anhand der in (4) enthaltenen Merkmale des Klangs erkannt werden können.
Wenn eine Übereinstimmung gefunden wird, ist die Arbeit erledigt.
Polieren Sie den Algorithmus, um falsche Negative auszusortieren.
Wo ich verwirrt bin ist - wie gehe ich etwa 3,4,5. Insbesondere 3 und 4. Da ich eine Software erstelle, in der der Benutzer jeden Ton als Gesteingabe zur späteren Verwendung aufzeichnen kann, möchte ich, dass mein System jeden Ton aufzeichnen und mit Live-Audio abgleichen kann Feed, um diese Klanggeste zu erkennen. Zum Beispiel Husten oder Fingerschnippen oder Pfeifen oder Klatschen. Oder sagen Konsonanten - oder oder oder . Fast jeder Ton.B X Z.
Ich dachte daran, den Benutzer dazu zu bringen, den Ton, den er speichern möchte, als Geste in einer ruhigen Umgebung aufzunehmen. Und der Benutzer würde den Ton nur zwischen dem leisen Auffüllen der Zeit machen ; 3 Sekunden am Anfang und am Ende der Aufnahme.
Nehmen wir also an, mein System würde während der ersten 3 Sekunden feststellen, dass der aktuelle Eingang der normale leise Hintergrundton ist. Und dann würde eine plötzliche Änderung in der Grafik den Toneingang starten. Und wenn das aufhört, wird die Aufnahme noch 3 Sekunden lang fortgesetzt, wobei die nachlaufende leise Zeit aufgefüllt wird . Dies würde manuell vom Benutzer durchgeführt. Es würde dann automatisch nur die Eigenschaften des Teils speichern, während dessen die plötzliche Änderung des Diagramms andauerte - irgendwo zwischen den Auffüllzeiten.
Und so würden die Eigenschaften dieses Teils als Gesten-Daten dieses Sounds gespeichert, die später verwendet würden, um diesen bestimmten Sound im Live-Audio-Feed zu erkennen.
Das Problem ist, dass ich das alles in einfachem Englisch denke. Ich muss in Mathematik und Physik denken, um es effizient in meinen Code implementieren zu können. Ich habe einfach keine Ahnung, was ich schreiben soll und wo ich es in meinen Code schreiben soll - selbst wenn mir so viele Bibliotheken und Fragen zu SO zur Verfügung stehen.
Und tut mir leid, wenn das lang war.
quelle
Antworten:
Ich stimme zwar einem der Kommentare zu, dass die Verwendung von Spracherkennungstechniken ein guter Anfang sein könnte, aber diese Geräusche sind unterschiedlich, und mir ist nicht bekannt, dass jemand Nachforschungen angestellt hat, um sie zu kategorisieren (das von Nathan zitierte Papier scheint nur zwischen Sprache zu unterscheiden und Lärm). Wenn also nicht jemand etwas präsentiert, das dem widerspricht, müssen Sie Ihre eigene Technik erfinden, und das erfordert viel Lernen und viel Arbeit. Das Beste, was ich tun kann, ist, Ihnen den Einstieg zu erleichtern.
Erwarten Sie zunächst nicht, dass jemand eine Zauberformel herstellen kann. Es gibt keine Gleichung, um vom Klang zum Klang zu gelangen. Menschen und Computer müssen lernen, indem sie Daten einbeziehen, um fundierte Vermutungen darüber anzustellen, was Geräusche sind. Der Grund, warum die Leute in ihren Antworten "FFT verwenden" oder "Nulldurchgang verwenden" sagen, ist, dass dies einige der grundlegenden DSP-Bausteine sind, die bei der Spracherkennung und verwandten Algorithmen verwendet werden. Die FFT und die Nulldurchgangsrate sind jedoch normalerweise nur die ersten Schritte bei der Erstellung einer Reihe von Parametern, die den Klang beschreiben. Diese Parameter werden dann statistisch analysiert (nicht durch eine magische Funktion), um zu bestimmen, zu welcher Kategorie sie höchstwahrscheinlich gehören. Beachten Sie, dass ich "höchstwahrscheinlich" sagte: sogar die beste Spracherkennung (und das menschliche Gehirn!
Zu den Parametern, nach denen Sie suchen könnten, gehören:
Sobald Sie eine Reihe von Parametern haben, mit denen Sie Ihrer Meinung nach Ihre Sounds unterscheiden können, müssen Sie eine statistische Methode verwenden, um sie zu kategorisieren. Das Hidden-Markov-Modell wird häufig in der Sprache verwendet. Sie können sich auch mit logistischer Regression befassen, K-bedeutet, und ich bin sicher, dass es andere Möglichkeiten gibt, aber ich denke, HMM hat sich bewährt.
quelle
Ich habe dieses Papier zum entropiebasierten End Pointing verwendet, als ich versucht habe, diese Art von Geräuschen in Telefonanrufen zu ignorieren, die für die Spracherkennung am Computer verwendet werden. Wenn die Geräusche, die Sie erfassen möchten, Sprache sind, kann Entropie für Musik sehr gut funktionieren, für Musik möglicherweise nicht nützlich sein.
quelle
Ich denke, Björns Empfehlungen sind sehr gut, aber ich möchte einige zusätzliche Informationen liefern. Nach Ihrer Beschreibung klingt dies sehr nach einem Problem bei der Identifizierung der Klangfarbe. In diesem Bereich gibt es einige Untersuchungen zu Computermusikkontexten (die Identifizierung verschiedener Instrumente ist eine nützliche Sache, und der Unterschied zwischen einem Knacken und Klatschen ist auf die Klangfarbe des Klangs zurückzuführen). William Brenthat in diesem Bereich einige Nachforschungen angestellt (suchen Sie auf seiner Seite nach timbreID) und eine Software zur Verwendung in Pure Data erstellt. In jeder Situation, in der Sie nach bestimmten Ereignissen suchen, ist eine automatische Segmentierung durch Erkennung des Beginns eine gute Idee. Da Sie bereits eine STFT durchführen, würde die Bestimmung eines Beginns nicht zu viel zusätzliche Arbeit erfordern (siehe Erkennung des Beginns des Spektralflusses). Eine Systemübersicht könnte wie folgt aussehen:
Ausbildung
Einstufung
Dieses Papier zur Identifizierung perkussiver Klangfarben könnte von Nutzen sein. Es enthält Definitionen für potenzielle Merkmale, die anhand des eingehenden Tons und der Klassifizierungsmethode des Autors berechnet werden können. Dies funktioniert ziemlich gut für perkussive Klänge, funktioniert aber möglicherweise nicht so gut für etwas wie Sprache (mehrere Silben). In diesem Fall wäre eine HMM-Methode besser geeignet. In ähnlicher Weise hängt die Genauigkeit Ihrer Onset-Erkennung von der Art der gesuchten Sounds ab.
Wenn Sie sich besonders Gedanken über Schnappschüsse und Lichtschalter machen, sollten Sie einige Zeit damit verbringen, herauszufinden, welche Funktionen die beiden Geräusche genau unterscheiden können.
quelle