[PYTHON] Raspberry Pi 3 x Julius (Lese- und Grammatikdatei)

Was du machen willst

Julius scheint eine Lesedatei und eine Grammatikdatei zu haben, um die Authentifizierung zu beschleunigen. Ich werde versuchen, welches einfacher zu bedienen ist.

Hintergrund

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. img20170324_14192489.jpg

Umgebung

Annahme

Es wird davon ausgegangen, dass Folgendes bereit ist. Listen Sie als Referenz den Link der Site auf, auf die ich verwiesen habe

Verfahren

  1. Erstellen Sie eine Lesedatei
  2. Erstellen Sie eine Grammatikdatei
  3. Analysieren Sie Julius Stimme mit Python
  4. Zusammenfassung (Unterschied zwischen Lesedatei und Grammatikdatei)

■ Datei lesen

1.1 Erstellen Sie eine Lesedatei

$ 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

1.2 In Wörterbuchformat konvertieren

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 Erstellen Sie eine Konfigurationsdatei

$ 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

1.4 Ausführung

$ 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

1.5 Impressionen

Auch bei Lärm wird "Danke" angezeigt ... Werden alle unentscheidbaren Wörter als letzter Buchstabe der Lesedatei interpretiert? ??

■ Erstellen Sie eine Grammatikdatei

2.1 Eine Reihe phonetischer Noten in einer Voca-Datei? Beschreiben

$ 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

2.2 Erstellen Sie eine Grammatikdatei, um Syntaxbeschränkungen durchzusetzen

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

2.3 Kompilieren Sie Grammatikdateien, Konfigurationsbeschränkungsdateien usw.

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 Funktionsprüfung

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 >>>

2.5 Eindrücke

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 ...

■ Analysieren Sie Julius Voice mit Python

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.

3.1 Python-Programm

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()

3.2 Ausführung

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>

■ Zusammenfassung (Unterschied zwischen Lesedatei und Grammatikdatei)

Hier ist eine Zusammenfassung der Unterschiede beim Ausführen im Modulmodus.

4.1 Ausführen

■ 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

4.2 Ausführungsergebnis

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>

4.3 Überlegung

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.

Schließlich

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

Raspberry Pi 3 x Julius (Lese- und Grammatikdatei)
Verwenden Sie raspberryPi und Julius (Spracherkennung). ③ Wörterbucherstellung
Erstellen Sie LCD-Spiele (16x2) mit Raspberry Pi und Python
MQTT auf Raspberry Pi und Mac
Lesen und Schreiben von Python CSV-Dateien
Haustierüberwachung mit Rekognition und Raspberry pi
Sprachauthentifizierung und Transkription mit Raspberry Pi 3 x Julius x Watson (Rede zu Text)
[Raspberry Pi] Fügen Sie ein Thermometer und ein Feuchtigkeitsmessgerät hinzu
Rabbit MQ Nachrichtenbenachrichtigungs-App mit Growl in Python ~ mit Raspeye und Julius ~
[pandas] CSV-Datei Lese- und Anzeigemethode
Erstellen eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (3) Empfangen einer Python-Datei
MQTT Radicon Car mit Arduino und Himbeere
Einfache Verbindung zwischen Raspberry Pi und AWS IoT
Holen Sie sich Temperatur und Luftfeuchtigkeit mit DHT11 und Raspberry Pi
Beispiel für ein Raspberry Pi und AWS IoT-Verbindungsprogramm
Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
Maschinelles Lernen mit Raspberry Pi 4 und Coral USB Accelerator
Erstellen Sie einen Farbsensor mit einem Raspeltorte und einer Kamera
Einfaches IoT, um mit Raspeye und MESH zu beginnen
Ermitteln Sie den Tragezustand der Maske mit OpenCV und Raspberry Pi
Messen Sie Temperatur und Luftfeuchtigkeit mit Raspberry Pi3 und visualisieren Sie mit Ambient
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Installation von Docker auf Raspberry Pi und L Chika
Installieren Sie pyenv auf Raspberry Pi, um Python zu verwalten
Fehlerbehebung bei der Installation von OpenCV auf Raspberry Pi und der Erfassung