2011-05-27 3 views
24

Existe-t-il un framework bien connu pour C, Java ou PHP pour faire des applications de reconnaissance vocale? Entrée audio du microphone et il reconnaîtra les mots anglais. Un tel code pseudo:Reconnaissance vocale en C ou Java ou PHP?

Speech s = new Speech(); 
s.input(micStream); 
result = s.recognise("Hello"); 
if (result) { printf("Matched hello"); } else { printf("No match found"); } 

Suivi:

Télécharger ceci: sphinx4/1.0%20beta6/

enter image description here

  1. Ajouter les bibliothèques

  2. Copier & coller le code:

    a) fichier xml mis quelque part, qui peut être chargé à partir du code:

    https://gist.github.com/2551321

    b) utiliser ceci:

    package edu.cmu.sphinx.demo.hellowrld; 
    import edu.cmu.sphinx.frontend.util.Microphone; 
    import edu.cmu.sphinx.recognizer.Recognizer; 
    import edu.cmu.sphinx.result.Result; 
    import edu.cmu.sphinx.util.props.ConfigurationManager; 
    import java.io.IOException; 
    import java.util.logging.Level; 
    import java.util.logging.Logger; 
    import models.Tts; 
    
    public class Speech { 
    
        public static void main(String[] args) { 
        ConfigurationManager cm; 
    
        if (args.length > 0) { 
         cm = new ConfigurationManager(args[0]); 
        } else { 
         ///tmp/helloworld.config.xml 
         cm = new ConfigurationManager(Speech.class.getResource("speech.config.xml")); 
    
        } 
        Recognizer recognizer = (Recognizer) cm.lookup("recognizer"); 
        recognizer.allocate(); 
    
        Microphone microphone = (Microphone) cm.lookup("microphone"); 
        if (!microphone.startRecording()) { 
         System.out.println("Cannot start microphone."); 
         recognizer.deallocate(); 
         System.exit(1); 
        } 
    
        System.out.println("Say: (Hello | call) (Naam | Baam | Caam | Some)"); 
    
        while (true) { 
         System.out.println("Start speaking. Press Ctrl-C to quit.\n"); 
    
         Result result = recognizer.recognize(); 
    
         if (result != null) { 
          String resultText = result.getBestFinalResultNoFiller(); 
          System.out.println("You said: " + resultText + '\n'); 
    
           Tts ts = new Tts(); 
           try { 
            ts.load(); 
            ts.say("Did you said: " + resultText); 
           } catch (IOException ex) { 
    
           } 
         } else { 
          System.out.println("I can't hear what you said.\n"); 
         } 
        } 
        } 
    } 
    
+2

A été de réponse pour Java déjà: http://stackoverflow.com/questions/3034925/java-speech-recognition-api –

Répondre

3

Hmm. Un sujet intéressant. Je n'ai pas travaillé sur ce genre de choses depuis des lustres, même si j'ai passé pas mal de temps à jouer avec un logiciel de reconnaissance vocale (assez basique) sur l'Amiga il y a de nombreuses années. C'est très amusant, mais pas aussi facile que le fait votre pseudo-code.

Vous aurez besoin d'une bibliothèque API tierce pour cela. (Je suppose que c'est possible d'écrire le vôtre, mais je ne pense pas que vous êtes le point où c'est une idée réalisable)

Il existe un certain nombre de bibliothèques API disponibles; Google a trouvé plusieurs - voici l'un des résultats que j'ai obtenu: http://en.wikipedia.org/wiki/Microsoft_Speech_API - mais vous aurez probablement besoin d'en essayer quelques-uns jusqu'à ce que vous en obteniez un qui répond à vos besoins.

Il est fort probable qu'il s'agisse d'une API commerciale, c'est-à-dire que vous devrez payer pour cela. Il y en a peut-être des logiciels libres (je n'en ai pas vu dans Google, mais je suis sûr qu'ils existent), mais ils seront probablement beaucoup plus difficiles à utiliser. Une fois que vous avez une bibliothèque avec laquelle vous êtes satisfait et que vous avez écrit votre code pour l'interfacer, votre travail n'est pas terminé, car la reconnaissance vocale est une chose très difficile à travailler. Les différents accents ne sont que le début du problème. Le sexe du locuteur et la vitesse à laquelle il parle ont également une incidence sur la capacité de reconnaître ce qui a été dit. Les humains sont mieux à reconnaître la parole que les ordinateurs, mais même nous luttons avec des accents peu familiers.

Un logiciel de reconnaissance vocale doit généralement être entraîné pour reconnaître des mots et des phrases spécifiques. Vous n'essaieriez certainement pas de faire correspondre une chaîne comme dans votre exemple; vous lui demanderiez de repérer une phrase spécifique qu'il avait été entraîné à reconnaître.

En bref, c'est un très grand domaine dans lequel vous ne faites que vous tremper.J'espère que ça va bien pour vous, mais je vois beaucoup de temps de recherche dans votre futur immédiat!

Voici quelques autres liens qui peuvent vous aider:

4

De regarder ces questions pour quelques mois nths, j'ai vu la plupart des choix de développeurs se décomposent comme suit:

Windows - utilisez les fonctions System.Speech de .Net ou Microsoft.Speech et installez les logiciels de reconnaissance gratuits fournis par Microsoft. Windows 7 inclut un moteur de reconnaissance vocale complet. D'autres sont téléchargeables gratuitement. Il existe une API C++ pour les mêmes moteurs que SAPI. Voir au http://msdn.microsoft.com/en-us/magazine/cc163663.aspx. ou http://msdn.microsoft.com/en-us/library/ms723627(v=vs.85).aspx. Plus d'informations sur les moteurs Microsoft pour Windows What is the difference between System.Speech.Recognition and Microsoft.Speech.Recognition?

Linux - Sphinx semble avoir une bonne clientèle. Voir http://cmusphinx.sourceforge.net/ et http://cmusphinx.sourceforge.net/wiki/

commerciaux - Nuance, Loquendo, AT & T, d'autres

Service en ligne - Nuance, Yapme, d'autres

Bien sûr, cela peut aussi être utile - http://en.wikipedia.org/wiki/List_of_speech_recognition_software

Il est une API de langage Java. Voir javax.speech.recognition dans l'API Java Speech http://java.sun.com/products/java-media/speech/forDevelopers/jsapi-guide/Recognition.html. Je crois que vous devez encore trouver un moteur de discours qui supporte cette API. Je ne pense pas que Sphinx soutient pleinement - http://cmusphinx.sourceforge.net/sphinx4/doc/Sphinx4-faq.html#support_jsapi

Il y a beaucoup d'autres SO quesitons: Need text to speech and speech recognition tools for Linux

1

Essayez ma bibliothèque C, libsprec, qui est construit autour du moteur de reconnaissance vocale de Google:

http://github.com/H2CO3/libsprec

+0

@ syb0rg Si vous souhaitez le faire, contactez-moi sur Twitter ou par email. Je ne sais pas quelles peuvent être ces erreurs mystérieuses qu'un "compilateur ne détecterait pas". La bibliothèque a été récemment mise à jour avec diverses corrections de bogues et améliorations de sécurité, êtes-vous sûr de ne pas regarder une ancienne version? –

+0

@ syb0rg Libre de me inviter à discuter! –