Mycroft-core: Repli STT local ?

Créé le 21 janv. 2017  ·  9Commentaires  ·  Source: MycroftAI/mycroft-core

Je ne sais pas combien d'efforts cela demanderait, ni quel intérêt cela pourrait susciter.

Bien que je comprenne que les systèmes STT locaux (hors ligne) typiques ne sont pas aussi performants en reconnaissance que les systèmes actuellement utilisés, j'aimerais toujours avoir la possibilité de les utiliser ainsi qu'une option de repli si les services en ligne mettent trop de temps à répondre . (Aussi si le service tombe en panne pour une raison quelconque)

Antécédents personnels:

L'Internet à domicile est merdique, parfois les demandes de base accusent un retard considérable, parfois la connexion se coupe (alors que presque tout ce que j'utilise est en ligne, il y aura probablement des fonctions hors ligne uniquement comme la domotique).

Suggestion:

  • Ajoutez la prise en charge d'un ou plusieurs outils de reconnaissance locale.
  • Ajouter une option "fallback" dans les paramètres STT pour utiliser la reconnaissance locale si le service distant ne répond pas (pas de connexion, ou prend plus de X secondes pour donner un résultat)

Problèmes résolus par ceci :

  • Confidentialité (les utilisateurs qui sont prêts à sacrifier la qualité pour la confidentialité peuvent le faire, potentiellement avec un Mycroft entièrement hors ligne)
  • Continuer à fonctionner avec une connectivité médiocre (option de préférer une "réponse médiocre" à "pas de réponse")
Enhancement - proposed help wanted

Tous les 9 commentaires

Entièrement d'accord ! En fait, si je lis correctement l'un des articles de blog / newsletters, je dirais que cela devrait être fermement défini.

Salut,

Voir la pull request #656 et le problème connexe #655. Il implémente les changements nécessaires dans le client/parole pour utiliser les pocketphinx locaux comme périphérique STT.

Il a été développé et testé en pensant à l'internalisation espagnole, mais doit être valable pour toute autre langue prise en charge par PocketSphinx.

Voir la page wiki ici pour plus de détails. En particulier, le chapitre intitulé "Sélectionner et configurer un STT avec support espagnol".

Il existe également une pull request #438 si vous souhaitez utiliser kaldi.
Je ne suis pas sûr que cela fonctionnera sur le Raspberry Pi, mais fonctionne bien sur mon bureau.

Quelques années plus tard, mais partageant une manière non optimisée d'utiliser les STT en ligne et hors ligne en fonction de la connectivité Internet. Si ça peut aider quelqu'un. Utiliser personnellement PocketSphinx en tant que STT hors ligne

Sur mycroft.stt.__init__.py, ajoutez _from mycroft.util import connected_
puis sur la méthode create(), ajoutez :

if connected() is True: return PocketSphinxSTT() else: try : ...

Ensuite sur votre mainkill.__init__.py, on peut ajouter à la méthode handle_boot_finished cet appel :
self.schedule_repeating_event(self.check_connection_switchSTT, None, 30)
Cela appellera le check_connection_switchSTT qui vérifie la connectivité Internet et redémarre les services audio s'il a changé, toutes les 30 secondes.
Ma fonction personnellement ressemble à ceci :

def check_connection_switchSTT(self):

    if connected() is True:

        self.newstate = "yes"

    else:

        self.newstate = 'no'

    if self.prevstate != self.newstate:

        self.prevstate = self.newstate

        LOG.info("Internet connectivity changed")

        subprocess.call(['/path/to/stop-mycroft.sh', 'voice'])

        subprocess.call(['/path/to/start-mycroft.sh', 'voice'])

`
ayant préalablement défini self.prevstate en fonction de la connexion lors de l'initialisation de la skill

Ce n'est pas un très bon moyen de résoudre le problème, mais je n'ai rien trouvé d'autre sur le sujet et j'avais vraiment besoin d'une solution de secours lorsque mon Internet est en panne. Si quelqu'un a pensé à ce problème au cours des trois dernières années, merci de partager.

pocketphinx est une impasse, il craint au point de ne pas être utilisable même comme solution de repli

J'ai créé https://github.com/MycroftAI/mycroft-core/pull/1184 pour ajouter un pocketsphinx STT hors ligne, mais les tests en direct ont fini 99,9% des fois avec moi, abandonnant et utilisant simplement le cli

La diffusion en direct de kaldi est une option, fonctionne un peu mieux, je n'abandonne que 75% des fois !

votre meilleure option est d'auto-héberger deepspeech/kaldi , mais même cela n'est pas prêt pour les heures de grande écoute

vous pourriez être intéressé par mon auditeur local pocketphinx (le vocabulaire limité fonctionne bien) et le spotter kaldi

ce sont des preuves de concept mais pas des projets vraiment maintenus, les Pull Requests sont les bienvenues pour les tenir à jour

Je pense qu'un STT de secours a beaucoup de sens, mais seulement une fois que nous avons quelque chose d'utilisable, actuellement c'est un gaspillage de ressources

J'ai ensuite des problèmes avec pocketphinx, principalement en raison d'une faible précision, personnellement j'ai eu beaucoup plus de chance avec l'utilisation de kaldi avec https://github.com/jcsilva/docker-kaldi-gstreamer-server

La dernière fois que j'ai essayé, c'était en 2017, alors ymmv, j'espère avoir le temps de le revoir, mon mycroft me manque :)

Merci, l'auditeur local est en effet très intéressant, je vais PR avec une mise à jour.

Vosk peut fonctionner sur RPI et dispose de petits modèles STT (50 Mo) pour actuellement 16 langues. Je vais essayer ça maintenant...

@domcross voir vosk ici https://github.com/HelloChatterbox/speech2text/blob/dev/speech2text/engines/kaldi.py

j'attends juste que le #2594 soit fusionné pour que je puisse l'ajouter :)

Cette page vous a été utile?
0 / 5 - 0 notes