J'ai lu beaucoup de questions sur SO, et franchement, chacune d'elles ne décrit aucune façon particulière de s'y prendre. Certains disent "faire FFT" et certains disent "passage à zéro" etc. Mais je ne suis allé jusqu'à comprendre que l'entrée audio numérique consiste en un tableau d'amplitudes pour une fréquence particulière et bien .. Je ne sais pas vraiment au-delà.
Maintenant, je connais le théorème de Nyquist, la fréquence, l'amplitude, la série de Fourier, etc., et cela remonte à 2-3 ans quand je l'ai fait dans mon programme universitaire au cours d'un semestre. Mais à l'époque, on ne nous avait vraiment pas beaucoup appris sur l'utilisation réelle de Fourier, et je n'ai pas pris la peine de creuser davantage sur le sujet au-delà de l'apprentissage juste assez pour passer le sujet. Mais maintenant, je vais devoir utiliser tout ça.
Voici un instantané des sons que j'essaie de détecter:
Clairement, les sons ont des graphiques uniques. Je veux juste comprendre comment extraire leurs caractéristiques uniques particulières pour leurs lignes épineuses uniques dans le graphique. Comme quelle amplitude, fréquence, etc. Et pendant combien de temps - bien que ce soit trivial, je suppose.
Je veux une liste d'instructions simple et pas à pas - je peux rechercher sur Google la terminologie que je ne comprendrai pas.
Comme peut-être ça? -
Obtenez les données audio d'entrée
Spectogramme de tracé
Obtenez un graphique de spectogramme pour le son que vous souhaitez détecter dans un environnement silencieux
Étudiez ce graphique - dessinez des caractéristiques uniques de ce son
Créez une sorte de fonction qui peut détecter ces caractéristiques particulières dans le flux audio en direct, en utilisant les caractéristiques du son de (4)
Si une correspondance est trouvée, eh bien - le travail est fait.
Polissez l'algorithme pour éliminer les faux négatifs.
Je pensais faire en sorte que l'utilisateur enregistre le son qu'il veut stocker comme un geste dans un environnement calme. Et l'utilisateur ne ferait le son qu'entre le rembourrage du temps calme ; 3 secondes au début et à la fin de l'enregistrement.
Disons que pendant les 3 premières secondes, mon système établirait que l'entrée actuelle est le bruit de fond calme normal. Et puis un changement soudain dans le graphique serait le début de l'entrée sonore. Et lorsque cela s'arrête, l'enregistrement continue pendant encore 3 secondes, le rembourrage du temps silencieux de fin . Cela serait fait manuellement par l'utilisateur. Il stockerait alors automatiquement les caractéristiques de la seule partie pendant laquelle le changement soudain du graphique a duré - quelque part entre les temps de remplissage.
Et ainsi, les caractéristiques de cette partie seraient enregistrées en tant que données gestuelles de ce son, qui seraient utilisées pour détecter ce son particulier dans le flux audio en direct plus tard.
Le problème est que je pense tout cela en anglais simple. J'ai besoin de penser en mathématiques et en physique, pour pouvoir l'implémenter efficacement dans mon code. Je suis tellement sacrément ignorant quoi écrire et où l'écrire dans mon code - même avec autant de bibliothèques et de questions sur SO à ma disposition.
Et désolé si cela a été long.
la source
Réponses:
Bien que je sois d'accord avec l'un des commentaires selon lesquels l'utilisation de techniques de reconnaissance vocale pourrait être un bon début, ces sons sont différents et je ne connais personne ayant fait des recherches pour les catégoriser (le document cité par Nathan ne semble distinguer que la parole et le bruit), donc à moins que quelqu'un ne présente quelque chose pour contredire cela, vous allez devoir inventer votre propre technique, et cela va demander beaucoup d'apprentissage et beaucoup de travail. Le mieux que je puisse faire est de vous lancer.
Tout d'abord, ne vous attendez pas à ce que quiconque puisse produire une formule magique. Il n'y a pas d'équation pour passer du son à ce qu'est le son. Les humains et les ordinateurs doivent apprendre en incorporant des données pour faire des suppositions éclairées sur ce que sont les sons. La raison pour laquelle les gens disent dans leurs réponses "utiliser la FFT" ou "utiliser le passage à zéro" est parce que ce sont quelques-uns des blocs de construction DSP de base utilisés dans la reconnaissance vocale et les algorithmes associés. Mais la FFT et le taux de croisement nul ne sont généralement que les premières étapes de la création d'un ensemble de paramètres décrivant le son. Ces paramètres sont ensuite analysés statistiquement (et non par une fonction magique) pour déterminer à quelle catégorie ils appartiennent le plus probablement. Notez que j'ai dit "très probablement": même la meilleure détection de la parole (et le cerveau humain!
Ainsi, certains paramètres que vous pouvez rechercher incluent:
Une fois que vous disposez d'un ensemble de paramètres qui, selon vous, vous permettront de distinguer vos sons, vous devrez utiliser une méthode statistique pour les classer. Le modèle de Markov caché est souvent utilisé dans le discours. Vous pouvez également vous pencher sur la régression logistique, K-means, et je suis sûr qu'il existe d'autres choix, mais je pense que HMM a fait ses preuves.
la source
J'ai utilisé cet article sur le pointage d'extrémité basé sur l'entropie lorsque j'essayais d'ignorer ces types de sons dans les appels téléphoniques, utilisés pour la reconnaissance vocale par ordinateur, si les sons que vous essayez de capturer sont de la parole, l'entropie pourrait très bien fonctionner, pour la musique, cela peut pas utile.
la source
Je pense que les recommandations de Bjorn sont très bonnes, mais je veux fournir quelques informations supplémentaires. D'après votre description, cela ressemble beaucoup à un problème d'identification du timbre. Il existe des recherches dans ce domaine dans des contextes de musique informatique (identifier différents instruments est une chose utile à faire et faire la différence entre un claquement et un claquement est dû au timbre du son). William Brenta fait quelques recherches dans ce domaine (recherchez timbreID sur sa page) et créé des logiciels à utiliser dans Pure Data. Dans chacune des situations que vous recherchez pour des événements spécifiques, effectuer une segmentation automatique par détection de début serait une bonne idée. Puisque vous prenez déjà un STFT, déterminer un début ne nécessiterait pas trop de travail supplémentaire (regardez dans la détection du début du flux spectral). Un aperçu du système pourrait être en tant que tel:
Entraînement
Classification
Ce document sur l'identification du timbre percussif pourrait être d'une certaine utilité. Il décrit les définitions des caractéristiques potentielles à calculer sur le son entrant et la méthode de classification de l'auteur. Cela fonctionnera assez bien pour les sons de percussion, mais pourrait ne pas fonctionner aussi bien pour quelque chose comme la parole (plusieurs syllabes), dans ce cas, une méthode HMM serait plus appropriée. De même, la précision de votre détection de début varie en fonction des types de sons que vous recherchez.
Si vous êtes particulièrement préoccupé par les boutons-pression par rapport aux interrupteurs d'éclairage, passez un peu de temps à déterminer quelles fonctionnalités pourraient distinguer avec précision les deux sons.
la source