jarvis
jarvis copied to clipboard
Utilisation d'une instance de PocketSphinx sur serveur distant
Proposé par Physicien: Pour finir, en jouant un peu dans les settings de Jarvis sur ma RP3, je me suis demandé s'il est envisageable d'ajouter une 4e option au choix de STT engine, soit l'option de faire appel à un serveur pocketsphinx sur un PC de l'utilisateur. Je lance l'idée, car ça revient à utiliser un serveur comme celui de Google ou de Wit(Facebook), mais sans les problèmes de respect de la vie privée.
C'est plutôt un détail que je veux apporter pour le moment, mais les modèles et dictionaires les plus à jour sont ceux directement accessible sur le site du LIUM. Dans précédemment, nous avons essayé avec les anciens modèles du LIUM de 62000 mots, alors que les nouveaux en contiennent environ 70000 mots. Tant qu'à utiliser un serveur avec un bon PC, autant avoir les meilleurs modèles disponibles!
Ça doit être bon signe ça!
C'est quoi exactement? un instance de pocketsphinx
sur un autre serveur?
C'est pocketsphinx
sur Debian avec le français comme langue.
ok et ca donne quoi niveau performances en reconnaissance continue? Ca serait bien que tu indiques les specs de la bécane à côté du résultat 😄
Là je suis en train d'essayer de lui link mon micro de Webcam avec -adcdev plughw:0,0 -inmic yes
et je dois simplement trouver comment. Pour les specs du PC, c'est certain que je vais mettre ça à côté!
Ok bon déjà tu as la bonne commande, j'ai réussi à le faire marcher avec la même, voir #7
Au pire je vais test avec un .wav
vu que c'est ce qu'on va lui passer à distance de toute façon.
J'ai envoyé un .wav
et voici l'output. J'ai visiblement un setting qui n'est pas bon, je vais donc lire attentivement l'output!
output.txt
la traduction extraite de ton fichier:
000000000: the moon
141567 last
000000001: we are as a hand on
J'ai regardé la config il semble que tu n'ai pas de `-lm
-lextreedump 0 0
-lifter 0 0
-lm
-lmctl
-lmname default default
Commence par ca 😄
J'ai utilisé un .lm.bin
.
Ok mais il n'est pas passé en paramètre car dans le header de config c'est vide. Essayes:
pocketsphinx_continuous -lm ton_language_model.lm.bin ...
Voici le résultat...
Ok, je crois que c'est la version Debian de PocketSphinx qui est outdated... Je vais essayer d'arranger ça.
Bon, j'ai réussi à patenter quelque chose, mais il parle français. Il dit n'importe quoi, mais en français et très rapidement.
Je pense commencer à me pencher la dessus, j'aimerai avoir une approche suffisamment générique. L'idée est de proposer un stt remote
qui puisse convenir à une instance de PocketSphinx, mais aussi pourquoi pas Kaldi ou d'autre moteur de reconnaissance vocale sur machine distante.
Ainsi cela couvrira l'implémentation de #25 .
L'appel sera une requête POST http, donc il faudra qu'un serveur web (apache, nginx, python...) tourne sur la machine distante. L'URL complète sera configurable (host/IP + path + variables). Le retour par contre devra être du json, on pourra aussi paramétrer l'attribut à lire.
remote stt settings:
host_url: "http://192.168.1.10/pocketsphinxweb?action=recognize"
attribute_name: "transcript"
request:
curl -X POST "http://192.168.1.10/pocketsphinxweb?action=recognize" \
-H "Content-Type: audio/wav; samplerate=16000" \
--data-binary "@$audiofile"
response:
{transcript:"ca marche", confidence:1234}
Si je me souviens bien, la dernière fois que j'ai travaillé avec Kaldi, je pouvais lui donner un .wav
et il essayait de l'écrire en anglais. J'en étais rendu à l'entraîner pour comprendre le français. L'entraînement en tant que tel n'est pas difficile à réaliser. Ce qui est un peu plus difficile, c'est la préparation des données.
En effet, afin de l'entraîner, il faut préparer de petits extraits audio ainsi que la retranscription de ce qui y est dit. Étant donné que nous voulons une grande variété de voix et un vocabulaire développé, les meilleurs données disponibles sont les livres audio de LibriVox. Cette méthode a déjà été appliqué pour l'anglais, donnant ainsi LibriSpeech.
La difficulté de la préparation des données réside dans la segmentation des fichiers audios et l'alignement du texte sur ces fichiers audio. Un article décrit la technique utilisée pour LibriSpeech.
Ok @physicien , sinon un commentaire sur l'approche générique d'implémentation choisie? (voir mon post juste au dessus).
@alexylem C'était globalement comme ça que je voyais l'implémentation de mon côté. Envoyer un .wav
à transcrire et retourner la transcription. Je ne peux que donner mon appui :+1:
Je viens de tomber sur un lien qui détaille globalement ce que nous voulons faire, avec des commentaires sur les difficultés rencontrées, les solutions trouvées et les performances globales.
Super ca va nous aider. J'en ai profité pour laissé un commentaire sur leur site car ils ont "oublié" de mentionner le projet Jarvis 😄
Je pense proposer dans un premier temps un "template" de STT de manière à faciliter la création de nouveau moteurs de reconnaissance vocale (ou connecteur comme ici) par la communauté.
Salut,
Je bute sur l'installation de pocketsphinx_continuous sur Respeaker, mais je toute façon j'ai un doute sur le fait que ça tourne correctement. Donc la solution "serveur distant" me plait bien, avez vous avancé dessus ? Merci !
Non mais je peux fournir un template très rapidement. Tu aimerais faire tourner pocketsphinx sur un serveur distant? Pour la reconnaissance des commandes j'imagine? En français?
@alexylem : tout juste ! Je suis entrain de regarder pour utiliser le script Python de détection de hotword fourni par Seeedstudio, mais je pense que la reconnaissance des commandes gagnerai à être faite sur une machine plus pêchue, même si Bing fonctionne bien pour l'instant
@Oliv4945 ok je te laisse t'occuper de la partie serveur et je m'occupe de l'intégration à Jarvis. Que proposes-tu pour la communication?
- Serveur web (RestAPI)
- SSH
- Autre?
Ce que tu décris ici me paraît plutôt bien, reste à voir d'un point de vue sécurité mais on peut s'en sortir avec une règle iptables. Du coup je peux faire le serveur, mais pas tout de suite, j'aimerai avancer l'application Android et la publier, puis faire fonctionner les hotword respeaker.
@Oliv4945 ok ça marche!
Bonjour,
Peut-on envisager d'avoir PocketSphinx (ou autre) installé chez framasoft.org ? On pourrai avoir la puissance d'une grosse machine avec le respect de la vie privée, à voir avec eux évidement.
à voir avec eux évidement.
Bonsoir @domotic-29 , je pense que tu as effectivement trouvé le premier pas à faire :)