Llevo un tiempo trasteando con Julius y ahora que tengo algo de experiencia, voy a crear un manual para que todo el mundo pueda probar esta increíble aplicación, que nos brinda la oportunidad de usar el reconocimiento por voz, puedo decir que funciona mas rápido que el reconocimiento de Google API, ya que no necesita de una conexión a Internet, trabaja localmente lo que lo hace mucho mas rápido, en mi caso el acierto de las palabras es muy alto, de todas formas eso depende mas del modelo que se usa que de Julius.
Aquí dejo un video de ejemplo donde se puede ver que según le das la orden la ejecuta, no tarda ni un segundo es casi inmediata la respuesta.
Julius en Raspberry pi2
Para asegurarme de que todo os va a funcionar he descargado la imagen “Raspbian Jessie Lite”
la he puesto en una tarjeta microSD y desde una instalación nueva he empezado el manual, así que puedo asegurar que la instalación funcionara en cualquier raspberry pi2
Lo primero es instalar un paquete: (En otros sitios nos mandan instalar un montón pero realmente solo es este)
Code: Select all
sudo apt install libasound2-devCode: Select all
configure: error: no ALSA header!
configure: error: ./configure failed for libsentCode: Select all
wget https://github.com/julius-speech/julius/archive/master.zipCode: Select all
mv master.zip julius-master.zipCode: Select all
unzip julius-master.zipCode: Select all
cd julius-masterCode: Select all
sudo ./configure --with-mictype=alsa
sudo make
sudo make installCode: Select all
juliusCode: Select all
pi@raspberrypi:~/julius-master $ julius
Julius rev.4.4.2 - based on
JuliusLib rev.4.4.2 (fast) built for armv7l-unknown-linux-gnueabi
Copyright (c) 1991-2016 Kawahara Lab., Kyoto University
Copyright (c) 1997-2000 Information-technology Promotion Agency, Japan
Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
Copyright (c) 2005-2016 Julius project team, Nagoya Institute of Technology
Try '-setting' for built-in engine configuration.
Try '-help' for run time options.Code: Select all
pi@raspberrypi:~/julius-master $ lsusb
Bus 001 Device 005: ID 248a:8566
Bus 001 Device 004: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubCode: Select all
pi@raspberrypi:~/julius-master $ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0Para configurar la tarjeta que usamos escribe el comando: amixer sget Mic -c 1
Code: Select all
pi@raspberrypi:~/julius-master $ amixer sget Mic -c 1
Simple mixer control 'Mic',0
Capabilities: cvolume cvolume-joined cswitch cswitch-joined
Capture channels: Mono
Limits: Capture 0 - 16
Mono: Capture 0 [0%] [0.00dB] [on]Code: Select all
pi@raspberrypi:~/julius-master $ amixer sset Mic 16 -c 1
Simple mixer control 'Mic',0
Capabilities: cvolume cvolume-joined cswitch cswitch-joined
Capture channels: Mono
Limits: Capture 0 - 16
Mono: Capture 16 [100%] [23.81dB] [on]Code: Select all
export ALSADEV="plughw:1,0"
echo $ ALSADEVCode: Select all
cd ../Code: Select all
pi@raspberrypi:~ $ pwd
/home/piCode: Select all
mkdir Quickstart-LinuxCode: Select all
pi@raspberrypi:~ $ ls
julius-master Quickstart-LinuxCode: Select all
cd Quickstart-LinuxCode: Select all
wget http://www.repository.voxforge1.org/downloads/Main/Tags/Releases/0.9.0/Julius-4.3.1-Quickstart-Linux_\(0.9.0\).tgzCode: Select all
tar -xvzf Julius-4.3.1-Quickstart-Linux_\(0.9.0\).tgztar: julius: Cannot open: File exists
tar: Exiting with failure status due to previous errors
Descomprime bien todo, solo que nos da esos avisos, así que ni caso listamos los archivos que hemos obtenido con ls -la
Code: Select all
pi@raspberrypi:~/Quickstart-Linux $ ls -la
acoustic_model_files
GRAMMAR_NOTES
LICENSE
etc
julius
README
grammar
Julius-4.3.1-Quickstart-Linux_(0.9.0).tgz
Sample.jconfCode: Select all
julius -input mic -C Sample.jconfCode: Select all
<<< please speak >>> En este caso podemos usar estas palabras para el reconocimiento:
% NS_B
<s> sil
% NS_E
</s> sil
% CALL
PHONE f ow n
CALL k ao l
% DIAL
DIAL d ay ah l
% NAME
STEVE s t iy v
YOUNG y ah ng
BOB b aa b
JOHNSTON jh aa n s t ah n
JOHN jh aa n
JORDAN jh ao r d ah n
JOE jh ow
% DIGIT
FIVE f ay v
FOUR f ao r
NINE n ay n
EIGHT ey t
OH ow
ONE w ah n
SEVEN s eh v ah n
SIX s ih k s
THREE th r iy
TWO t uw
ZERO z iy r ow
Por alguna razón si reinicias tu raspberry tienes que volver a lanzar este comando:
Code: Select all
export ALSADEV="plughw:1,0"Code: Select all
### read waveform input
Error: adin_alsa: cannot open PCM device "default" (No such file or directory)
failed to begin input streamSeguimos ahora vamos a manejar Rhythmbox el reproductor de música con la voz para esto vamos a descargar un ejemplo que hay hecho para no mezclar las cosas vamos a crear un directorio de trabajo.
Code: Select all
mkdir reproductor Code: Select all
cd reproductor Code: Select all
wget http://es.archive.ubuntu.com/ubuntu/pool/universe/j/julius-voxforge/julius-voxforge_0.1.1~daily20130206-0ubuntu1_all.debCode: Select all
sudo dpkg --install julius-voxforge_0.1.1~daily20130206-0ubuntu1_all.debCode: Select all
rm julius-voxforge_0.1.1~daily20130206-0ubuntu1_all.debCode: Select all
cp /usr/share/doc/julius-voxforge/examples/julian.jconf.gz ./Code: Select all
gunzip julian.jconf.gzCode: Select all
cp /usr/share/doc/julius-voxforge/examples/controlapp/mediaplayer* ./
cp /usr/share/doc/julius-voxforge/examples/controlapp/command.py ./command.py = Script que coge la salida de julius y hace lo que queremos
julian.jconf = configuración básica de julius
mediaplayer.grammar = Fichero de gramática
mediaplayer.voca = Fichero de vocabulario
Ahora vamos a compilar todo, para compilar simplemente vamos a ejecutar mkdfa.pl mas el nombre del archivo sin extensión. Tanto el archivo .grammar como el .voca deben tener el mismo nombre . Lanzamos el comando sólo una vez y compila ambos archivos escribe:
Code: Select all
mkdfa.pl mediaplayerCode: Select all
pi@raspberrypi:~/reproductor $ mkdfa.pl mediaplayer
mediaplayer.grammar has 1 rules
mediaplayer.voca has 4 categories and 9 words
---
Now parsing grammar file
Now modifying grammar to minimize states[-1]
Now parsing vocabulary file
Now making nondeterministic finite automaton[5/5]
Now making deterministic finite automaton[5/5]
Now making triplet list[5/5]
4 categories, 5 nodes, 4 arcs
-> minimized: 5 nodes, 4 arcs
---
generated: mediaplayer.dfa mediaplayer.term mediaplayer.dictcommand.py
julian.jconf
mediaplayer.dfa
mediaplayer.dict
mediaplayer.grammar
mediaplayer.term
mediaplayer.voca
Ahora vamos a preparar el archivo de configuración julian.jconf lo abrimos para editarlo y hacemos los cambios encuentra esto: (número de línea 36 y 37)
Code: Select all
-dfa sample.dfa
-v sample.dictCode: Select all
-dfa mediaplayer.dfa
-v mediaplayer.dictAhora, el último paso es simplemente hacer funcionar a Julius, tuve un problema con privilegios:
Code: Select all
pi@raspberrypi:~/reproductor $ julius -C julian.jconf | ./command.py
-bash: ./command.py: Permission deniedCode: Select all
sudo chmod 777 -R ./Code: Select all
export ALSADEV="plughw:1,0"Code: Select all
julius -C julian.jconf | ./command.pyMe queda pendiente probarlo en Español, porque se que hay 2 modelos en español en voxforge y voy a probarlos para el que lo prefiera en español. Si alguien lo hizo ya pues que comparta. porque esto es para todos yo he tardado mucho tiempo en hacerlo funcionar y he tenido que dar muchas vueltas lo comparto para que no tengan el mismo problema.
Un saludo y espero comentarios!!