2010-11-04 40 views
5

Je travaille sur un logiciel pour les enfants, et cherche à ajouter la possibilité pour le logiciel de répondre à un certain nombre de sons non-parole. Par exemple, applaudissements, aboiements, sifflements, bruits de pet, etc.Logiciel de reconnaissance vocale ou de bruit non vocal?

J'ai utilisé CMU Sphinx et l'API Windows Speech par le passé, mais pour autant que je sache, aucun d'entre eux n'a de support pour les non-utilisateurs. les bruits de la parole, et en fait je crois les filtrer activement.

En général, je suis à la recherche de « Comment puis-je obtenir cette fonctionnalité » mais je pense que cela peut aider si je le décomposer en trois questions qui sont mes suppositions pour ce que pour rechercher suivant:

  1. Existe-t-il un moyen d'utiliser l'un des principaux moteurs de reconnaissance vocale pour reconnaître les sons non-mots en changeant un modèle acoustique ou un lexique de prononciation?
  2. (ou) Existe-t-il déjà une bibliothèque existante pour la reconnaissance de bruit non-mot? (Ou) J'ai un peu de familiarité avec les modèles de Markov cachés et la technologie sous-jacente de reconnaissance vocale de l'université, mais aucune estimation sur la difficulté de créer un très petit reconnaisseur de bruit/son (supposons < 20 bruits à reconnaître). Si 1) et 2) échouent, une estimation sur combien de temps il faudrait pour lancer le mien?

Merci

+1

[Ma réponse] (http://stackoverflow.com/q/8285673/22364) à la question [Identification en temps réel de sons non musicaux, autres que parlés, provenant d'un flux continu de microphones] (http: // stackoverflow.com/q/8285673) pourrait être pertinent. –

Répondre

0

Oui, vous pouvez utiliser un logiciel de reconnaissance vocale comme CMU Sphinx pour la reconnaissance des sons non vocaux. Pour cela, vous devez créer vos propres modèles acoustiques et linguistiques et définir le lexique restreint à votre tâche. Mais pour former le modèle acoustique correspondant, vous devez avoir suffisamment de données d'entraînement avec des sons d'intérêt annotés.

En bref, la séquence des étapes est la suivante:

D'abord, préparer des ressources pour la formation: lexique, dictionnaire, etc. Le processus est décrit ici: http://cmusphinx.sourceforge.net/wiki/tutorialam. Mais dans votre cas, vous devez redéfinir l'ensemble de phonèmes et le lexique. À savoir, vous devez modéliser les remplissages comme de vrais mots (donc, pas de ++ autour) et vous n'avez pas besoin de définir l'ensemble de phonèmes complet. Il existe de nombreuses possibilités, mais la plus simple est sans doute d'avoir un seul modèle pour tous les phonèmes de parole. Ainsi, votre lexique ressemblera:

CLAP CLAP 
BARK BARK 
WHISTLE WHISTLE 
FART FART 
SPEECH SPEECH 

Deuxièmement, la préparation des données de formation avec des étiquettes: Quelque chose de semblable à voxforge, mais les annotations de texte ne doit contenir que des étiquettes de votre lexique. Bien entendu, les sons non vocaux doivent être correctement étiquetés. Bonne question ici est d'où obtenir une quantité suffisante de ces données. Mais je suppose que cela devrait être possible.

Après cela, vous pouvez former votre modèle. La tâche est plus simple par rapport à la reconnaissance vocale, par exemple, vous n'avez pas besoin d'utiliser des triphones, juste des monophones.

En supposant même probabilité a priori d'un son/la parole, le modèle de langage le plus simple peut être une grammaire en forme de boucle (http://cmusphinx.sourceforge.net/wiki/tutoriallm):

#JSGF V1.0; 
/** 
* JSGF Grammar for Hello World example 
*/ 
grammar foo; 
public <foo> = (CLAP | BARK | WHISTLE | FART | SPEECH)+ ; 

Cette approche est très simple à utiliser boîte à outils ASR pour votre tâche. Il est possible de perfectionner les configurations HMM en utilisant des modèles de langage statistique et en utilisant des modèles de phonèmes à granularité fine (par exemple distinguer les voyelles et les consonnes au lieu d'avoir un modèle SPEECH unique.) Cela dépend de la nature de vos données d'entraînement. En dehors du cadre de reconnaissance vocale, vous pouvez construire un classificateur statique simple qui analysera les données d'entrée image par image. Les réseaux de neurones convolutionnels qui fonctionnent sur des spectrogrammes fonctionnent assez bien pour cette tâche.