web-dev-qa-db-fra.com

Reconnaissance vocale sur Android avec clip son enregistré?

J'ai utilisé la fonctionnalité de reconnaissance vocale sur Android et j'adore ça. C'est l'une des caractéristiques les plus louées de mes clients. Cependant, le format est quelque peu restrictif. Vous devez appeler l'intention de reconnaissance, Demandez-lui l'enregistrement de la transcription sur Google et attendez le texte.

Certaines de mes idées nécessiteraient d'enregistrer l'audio au sein de mon application, puis d'envoyer le clip à Google pour la transcription.

Est-ce que je peux envoyer un clip audio pour être traité avec la parole au texte?

31
CodeFusionMobile

J'ai eu une solution qui fonctionne bien pour avoir la reconnaissance de la parole et l'enregistrement audio. Voici le link à un simple Android project j'ai créé pour montrer la solution de la solution. En outre, je mets des écrans d'impression à l'intérieur du projet pour illustrer l'application.

Je vais essayer d'expliquer brièvement l'approche que j'ai utilisée. J'ai combiné deux caractéristiques de ce projet: API Google Discours et enregistrement FLAC.

L'API Google Speech s'appelle via des connexions HTTP. Mike Pultz donne plus de détails sur l'API:

"(...) Le nouvel API [Google] est une API en streaming complet. Ce que cela signifie, est-ce qu'il utilise réellement deux connexions HTTP - One POST Demande de télécharger le contenu comme Un flux déchiré "en direct" et une seconde demande d'accès aux résultats, ce qui rend beaucoup plus de sens pour des échantillons audio plus longs ou pour la diffusion audio. "

Cependant, cette API doit recevoir un fichier son flac pour fonctionner correctement. Cela nous fait aller à la deuxième partie: l'enregistrement FLAC

J'ai mis en œuvre l'enregistrement FLAC dans ce projet en extrayant et en adaptant des pièces de code et des bibliothèques d'une application open source appelée Audioboo. Audioboo utilise un code natif pour enregistrer et lire le format FLAC.

Ainsi, il est possible d'enregistrer un son flac, de l'envoyer à Google Discours API, d'obtenir le texte et de jouer au son qui vient d'être enregistré.

Le projet que j'ai créé a les principes de base pour le faire fonctionner et peut être amélioré pour des situations spécifiques. Afin de le faire fonctionner dans un scénario différent, il est nécessaire d'obtenir une clé d'API de synthèse Google, qui est obtenue en faisant partie du groupe Google Chrome-Dev Group. J'ai laissé une clé dans ce projet juste pour montrer que cela fonctionne, mais je vais l'enlever éventuellement. Si quelqu'un a besoin de plus d'informations à ce sujet, faites-moi savoir parce que je ne suis pas capable de mettre plus de 2 liens dans ce post.

10
lsantsan

Malheureusement pas à ce moment-là. La seule interface actuellement prise en charge par le service de reconnaissance vocale d'Android est le RecognizerIntent, qui ne vous permet pas de fournir vos propres données sonores.

Si cela est quelque chose que vous souhaitez voir, fichez une demande de fonctionnalité à http://b.android.com . Ceci est également lié tangentiellement lié à l'existant numéro 4541 .

3
Trevor Johns

Autant que je sache, il n'y a toujours aucun moyen d'envoyer directement un clip audio à Google pour la transcription. Cependant, Froyo (niveau d'API 8) a introduit la classe SpeeckRecognizer classe, qui fournit un accès direct au service de reconnaissance vocale. Ainsi, par exemple, vous pouvez commencer la lecture d'un clip audio et créer votre activité de démarrer l'écoute de reconnaissance vocale en arrière-plan, qui reviendra des résultats après la fin de la méthode de rappel de l'auditeur définie par l'utilisateur.

Le code d'échantillon suivant doit être défini dans une activité car les méthodes de SpeamRecognizer doivent être exécutées dans le fil principal de l'application. De plus, vous devrez ajouter la permission fiche_audio à votre AndroidManifest.xml.

[.____] 

    boolean available = SpeechRecognizer.isRecognitionAvailable(this);
    if (available) {
        SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(this);
        sr.setRecognitionListener(new RecognitionListener() {
            @Override
            public void onResults(Bundle results) {
                // process results here
            }
            // define your other overloaded listener methods here
        });
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        // the following appears to be a requirement, but can be a "dummy" value
        intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.dummy");
        // define any other intent extras you want

        // start playback of audio clip here

        // this will start the speech recognizer service in the background
        // without starting a separate activity
        sr.startListening(intent);
    }

Vous pouvez également définir votre propre service de reconnaissance vocale en prolongeant reconnaissance , mais cela dépasse la portée de cette réponse :)

2
zen_of_kermit