[PYTHON] Raspberry Pi 3 x Julius (fichier de lecture et fichier de grammaire)

Chose que tu veux faire

Julius semble avoir un fichier de lecture et un fichier de grammaire pour accélérer l'authentification. Je vais essayer lequel est le plus facile à utiliser.

Contexte

Essayez l'authentification vocale Julius pour créer un Raspberry Pi Robo qui répond à vos questions.

L'objectif final est l'authentification et la transcription vocales avec Raspberry Pi 3 x Julius x Watson (Speech to Text), comme indiqué dans la figure ci-dessous. (http://qiita.com/nanako_ut/items/1e044eb494623a3961a5)

Cette fois, nous vérifierons Julius dans les parties ① et ② de la figure ci-dessous. img20170324_14192489.jpg

environnement

supposition

Ce qui suit est supposé être prêt. Pour référence, indiquez le lien du site auquel j'ai fait référence

procédure

  1. Créer un fichier de lecture
  2. Créez un fichier de grammaire
  3. Analysez la voix de julius avec python
  4. Résumé (différence entre le fichier de lecture et le fichier de grammaire)

■ Lecture du fichier

1.1 Créer un fichier de lecture

$ cat julius_watson.yomi
Tarte Razz Tarte aux framboises
Watson a commencé
Watson a terminé Watson Shuryo
Test de test
Début
Fin fin
Fin Fin
Répond moi
Dis quelquechose
Cordialement

1.2 Convertir au format dictionnaire

iconv -f utf8 -t eucjp ~/julius_watson.yomi | ~/julius-kits/dictation-kit-v4.3.1-linux/bin/yomi2voca.pl > ~/julius-kits/dictation-kit-v4.3.1-linux/julius_watson.dic

1.3 Créer un fichier de configuration

$ cat ~/julius-kits/dictation-kit-v4.3.1-linux/julius_watson.jconf
-w julius_watson.dic ← Converti au format dictionnaire ci-dessus.Spécifiez le dic
-v model/lang_m/bccwj.60k.htkdic
-h model/phone_m/jnas-tri-3k16-gid.binhmm
-hlist model/phone_m/logicalTri
-lmp 8.0 -2.0
-lmp2 8.0 -2.0
-b 1500
-b2 100
-s 500
-m 10000
-n 30
-output 1
-input mic
-zmeanframe
-rejectshort 800
-charconv EUC-JP UTF-8

1.4 Exécution

$ cd julius-kits/dictation-kit-v4.3.1-linux
~/julius-kits/dictation-kit-v4.3.1-linux $ julius -C julius_watson.jconf -demo

STAT: include config: julius_watson.jconf
WARNING: m_chkparam: "-lmp" only for N-gram, ignored
WARNING: m_chkparam: "-lmp2" only for N-gram, ignored
STAT: jconf successfully finalized

~ À mi-chemin ~

----------------------- System Information end -----------------------

Notice for feature extraction (01),
        *************************************************************
        * Cepstral mean normalization for real-time decoding:       *
        * NOTICE: The first input may not be recognized, since      *
        *         no initial mean is available on startup.          *
        *************************************************************

Stat: adin_oss: device name = /dev/dsp (application default)
Stat: adin_oss: sampling rate = 16000Hz
Stat: adin_oss: going to set latency to 50 msec
Stat: adin_oss: audio I/O Latency = 32 msec (fragment size = 512 samples)
STAT: AD-in thread created

pass1_best:Cordialement ← Bruit
sentence1:Cordialement ← Bruit
pass1_best:Cordialement ← Dites "Merci"
sentence1:Ravi de vous rencontrer
pass1_best:Watson ← Dites «Watson»
sentence1:Watson
pass1_best:Watson a commencé ← Dites "Watson a commencé"
sentence1:Watson a commencé
pass1_best:Razpai ← Dites "Je veux avoir faim"
sentence1:Tarte Razz
<<< please speak >>>^C

1.5 Impressions

Même avec du bruit, "Merci" s'affiche ... Tous les mots indécidables sont-ils interprétés comme la dernière lettre du fichier de lecture? ??

■ Créer un fichier de grammaire

2.1 Chaîne sonore dans le fichier voca? Décris

$ cat julius_watson.voca
Watson w a t s o n
Raspeye r a z u p a i
NFL  a m e f u t o
Électrique d e n k i
% WO
W o
% PLEASE
Mettre sur t u k e t e
Effacer k e sh i t e
% NS_B
[s]     silB
% NS_E
[s]     silE

2.2 Créer un fichier de grammaire pour appliquer les contraintes de syntaxe

cat julius_watson.grammar
S      : NS_B WATSON_ PLEASE NS_E
WATSON_ : WATSON
WATSON_ : WATSON WO

2.3 Compiler les fichiers de grammaire, les fichiers de contraintes de configuration, etc.

cp julius-4.3.1/gramtools/mkdfa/mkfa-1.44-flex/mkfa julius-4.3.1/gramtools/mkdfa/mkfa
cp julius-4.3.1/gramtools/dfa_minimize/dfa_minimize julius-4.3.1/gramtools/mkdfa/dfa_minimize

sudo julius-4.3.1/gramtools/mkdfa/mkdfa.pl julius_watson

julius_watson.grammar has 3 rules
julius_watson.voca    has 5 categories and 9 words
---
Now parsing grammar file
Now modifying grammar to minimize states[-1]
Now parsing vocabulary file
Now making nondeterministic finite automaton[6/6]
Now making deterministic finite automaton[6/6]
Now making triplet list[6/6]
5 categories, 6 nodes, 6 arcs
-> minimized: 6 nodes, 6 arcs
---
generated: julius_watson.dfa julius_watson.term julius_watson.dict

2.4 Contrôle de fonctionnement

Stat: adin_oss: device name = /dev/dsp (application default)
Stat: adin_oss: sampling rate = 16000Hz
Stat: adin_oss: going to set latency to 50 msec
Stat: adin_oss: audio I/O Latency = 32 msec (fragment size = 512 samples)
STAT: AD-in thread created
pass1_best: [s]Watson a commencé[s]← Dites «Watson»
pass1_best_wordseq: 3 0 2 4
pass1_best_phonemeseq: silB | w a t o s n | k a i s i | silE
pass1_best_score: -3108.902100
### Recognition: 2nd pass (RL heuristic best-first)
STAT: 00 _default: 23 generated, 23 pushed, 5 nodes popped in 122
sentence1: [s]Watson a commencé[s]
wseq1: 3 0 2 4
phseq1: silB | w a t o s n | k a i s i | silE
cmscore1: 1.000 0.482 0.476 1.000
score1: -3108.899414

pass1_best: [s]Tarte Razz[s]← Dites "Razpai"
pass1_best_wordseq: 3 0 2 4
pass1_best_phonemeseq: silB | r a z u p a i | s i t e | silE
pass1_best_score: -3268.691406
### Recognition: 2nd pass (RL heuristic best-first)
STAT: 00 _default: 23 generated, 23 pushed, 5 nodes popped in 132
sentence1: [s]Tarte Razz[s]
wseq1: 3 0 2 4
phseq1: silB | r a z u p a i | s i t e | silE
cmscore1: 1.000 0.959 0.691 1.000
score1: -3268.694824

<<< please speak >>>

2.5 Impressions

Si vous prononcez un mot, l'interprétez-vous en complétant le nez + le verbe? ?? Il y a un sentiment de ne pas être bon. .. .. C'est un peu pour compenser ce que je n'ai pas dit ...

■ Analysez la voix de julius avec python

Il semble que vous puissiez vous connecter à Julius à partir d'autres modules en ajoutant l'option -module. Alors, démarrez Julius avec l'option -module, et essayez de sortir le résultat de la connexion / analyse de python vers le serveur julius.

3.1 programme python

Connexion Julius et programme de sortie des résultats d'analyse. Quelqu'un a copié la source de l'ancêtre, mais ... j'ai perdu de vue la source. .. .. Nous le mettrons à jour dès qu'il deviendra clair.

Julius_test.py


#!/usr/bin/python
# -*- coding: utf-8 -*-
import socket
import cStringIO
host = 'XXX.XXX.XX.XX' #← Entrez l'adresse de l'hôte local

port = 10500
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
xml_buff = ""
in_recoguout = False
while True:
    data = cStringIO.StringIO(sock.recv(4096))
    line = data.readline()
    while line:
        if line.startswith(""):
            in_recoguout = True
            xml_buff += line
        elif line.startswith(""):
            xml_buff += line
            print xml_buff
            in_recoguout = False
            xml_buff = ""
        else:
            if in_recoguout:
                xml_buff += line
        line = data.readline()
sock.close()

3.2 Exécution

Tout d'abord, démarrez Julius en mode module

~/julius-kits/dictation-kit-v4.3.1-linux $ julius -C main.jconf -C am-gmm.jconf -module

Résultat d'exécution

$ python Julius_test.py
<RECOGOUT>
  <SHYPO RANK="1" SCORE="-5520.531738">
    <WHYPO WORD="" CLASSID="<s>" PHONE="silB" CM="0.200"/>
    <WHYPO WORD="voix" CLASSID="voix+nom" PHONE="o N s e:" CM="0.187"/>
    <WHYPO WORD="Authentification" CLASSID="Authentification+nom" PHONE="n i N sh o:" CM="0.074"/>
    <WHYPO WORD="tester" CLASSID="tester+nom" PHONE="t e s u t o" CM="0.273"/>
    <WHYPO WORD="。" CLASSID="</s>" PHONE="silE" CM="1.000"/>
  </SHYPO>
</RECOGOUT>

■ Résumé (différence entre le fichier de lecture et le fichier de grammaire)

Voici un résumé des différences lors de l'exécution en mode module.

4.1 Comment exécuter

■ Lecture du fichier
cd julius-kits/dictation-kit-v4.3.1-linux
julius -C julius_watson.jconf -module

■ Fichier de grammaire
julius -C julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram julius_watson
※.hmm_mono.Dans jconf,-Décrire l'option du module

4.2 Résultat de l'exécution

Le résultat de dire "Watson a commencé"

■ Fichier de grammaire

<RECOGOUT>
  <SHYPO RANK="1" SCORE="-2817.017578" GRAM="0">
    <WHYPO WORD="[s]" CLASSID="3" PHONE="silB" CM="1.000"/>
    <WHYPO WORD="Watson" CLASSID="0" PHONE="w a t s n" CM="0.973"/>
    <WHYPO WORD="effacer" CLASSID="2" PHONE="k e s h i t e" CM="0.560"/>
    <WHYPO WORD="[s]" CLASSID="4" PHONE="silE" CM="1.000"/>
  </SHYPO>
</RECOGOUT>

■ Lecture du fichier

<RECOGOUT>
  <SHYPO RANK="1" SCORE="-2903.453613" GRAM="0">
    <WHYPO WORD="Watson" CLASSID="Watson" PHONE="silB w a t o s o N silE" CM="0.791"/>
  </SHYPO>
</RECOGOUT>

<RECOGOUT>
  <SHYPO RANK="1" SCORE="-8478.763672" GRAM="0">
    <WHYPO WORD="Watson a commencé" CLASSID="Watson a commencé" PHONE="silB w a t o s o N k a i sh i silE" CM="1.000"/>
  </SHYPO>
</RECOGOUT>

4.3 Considération

Si vous dites «Démarrez Watson» ・ Fichier de grammaire ⇒ "Watson" frappé "Erase Watson" est très précis. ・ Fichier de lecture ⇒ Puisque la nomenclature et le verbe sont séparés, "Watson" et "Watson start" sont jugés séparément.

⇒ Comment enregistrer le fichier de grammaire en mots? ?? Si vous parlez avec nomenclature + verbes même si vous ne l'appelez pas une phrase, il semble que la méconnaissance augmentera considérablement. Cette fois, le fichier de grammaire est meilleur.

finalement

Julius a été décrit comme lent avec raspberryPi2, mais j'ai senti que c'était assez rapide avec raspbeerypi3. Afin d'améliorer la vitesse d'authentification, il peut ne pas être nécessaire de disposer d'un fichier de lecture ou d'un fichier de grammaire. Si je pouvais limiter dans une certaine mesure les mots que j'ai prononcés, je me demandais si j'utiliserais un fichier de lecture ou un fichier de grammaire pour améliorer le taux d'authentification.

Recommended Posts

Raspberry Pi 3 x Julius (fichier de lecture et fichier de grammaire)
Utilisez raspberryPi et Julius (reconnaissance vocale). ③ Création de dictionnaire
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
MQTT sur Raspberry Pi et Mac
Lecture et écriture de fichiers CSV Python
Surveillance des animaux avec Rekognition et Raspberry pi
Authentification vocale et transcription avec Raspberry Pi 3 x Julius x Watson (Speech to Text)
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
Application de notification de message Rabbit MQ avec Growl en Python ~ avec Raspeye et Julius ~
[pandas] Méthode de lecture et d'affichage des fichiers .csv
Création d'un système de contrôle de température avec tarte aux framboises et ESP32 (3) Réception d'un fichier Python
MQTT Radicon Car avec Arduino et Raspberry
Connexion facile entre Raspberry Pi et AWS IoT
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Exemple de programme de connexion Raspberry Pi et AWS IoT
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Apprentissage automatique avec Raspberry Pi 4 et Coral USB Accelerator
Créez un capteur de couleur à l'aide d'une tarte à la râpe et d'une caméra
IoT facile pour démarrer avec Raspeye et MESH
Détecter l'état de port du masque avec OpenCV et Raspberry Pi
Mesurez la température et l'humidité avec Raspberry Pi3 et visualisez avec Ambient
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Installation de Docker sur Raspberry Pi et L Chika
Installez pyenv sur Raspberry Pi pour gérer Python
Résoudre les problèmes liés à l'installation d'OpenCV sur Raspberry Pi et à la capture