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.
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.
Ce qui suit est supposé être prêt. Pour référence, indiquez le lien du site auquel j'ai fait référence
$ 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
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
$ 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
$ 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
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? ??
$ 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
cat julius_watson.grammar
S : NS_B WATSON_ PLEASE NS_E
WATSON_ : WATSON
WATSON_ : WATSON WO
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
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 >>>
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 ...
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.
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()
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>
Voici un résumé des différences lors de l'exécution en mode module.
■ 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
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>
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.
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