Julius scheint eine Lesedatei und eine Grammatikdatei zu haben, um die Authentifizierung zu beschleunigen. Ich werde versuchen, welches einfacher zu bedienen ist.
Probieren Sie die Julius-Sprachauthentifizierung aus, um einen Raspberry Pi Robo zu erstellen, der Ihre Fragen beantwortet.
Das endgültige Ziel ist die Sprachauthentifizierung und -transkription mit Raspberry Pi 3 x Julius x Watson (Sprache zu Text), wie in der folgenden Abbildung gezeigt. (http://qiita.com/nanako_ut/items/1e044eb494623a3961a5)
Dieses Mal werden wir Julius in den Teilen ① und ② in der folgenden Abbildung überprüfen.
Es wird davon ausgegangen, dass Folgendes bereit ist. Listen Sie als Referenz den Link der Site auf, auf die ich verwiesen habe
$ cat julius_watson.yomi
Razz Pie Raspetorte
Watson fing an
Watson beendete Watson Shuryo
Test Test
Start
Ende Ende
Ende Ende
Antworte mir
Sag etwas
Grüße
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 ← In das oben beschriebene Wörterbuchformat konvertiert.Geben Sie dic an
-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
~ Auf halbem Weg ~
----------------------- 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:Grüße ← Lärm
sentence1:Grüße ← Lärm
pass1_best:Grüße ← Sag "Danke"
sentence1:Freut mich, dich kennenzulernen
pass1_best:Watson ← Sag "Watson"
sentence1:Watson
pass1_best:Watson gestartet ← Sagen Sie "Watson gestartet"
sentence1:Watson fing an
pass1_best:Razpai ← Sag "Ich möchte hungrig sein"
sentence1:Razz Pie
<<< please speak >>>^C
Auch bei Lärm wird "Danke" angezeigt ... Werden alle unentscheidbaren Wörter als letzter Buchstabe der Lesedatei interpretiert? ??
$ 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
Elektrisch d e n k i
% WO
W o
% PLEASE
Zieh es an
Löschen Sie 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 fing an[s]← Sag "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 fing an[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]Razz Pie[s]← Sag "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]Razz Pie[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 >>>
Wenn Sie ein Wort aussprechen, interpretieren Sie es, indem Sie die Nase + das Verb ergänzen? ?? Es gibt das Gefühl, nicht gut zu sein. .. .. Es ist ein wenig, um das nachzuholen, was ich nicht gesagt habe ...
Es scheint, dass Sie von anderen Modulen aus eine Verbindung zu Julius herstellen können, indem Sie die Option -module hinzufügen. Starten Sie Julius also mit der Option -module und versuchen Sie, das Verbindungs- / Analyseergebnis von Python an den Julius-Server auszugeben.
Ausgabeprogramm für Julius-Verbindung und Analyseergebnisse. Jemand hat die Quelle des Vorfahren kopiert, aber ... ich habe die Quelle aus den Augen verloren. .. .. Wir werden es aktualisieren, sobald es klar wird.
Julius_test.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import socket
import cStringIO
host = 'XXX.XXX.XX.XX' #← Geben Sie die lokale Hostadresse ein
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()
Starten Sie Julius zunächst im Modulmodus
~/julius-kits/dictation-kit-v4.3.1-linux $ julius -C main.jconf -C am-gmm.jconf -module
Ausführungsergebnis
$ python Julius_test.py
<RECOGOUT>
<SHYPO RANK="1" SCORE="-5520.531738">
<WHYPO WORD="" CLASSID="<s>" PHONE="silB" CM="0.200"/>
<WHYPO WORD="Stimme" CLASSID="Stimme+Substantiv" PHONE="o N s e:" CM="0.187"/>
<WHYPO WORD="Authentifizierung" CLASSID="Authentifizierung+Substantiv" PHONE="n i N sh o:" CM="0.074"/>
<WHYPO WORD="Prüfung" CLASSID="Prüfung+Substantiv" PHONE="t e s u t o" CM="0.273"/>
<WHYPO WORD="。" CLASSID="</s>" PHONE="silE" CM="1.000"/>
</SHYPO>
</RECOGOUT>
Hier ist eine Zusammenfassung der Unterschiede beim Ausführen im Modulmodus.
■ Datei lesen
cd julius-kits/dictation-kit-v4.3.1-linux
julius -C julius_watson.jconf -module
■ Grammatikdatei
julius -C julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram julius_watson
※.hmm_mono.In jconf,-Beschreiben Sie die Moduloption
Das Ergebnis von "Watson hat begonnen"
■ Grammatikdatei
<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="löschen" 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>
■ Datei lesen
<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 fing an" CLASSID="Watson fing an" PHONE="silB w a t o s o N k a i sh i silE" CM="1.000"/>
</SHYPO>
</RECOGOUT>
Wenn Sie "Start Watson" sagen ・ Grammatikdatei ⇒ "Watson" -Hit "Watson löschen" ist sehr genau. ・ Datei lesen ⇒ Da Nomenklatur und Verb getrennt sind, werden "Watson" und "Watson start" getrennt beurteilt.
⇒ Wie registriere ich die Grammatikdatei in Worten? ?? Wenn Sie mit Nomenklatur + Verben sprechen, auch wenn Sie es nicht als Satz bezeichnen, scheint die Fehlerkennung erheblich zuzunehmen. Diesmal sieht die Grammatikdatei besser aus.
Julius wurde mit raspberryPi2 als langsam beschrieben, aber ich fand, dass es mit raspbeerypi3 ziemlich schnell war. Um die Authentifizierungsgeschwindigkeit zu verbessern, ist möglicherweise keine Lesedatei oder Grammatikdatei erforderlich. Wenn ich die Wörter, mit denen ich gesprochen habe, in gewissem Maße einschränken könnte, fragte ich mich, ob ich eine Lesedatei oder eine Grammatikdatei verwenden würde, um die Authentifizierungsrate zu verbessern.
Recommended Posts