78 votes

Reconnaissance vocale hors ligne dans Android (JellyBean)

Il semble que Google ait rendu la reconnaissance vocale hors ligne disponible à partir de Google Now pour les applications tierces. Elle est utilisée par l'application nommée Utter .

Est-ce que quelqu'un a vu des implémentations sur la façon de faire des commandes vocales simples avec cette reconnaissance vocale hors ligne ? Utilisez-vous simplement l'API SpeechRecognizer ordinaire et cela fonctionne automatiquement ?

1 votes

Donc, tant que nous téléchargeons le langage, nous n'avons pas besoin de modifier notre code ?

74voto

brandall Points 1417

Google a discrètement activé la reconnaissance hors ligne dans cette mise à jour de la recherche, mais il n'y a pas (encore) d'API ou de paramètres supplémentaires disponibles dans l'interface utilisateur de Google. Classe SpeechRecognizer . {Voir l'édition au bas de ce post} La fonctionnalité est disponible sans codage supplémentaire, mais l'appareil de l'utilisateur doit être configuré correctement pour qu'elle puisse commencer à fonctionner. C'est là que réside le problème et j'imagine que c'est la raison pour laquelle de nombreux développeurs pensent qu'il leur manque quelque chose.

En outre, Google a restreint l'utilisation de la reconnaissance hors ligne à certains appareils Jelly Bean en raison de contraintes matérielles. Les appareils auxquels cela s'applique ne sont pas documentés, en fait, rien n'est documenté, donc la configuration des capacités pour l'utilisateur s'est avérée être une question d'essais et d'erreurs (pour eux). La configuration des capacités pour l'utilisateur s'est avérée être une question d'essais et d'erreurs (pour eux). Cela fonctionne pour certains immédiatement - pour ceux qui ne le font pas, voici le "guide" que je leur fournis.

  1. Assurez-vous que le système de reconnaissance vocale par défaut d'Android est réglé sur Google pas Samsung/Vlingo
  2. Désinstallez les fichiers de reconnaissance hors ligne que vous avez déjà installés dans les paramètres de la recherche vocale de Google
  3. Allez dans les paramètres de votre application Android et voyez si vous pouvez désinstaller les mises à jour des applications Google Search et Google Voice Search. et Google Voice Search.
  4. Si vous n'arrivez pas à faire ce qui précède, allez sur le Play Store et voyez si vous avez cette option.
  5. Redémarrage (si vous avez réalisé 2, 3 ou 4)
  6. Mettez à jour Google Search et Google Voice Search depuis le Play Store (si vous avez réalisé 3 ou 4 ou si une mise à jour est disponible de toute façon).
  7. Redémarrage (si vous avez atteint 6)
  8. Installer les fichiers de langue anglaise UK hors ligne
  9. Redémarrer
  10. Utilisez Conneries ! avec une connexion
  11. Passez en mode avion et essayez-le.
  12. Une fois qu'elle fonctionne, la reconnaissance hors ligne d'autres langues, comme l'anglais US, devrait commencer à fonctionner aussi.

EDIT : Le fait de changer temporairement la locale de l'appareil en English UK semble également faire fonctionner cette fonction pour certains.

Certains utilisateurs ont signalé qu'ils devaient encore redémarrer un certain nombre de fois avant qu'il ne commence à fonctionner, mais ils finissent tous par y arriver, souvent de manière inexplicable à ce qui a été le déclencheur, dont la clé se trouve à l'intérieur de l'application Recherche Google APK et ne font donc pas partie du domaine public ou de l'UE. AOSP .

D'après ce que j'ai pu constater, Google teste la disponibilité d'une connexion avant de décider d'utiliser la reconnaissance hors ligne ou en ligne. Si une connexion est disponible au départ mais qu'elle est perdue avant la réponse, Google fournira une erreur de connexion, il ne reviendra pas à la reconnaissance hors ligne. Par ailleurs, si une demande de voix synthétisée par le réseau a été faite, aucune erreur n'est fournie en cas d'échec - vous obtenez le silence.

La mise à jour de Google Search n'a pas permis d'ajouter de nouvelles fonctionnalités à Google Now et, en fait, si vous essayez de l'utiliser sans connexion Internet, il se bloque. Je le mentionne car je me demandais si cette fonctionnalité serait retirée aussi discrètement qu'elle est apparue et il ne faut donc pas s'y fier en production.

Si vous avez l'intention de commencer à utiliser la classe SpeechRecognizer, sachez qu'il y a une assez longue période de temps avant de pouvoir utiliser la classe SpeechRecognizer. bogue majeur qui lui sont associés et dont la gestion nécessite votre propre mise en œuvre.

Ne pas être en mesure de demander spécifiquement hors ligne = vrai Le contrôle de cette fonction est impossible sans manipuler la connexion de données. Foutaises. Vous recevrez des centaines d'e-mails d'utilisateurs vous demandant pourquoi vous n'avez pas activé une fonction aussi simple !

EDIT : Depuis le niveau 23 de l'API, un nouveau paramètre a été ajouté EXTRA_PREFER_OFFLINE à laquelle le service de reconnaissance de Google semble adhérer.

J'espère que ce qui précède vous aidera.

0 votes

Cela fonctionne très bien pour moi et c'était très facile à mettre en œuvre. J'ai utilisé cet exemple comme point de départ. jameselsey.co.uk/blogs/techblog/

0 votes

@brandall Je me demande si je peux choisir la langue dans laquelle je fais la reconnaissance ? Le fichier de langue hors ligne supporte ma langue (vietnamien) maintenant ! Je veux créer une application qui fait la reconnaissance vocale hors ligne POUR ma langue (vietnamien) ! Est-ce possible ? Merci beaucoup !

1 votes

@truongmn - Cela vous aide-t-il ? stackoverflow.com/q/10538791/1256219 Si ce n'est pas le cas, posez une nouvelle question et indiquez-moi le lien vers celle-ci et je verrai si je peux vous aider.

20voto

user2987828 Points 662

Je voudrais améliorer le guide que la réponse https://stackoverflow.com/a/17674655/2987828 envoie à ses utilisateurs, avec des images. C'est la phrase "Pour ceux qui ne le font pas, voici le 'guide' que je leur fournis" que je veux améliorer.

L'utilisateur doit cliquer sur les quatre boutons surlignés en bleu dans ces images :

Go to your Android Application Settings, select Languages and input,edit Settings of Google Voice typing,select Download Offline speech recognition,select your languages in the ALL tab.

L'utilisateur peut ensuite sélectionner les langues qu'il souhaite. Lorsque le téléchargement est terminé, il doit se déconnecter du réseau, puis cliquer sur le bouton "microphone" du clavier.

Cela a fonctionné pour moi (Android 4.1.2), puis la reconnaissance de la langue a fonctionné d'emblée, sans redémarrage. Je peux maintenant dicter des instructions au shell de l'émulateur de terminal ! Et c'est deux fois plus rapide hors ligne qu'en ligne, sur un padfone 2 d'ASUS.

Ces images sont sous licence cc by-sa 3.0 avec l'attribution requise à stackoverflow.com/a/21329845/2987828 ; vous pouvez donc ajouter ces images partout avec cette attribution.

(Ceci est la politique standard de toutes les images et de tous les textes sur stackoverflow.com)

19voto

Nikolay Shmyrev Points 8138

Une reconnaissance hors ligne simple et flexible sur Android est implémentée par CMUSphinx, une boîte à outils de reconnaissance vocale open source. Il fonctionne purement en mode hors ligne, rapide et configurable. Il peut écouter en continu un mot-clé, par exemple.

Vous pouvez trouver le dernier code et tutoriel ici .

Mise à jour en 2019 : Le temps passe vite, CMUSphinx n'est plus aussi précis. Je recommande d'essayer Kaldi toolkit à la place. La démo est ici .

1 votes

Je viens d'essayer la démo et ça marche plutôt bien. Rapide et facile à utiliser.

2 votes

Bonjour, CMUSphinx fonctionne-t-il aussi pour l'accent indien anglais ?

1 votes

@Kedarnath il semble qu'il soit en haut de leur liste, voir le sondage ici : cmusphinx.sourceforge.net

7voto

LJoosse Points 160

En bref, je n'ai pas la mise en œuvre, mais l'explication.

Google n'a pas mis la reconnaissance vocale hors ligne à la disposition des applications tierces. La reconnaissance hors ligne est uniquement accessible via le clavier. Ben Randall (le développeur d'utter !) explique sa solution de contournement dans un article d'Android Police :

J'avais implémenté mon propre clavier et j'alternais entre Google et le clavier par défaut de l'utilisateur avec un champ d'édition invisible et une activité transparente pour la saisie. invisible et une activité transparente pour obtenir la saisie. Un sale coup !

C'était la seule façon de procéder, car la saisie vocale hors ligne ne pouvait être déclenchée que par un IME ou une application système. déclenchée par un IME ou une application système. (c'était mon hack Root) . L'autre type d'API de reconnaissance ... ne l'a pas déclenché et a simplement échoué avec une erreur de serveur. ... Beaucoup de travail perdu pour moi sur la solution de contournement ! Mais au moins j'étais prêt pour l'implémentation...

De Utter ! Prétend être la première application non IME à utiliser la reconnaissance vocale hors ligne dans Jelly Bean

4 votes

Je pensais que c'était ce qu'il avait l'habitude de faire avant la dernière mise à jour. Suivant votre citation : "Randall a poursuivi en expliquant que Utter ! utilise désormais SpeechRecognizer, qui a été mis à jour pour permettre aux développeurs d'utiliser la reconnaissance hors ligne dans toute une série d'applications, alors que Recognizerintent, le précédent code de saisie vocale hors ligne, nécessitait un jeton IME valide."

2voto

Akino Points 31

Je m'occupais de ce problème et j'ai remarqué que vous devez installer le paquet hors ligne pour votre langue. Mon paramètre de langue était "Español (Estados Unidos)" mais il n'y a pas de paquet hors ligne pour cette langue, donc quand j'ai désactivé toute connectivité réseau, j'ai reçu une alerte de RecognizerIntent disant qu'il ne peut pas atteindre Google, alors j'ai changé la langue à "English (US)" (parce que j'ai déjà le paquet hors ligne) et lancé le RecognizerIntent il a juste fonctionné.

Clés : Réglage de la langue == Ensemble de reconnaissance vocale hors ligne

0 votes

Je peux savoir quel appareil vous avez utilisé. Est-ce qu'il supporte d'autres appareils que ceux de Google. Comme Samsung, Asus, etc. Je travaille dessus et le hors ligne n'est pas compatible avec d'autres appareils.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X