Xibo aan het praten

Gebruikerswaardering: 0 / 5

Ster inactiefSter inactiefSter inactiefSter inactiefSter inactief
 

Xibo is een systeem waarmee je berichten op monitoren kunt plaatsen. Als een soort kabelkrant. Dat heet narrow-casting.

Je kent die dingen vast wel. Je ziet ze steeds meer. Die monitoren in winkels, op het station en in gebouwen waarop informatie getoond wordt.

Dit kun je doen met Xibo. Xibo is een server-client systeem. Dus er is een centrale server die één of meerdere monitoren aanstuurt en clients, die de monitoren aanstuurt.

Bij Bartiméus gebruiken we dit ook. Er zijn in het Atrium drie van die monitoren. Twee voor de medewerkers, ze hangen op plaatsen waar alleen de medewerkers komen. Eén is er voor de clienten. Deze hangt in de wachtruimte.

Maar nu zul je denken, de clienten van Bartiméus zijn vaak toch slechtziend of blind? Dat klopt. Maar deze mensen hebben ten eerste gewoon begeleiding bij zich. Die kunnen over het algemeen gewoon zien.

Maar voor de slechtziende en blinde client hebben we daar ook een oplossing voor gevonden. Dit was wel een beetje ingewikkeld. We laten de clientsystemen de berichten voorlezen. Dit doen we met spraaksoftware. Spraak op computers wordt steeds beter, dus prima geschikt om voor te laten lezen. 

Wat moest er gedaan worden om de systemen zover te krijgen dat de berichten voorgelezen worden?

De Xibo clients werken op de achtergrond met HTML bestanden. Dit zijn dus eigenlijk internetpagina's. Maar de HTML die gebruikt werd, kon niet door een tekst-browser gelezen worden. Dat was jammer, want door het door een tekst-browser te sturen was de makkelijkste manier om er gewone tekstbestanden van te maken. Nu ging dat niet. 

We moesten dus de HTML bestanden eerst goed bekijken. Toen bleek dat de eerste 91 regels van het HTML bestand puur voor Xibo was. Dus na het kopieren van het HTML bestand naar een tekstbestand, konden deze eerste 91 regels gelijk weggegooid worden. Ook de laatse 50 regels waren voor het voorlezen niet nodig, dus die konden ook weggegooid worden.

Daarna werd gekeken welke vreemde karacters er verder nog in het overgebleven tekstbestand stonden. 

Toen bleek dat we nog met enkele HTML bestanden een probleem hadden. Dit waren HTML bestanden die van een RSS feed afkomstig waren. Zeg maar van een nieuwssite. Deze kennen meestal meerdere berichten. We hadden steeds maar de eerste nodig. Dit moest dus in het tekstbestand gemarkeerd worden. Na die markering mocht alle tekst verwijderd worden.

Dit hebben we allemaal in een script gezet:

 

cd /opt/xibo/pyclient/client/python/data

inotifywait -m /opt/xibo/pyclient/client/python/data/*-cache.html | awk '$2 == "OPEN" { print $1; fflush() }' |

    while read file; do

#echo "Print filename"

        echo "$file = file"

        # Strip file

# first remove the first 91 lines and the last 58 lines

tail -n +91 $file | head -n -58 > txt.html

# remove the characters that are not needed

nohtml -infile txt.html -outfile txt.txt 

rpl '\' ' ' txt.txt

sed -r 's .{378}  ' txt.txt > txt2.txt

rpl 'n n t' ' ' txt2.txt

rpl ' ' ' ' txt2.txt

rpl ' n n' ' ' txt2.txt

rpl 'n"];' ' ' txt2.txt

rpl '"];' ' ' txt2.txt

rpl '’' ' ' txt2.txt

rpl '‘' ' ' txt2.txt

# Make sure that the name of the organisation Bartimeus is written in the good way

rpl 'Bartiméus' 'Bartimeus ' txt2.txt

# Make sure that the word euro is written in the good way

rpl '€' 'euro ' txt2.txt

# Make the dollar sign the last character of the first story of a RSS feed

rpl 'n"," n t' '$ ' txt2.txt

rpl ' n","' '$ ' txt2.txt

# Remove all other storys of a RSS feed

# Place the final text in the file for speaking out loud

cat txt2.txt | cut -d'$' -f1 > textspraak.txt

sh ~/Xibo_extra/read.sh /opt/xibo/pyclient/client/python/data/textspraak.txt

sleep 1s

# remove all temporary files 

rm -f textspraak.txt

rm -f txt.html

rm -f txt.txt

rm -f txt2.txt

# remove the original html file to make sure it is not read again

rm -f $file

done

 

Je ziet dat dit script op een gegeven moment read.sh opstart. Dit is het script wat het bestand textspraak.txt uiteindelijk voorleest. 

Dat ziet er zo uit:

 

#!/bin/sh

# Says the contents of a text file in French.

# See - http://doc.ubuntu-fr.org/synthese_vocale - 2010.08.08

# If mbrola is already running, then stop reading, otherwise read aloud.

# Try to locate the nl2 mbrola voice

if [ -f /usr/share/festival/voices/fr/nl2/nl2 ] ; then 

  VOICEFILE="/usr/share/festival/voices/fr/nl2/nl2"

elif [ -f /usr/share/mbrola/nl2/nl2/nl2 ] ; then

  VOICEFILE="/usr/share/mbrola/nl2/nl2/nl2"

elif [ -f /usr/share/mbrola/nl2/nl2 ] ; then

  VOICEFILE="/usr/share/mbrola/nl2/nl2"

elif [ -f /usr/local/share/mbrola/nl2/nl2/nl2 ] ; then

  VOICEFILE="/usr/local/share/mbrola/nl2/nl2/nl2"

elif [ -f /usr/local/share/mbrola/nl2/nl2 ] ; then

  VOICEFILE="/usr/local/share/mbrola/nl2/nl2"

elif [ -f /usr/local/share/mbrola/voices/nl2 ] ; then

  VOICEFILE="/usr/local/share/mbrola/voices/nl2"

elif [ -f /usr/share/mbrola/voices/nl2 ] ; then

  VOICEFILE="/usr/share/mbrola/voices/nl2"

else # debian default

  VOICEFILE="/usr/share/mbrola/voices/nl2"   Click to listen highlighted text! Xibo is een systeem waarmee je berichten op monitoren kunt plaatsen. Als een soort kabelkrant. Dat heet narrow-casting. Je kent die dingen vast wel. Je ziet ze steeds meer. Die monitoren in winkels, op het station en in gebouwen waarop informatie getoond wordt. Dit kun je doen met Xibo. Xibo is een server-client systeem. Dus er is een centrale server die één of meerdere monitoren aanstuurt en clients, die de monitoren aanstuurt. Bij Bartiméus gebruiken we dit ook. Er zijn in het Atrium drie van die monitoren. Twee voor de medewerkers, ze hangen op plaatsen waar alleen de medewerkers komen. Eén is er voor de clienten. Deze hangt in de wachtruimte. Maar nu zul je denken, de clienten van Bartiméus zijn vaak toch slechtziend of blind? Dat klopt. Maar deze mensen hebben ten eerste gewoon begeleiding bij zich. Die kunnen over het algemeen gewoon zien. Maar voor de slechtziende en blinde client hebben we daar ook een oplossing voor gevonden. Dit was wel een beetje ingewikkeld. We laten de clientsystemen de berichten voorlezen. Dit doen we met spraaksoftware. Spraak op computers wordt steeds beter, dus prima geschikt om voor te laten lezen.  Wat moest er gedaan worden om de systemen zover te krijgen dat de berichten voorgelezen worden? De Xibo clients werken op de achtergrond met HTML bestanden. Dit zijn dus eigenlijk internetpaginas. Maar de HTML die gebruikt werd, kon niet door een tekst-browser gelezen worden. Dat was jammer, want door het door een tekst-browser te sturen was de makkelijkste manier om er gewone tekstbestanden van te maken. Nu ging dat niet.  We moesten dus de HTML bestanden eerst goed bekijken. Toen bleek dat de eerste 91 regels van het HTML bestand puur voor Xibo was. Dus na het kopieren van het HTML bestand naar een tekstbestand, konden deze eerste 91 regels gelijk weggegooid worden. Ook de laatse 50 regels waren voor het voorlezen niet nodig, dus die konden ook weggegooid worden. Daarna werd gekeken welke vreemde karacters er verder nog in het overgebleven tekstbestand stonden.  Toen bleek dat we nog met enkele HTML bestanden een probleem hadden. Dit waren HTML bestanden die van een RSS feed afkomstig waren. Zeg maar van een nieuwssite. Deze kennen meestal meerdere berichten. We hadden steeds maar de eerste nodig. Dit moest dus in het tekstbestand gemarkeerd worden. Na die markering mocht alle tekst verwijderd worden. Dit hebben we allemaal in een script gezet:   cd /opt/xibo/pyclient/client/python/data inotifywait -m /opt/xibo/pyclient/client/python/data/*-cache.html | awk $2 == OPEN { print $1; fflush() } |     while read file; do #echo Print filename         echo $file = file         # Strip file # first remove the first 91 lines and the last 58 lines tail -n +91 $file | head -n -58 > txt.html # remove the characters that are not needed nohtml -infile txt.html -outfile txt.txt  rpl \ txt.txt sed -r s .{378}   txt.txt > txt2.txt rpl n n t txt2.txt rpl   txt2.txt rpl n n txt2.txt rpl n]; txt2.txt rpl ]; txt2.txt rpl ’ txt2.txt rpl ‘ txt2.txt # Make sure that the name of the organisation Bartimeus is written in the good way rpl Bartiméus Bartimeus txt2.txt # Make sure that the word euro is written in the good way rpl € euro txt2.txt # Make the dollar sign the last character of the first story of a RSS feed rpl n, n t $ txt2.txt rpl n, $ txt2.txt # Remove all other storys of a RSS feed # Place the final text in the file for speaking out loud cat txt2.txt | cut -d$ -f1 > textspraak.txt sh ~/Xibo_extra/read.sh /opt/xibo/pyclient/client/python/data/textspraak.txt sleep 1s # remove all temporary files  rm -f textspraak.txt rm -f txt.html rm -f txt.txt rm -f txt2.txt # remove the original html file to make sure it is not read again rm -f $file done   Je ziet dat dit script op een gegeven moment read.sh opstart. Dit is het script wat het bestand textspraak.txt uiteindelijk voorleest.  Dat ziet er zo uit:   #!/bin/sh # Says the contents of a text file in French. # See - http://doc.ubuntu-fr.org/synthese_vocale - 2010.08.08 # If mbrola is already running, then stop reading, otherwise read aloud. # Try to locate the nl2 mbrola voice if [ -f /usr/share/festival/voices/fr/nl2/nl2 ] ; then    VOICEFILE=/usr/share/festival/voices/fr/nl2/nl2 elif [ -f /usr/share/mbrola/nl2/nl2/nl2 ] ; then   VOICEFILE=/usr/share/mbrola/nl2/nl2/nl2 elif [ -f /usr/share/mbrola/nl2/nl2 ] ; then   VOICEFILE=/usr/share/mbrola/nl2/nl2 elif [ -f /usr/local/share/mbrola/nl2/nl2/nl2 ] ; then   VOICEFILE=/usr/local/share/mbrola/nl2/nl2/nl2 elif [ -f /usr/local/share/mbrola/nl2/nl2 ] ; then   VOICEFILE=/usr/local/share/mbrola/nl2/nl2 elif [ -f /usr/local/share/mbrola/voices/nl2 ] ; then   VOICEFILE=/usr/local/share/mbrola/voices/nl2 elif [ -f /usr/share/mbrola/voices/nl2 ] ; then   VOICEFILE=/usr/share/mbrola/voices/nl2 else # debian default   VOICEFILE=/usr/share/mbrola/voices/nl2 Powered By GSpeech

fi

 

if [ ! -z $(ps -A | grep mbrola | awk '{ print $1 }' ) ]; then

kill $(ps -A | grep mbrola | awk '{ print $1 }' )

kill $(ps -A | grep aplay | awk '{ print $1 }' )

else

  espeak -v mb-nl2 -f $1 | mbrola -e $VOICEFILE - - | aplay -r16000 -fS16

fi

 

Dit laatste script maakt gebruik van espeak. Dit is de standaard spraakengine van Ubuntu. Om de spraak in het behoorlijk Nederlands te krijgen gebruiken we de Nederlandse stem van mbrola.

Door nu het eerste script automatisch op te laten starten, hebben we ervoor gezorgd dat de Xibo-client altijd de tekst voorleest. Wel hebben we aan deze Xibo-clients een hoofdtelefoon gehangen. Anders hoort iedereen de spraak, en dat kan wat drukte en onrust veroorzaken. Verder is dit prettiger omdat spraak, als je het de hele tijd hoort en niet gewend aan bent, ook erg irritant kan zijn.

En dit alles op Ubuntu, met alleen maar Open Source software.

De scripts heb ik nu beschikbaar gesteld. Deze zijn onder GPL licentie te downloaden onder de download-sectie.

Hits: 164
Real time web analytics, Heat map tracking
naar boven

© Naamsvermelding-GelijkDelen 4.0 Internationaal (CC BY-SA 4.0) zie Licentie en rechten

Click to listen highlighted text! Powered By GSpeech