Implémentons le dialogue vocal anglais en Python [hors ligne]

À propos de Pocket Shinx

pocketphinx est un module qui permet la reconnaissance vocale anglaise hors ligne. Cliquez ici pour savoir comment installer pocketphinx et comment l'utiliser La construction de l'environnement sera également confirmée sur cette page, vous pouvez donc l'ignorer (?).

Reconnaissance vocale à l'aide d'un dictionnaire unique (parole en texte)

environnement

ubuntu 18.04 python3


Environnement

J'ai rassemblé un échantillon dans git, alors veuillez le cloner et l'utiliser. "https://github.com/hir-osechi/pocketsphinx_sample"

python


git clone https://github.com/hir-osechi/pocketsphinx_sample.git

Il contient le code qui utilise pockethinx et svoxpico, donc S'ils ne sont pas installés, procédez comme suit:

python


cd pocketsphinx_sample/
sh setup.sh

Si vous souhaitez savoir comment utiliser svoxpico


Pocketshinx sans rien à définir peut être implémenté avec le code suivant.

pocket_test.py


from pocketsphinx import LiveSpeech
for phrase in LiveSpeech():
    print(phrase) 

De là, vous pouvez ajouter des options à l'intérieur des crochets LiveSpeech (). Lorsque vous utilisez votre propre dictionnaire

lm = False dic = chemin (fichier .dict) du dictionnaire original créé jsgf = chemin (fichier .gram) du dictionnaire original créé

Ajouter.


Créer votre propre dictionnaire

À propos des fichiers dict

pocketphinx a un dictionnaire de mots appelé ".dict" qui contient des dizaines de milliers de mots et leurs énoncés.

Exemple weather W EH DH ER were W ER what W AH T what(2) HH W AH T where W EH R where(2) HH W EH R

Tous les mots sont stockés dans le fichier dict avec le chemin suivant. /usr/local/share/pocketsphinx/model/en-us/cmudict-en-us.dict

Par défaut, il recherche les mots reconnus dans ces dizaines de milliers de dictionnaires, donc Si vous réduisez le nombre de mots, la précision de la reconnaissance s'améliorera.


À propos du fichier gramme

Dans le fichier gramme, vous pouvez spécifier la grammaire ou la grammaire. Par exemple, si vous créez le fichier gramme suivant,

What food do you like ? Where do you live in ?

Seules les deux phrases de seront reconnues.

#JSGF V1.0;
grammar test;
public <rule> = <command>;
<command> = what food do you like | where do you live in;

À propos, il est difficile de créer des fichiers dict et gramme à la main à chaque fois. J'ai créé un code qui crée automatiquement un fichier dict et gramme en saisissant des phrases. C'est sur git.

cd pocketsphinx_sample/tools
python3 gram_maker_by_input.py

Veuillez saisir comme suit.

Saisissez le nom du dictionnaire que vous souhaitez créer:test
Veuillez saisir le texte+ Enter
(Ctrl pour quitter-C)
===============================================================
do you like apple
i want to play tennis
please tell me the way to the kyoto station
let me know what i can do for you

Vous pouvez désormais effectuer une reconnaissance vocale qui ne répond qu'à 4 phrases. Cependant, si cela reste tel quel, même une petite quantité de bruit peut être attribuée à l'un de ces quatre, alors ajoutez du bruit.

cd pocketsphinx_sample/tools
python3 gram_noise_changer.py

Veuillez saisir comme suit.

Saisissez le nom du dictionnaire dont vous souhaitez modifier le bruit:test
Veuillez saisir le nom de fichier txt du champ noise 1 que vous souhaitez modifier(.txt non inclus):noise_sample
===============================================================
Modifiez le bruit dans ce dictionnaire.
===============================================================
Fin du changement
===============================================================

Si vous êtes curieux de savoir ce que vous faites, jetez un œil à test.gram. (le bruit contient des mots qui étaient faciles à reconnaître lorsque vous ne faisiez rien, jouez simplement avec eux)

Ceci termine la préparation!


Courir

Si vous pouvez confirmer que seule la phrase spécifiée précédemment est reconnue par la commande suivante, elle réussit.

cd pocketsphinx_sample/
python3 dic_test.py

Dialogue vocal

À titre d'exemple d'utilisation, nous avons créé un programme qui vous permet de poser et de répondre à des questions. Le texte de la question et la réponse sont séparés par "," et sont inclus dans pocketphinx_sample / dictionary / QandA / QandA.txt.

Pour créer votre propre dictionnaire à partir de QandA.txt, exécutez gram_maker_from_txt.py.

cd pocketsphinx_sample/tools
python3 gram_maker_from_txt.py

Veuillez entrer comme suit.

Saisissez le nom du dictionnaire que vous souhaitez créer:QA_sample
Entrez le nom du fichier txt que vous souhaitez utiliser comme dictionnaire(.txt non inclus):QandA
Veuillez saisir le nom de fichier txt de la colonne noise 1 que vous souhaitez ajouter(.txt non inclus):noise_sample
Fin de dictionnaire

Si vous le faites, vous devriez être en mesure de mettre en œuvre une session de questions et réponses.

cd pocketsphinx_sample/
python3 QA_test.py

Résultat de l'exécution ↓


[*] START RECOGNITION
----------------------------------
 are you happy ?
[*] SPEAK : yes
----------------------------------

[*] START RECOGNITION
----------------------------------
 what food do you like ?
[*] SPEAK : I like apples.
----------------------------------

Pour améliorer encore la précision

Lors de l'amélioration de la précision de la reconnaissance, le bruit doit être spécifié strictement. Par exemple, si "quelle nourriture aimez-vous" est facilement mal reconnu,

what what food what food do what food do you

En ajoutant à noise_sample.txt, vous pouvez empêcher la sortie à moins qu'il n'y ait une correspondance exacte.


Échantillon officiel de pocketphinx "https://pypi.org/project/pocketsphinx/"

Recommended Posts

Implémentons le dialogue vocal anglais en Python [hors ligne]
Mettre en œuvre des recommandations en Python
Implémenter XENO avec python
Implémenter sum en Python
Implémenter Traceroute dans Python 3
Implémenter Naive Bayes dans Python 3.3
Implémenter d'anciens chiffrements en python
Implémenter Redis Mutex en Python
Implémenter l'extension en Python
Mettre en œuvre un RPC rapide en Python
Implémenter l'algorithme de Dijkstra en python
Implémenter le bot de discussion Slack en Python
Trouvons le rapport de circonférence avec Python
Mettre en œuvre l'apprentissage de l'empilement en Python [Kaggle]
Implémenter la fonction power.prop.test de R en python
Lançons "python -m antigravity" en python
Essayons Fizz Buzz avec Python
Voyons voir l'utilisation de l'entrée en python
Implémentez rapidement l'API REST en Python
Analysons la voix avec Python # 1 FFT
Implémenter __eq__ etc. de manière générique dans la classe Python
J'ai essayé d'implémenter la permutation en Python
Implémenter le filtre FIR en langage Python et C
J'ai essayé d'implémenter PLSA dans Python 2
Faisons la voix lentement avec Python
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
Faisons un calcul de combinaison avec Python
Essayez d'implémenter Oni Mai Tsuji Miserable avec python
Analysons le journal de validation git en Python!
Comment implémenter la mémoire partagée en Python (mmap.mmap)
Installez le package python dans un environnement hors ligne
Jugons les émotions à l'aide de l'API Emotion en Python
Le 18ème problème d'écriture en temps réel hors ligne en Python
J'ai essayé d'implémenter TOPIC MODEL en Python
Faisons quelques exemples de traitement des notifications en Python
[Implémentation pour l'apprentissage] Implémentation de l'échantillonnage stratifié en Python (1)
J'ai essayé d'implémenter le tri sélectif en python
Implémentez "Tout ce dont vous avez besoin, c'est tuer" en Python
Le 19ème problème d'écriture en temps réel hors ligne en Python
Implémenter l'algorithme PRML en Python (presque uniquement Numpy)
Quadtree en Python --2
Python en optimisation
CURL en Python
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python