web-dev-qa-db-fra.com

Reconnaissance vocale en C ou Java ou PHP?

Existe-t-il un cadre bien connu pour C ou Java ou PHP pour faire des applications de reconnaissance vocale? Microphone d'entrée audio et il reconnaîtra les mots anglais. Comme pseudo code:

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

Suivi:

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

enter image description here

  1. Ajouter les bibliothèques

  2. Copiez et collez le code:

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

    https://Gist.github.com/2551321

    b) utilisez 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");
            }
        }
      }
    }
    
24
user285594
9
Raoul

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 votre exemple de pseudo-code le fait paraître.

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

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

Il y a de fortes chances que ce soit une API commerciale - c'est-à-dire que vous devrez payer pour cela. Il peut y en avoir des open source (je n'en ai pas vu dans mon Googleing superficiel, mais je suis sûr qu'ils existent), mais ils seront probablement beaucoup plus difficiles à utiliser.

Une fois que vous avez une bibliothèque qui vous convient et que vous avez écrit votre code pour l'interface avec elle, votre travail n'est pas terminé, car la reconnaissance vocale est une chose notoirement délicate à utiliser.

Les différents accents ne sont que le début du problème. Le sexe du locuteur et la vitesse à laquelle il parle affectent également la capacité de reconnaître ce qui a été dit. Les humains sont de loin meilleurs pour reconnaître la parole que les ordinateurs, mais même nous avons du mal avec certains accents inconnus.

Les logiciels de reconnaissance vocale doivent généralement être formés 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 des phrases spécifiques pour lesquelles il avait été entraîné à reconnaître.

En bref, c'est un très grand champ, dans lequel vous ne faites clairement que plonger votre orteil. J'espère que cela va bien pour vous, mais je vois beaucoup de temps de recherche dans votre avenir immédiat!

Voici quelques autres liens qui peuvent vous aider:

2
Spudley

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

http://github.com/H2CO3/libsprec

2
user529758

En regardant ces questions pendant quelques mois, j'ai vu la plupart des choix de développeurs se décomposer comme suit:

Utilisateurs de Windows - utilisez les fonctionnalités System.Speech de .Net ou Microsoft.Speech et installez les outils de reconnaissance gratuits fournis par Microsoft. Windows 7 comprend un moteur vocal complet. D'autres sont téléchargeables gratuitement. Il existe une API C++ pour les mêmes moteurs appelés SAPI. Voir à 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 Quelle est la différence entre System.Speech.Recognition et Microsoft.Speech.Recognition?

Les gens de Linux - Sphinx semble avoir une bonne suite. Voir http://cmusphinx.sourceforge.net/ et http://cmusphinx.sourceforge.net/wiki/

Produits commerciaux - Nuance, Loquendo, AT&T, autres

Service en ligne - Nuance, Yapme, autres

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

Il existe une Java speech. Voir javax.speech.recognition dans le Java Speech API http://Java.Sun.com/) products/Java-media/speech/forDevelopers/jsapi-guide/Recognition.html . Je pense que vous devez encore trouver un moteur de reconnaissance vocale prenant en charge cette API. Je ne pense pas que Sphinx la prend entièrement en charge - http://cmusphinx.sourceforge.net/sphinx4/doc/Sphinx4-faq.html#support_jsapi

Il y a beaucoup d'autres SO quesitons: Besoin d'outils de reconnaissance vocale et vocale pour Linux

2
Michael Levy

HTK est l'un des frameworks les plus populaires pour C.

http://htk.eng.cam.ac.uk/

Il n'est pas facile à utiliser, mais est définitivement puissant.

1
Dariusz

Le J.A.R.V.I.S. Java Speech API est très robuste et fonctionnel et constitue une excellente alternative minimaliste à Sphinx.

https://github.com/The-Shadow/Java-speech-api

0
Skylion