Activar Piper dins Speech-dispatcher

Miquel@Miquel-PC:~$ docker exec piper bash -c «echo \»Hola, soc l’Ona, la meva veu s’ha desenvolupat a la UPC de Barcelona.\» | piper –model /config/ca_ES-upc_ona-medium.onnx –output_file -» | aplay -f S16_LE -r 22050 -c 1
Playing WAVE ‘stdin’ : Signed 16 bit Little Endian, Rate 22050 Hz, Mono
Playing WAVE ‘stdin’ : Signed 16 bit Little Endian, Rate 22050 Hz, Mono
Playing: no se encontró la orden
Miquel@Miquel-PC:~$ tinc aquests sevidor local tts funcionant correctament. El model de Piper (ca_ES-upc_ona-medium.onnx) està dins Docker, i speech‑dispatcher no el pot carregar. podriem posar em model a /etc/speech-dispatcher/modules/piper-generic.conf (per què pugui funcionar AddModule «piper» «sd_generic» «/etc/speech-dispatcher/modules/piper-generic.conf de speech-dispatcher? PERÒ QUE SEGUEIXI FUNCIONAT EL SERVIDOR LOCAL 127.0.0.1


Resposta:

Sí. I no cal tocar ni aturar el servidor Docker que ja funciona a 127.0.0.1.

Però hi ha un punt important: no hem de posar el fitxer .onnx dins de piper-generic.conf. Aquest fitxer és de configuració de Speech Dispatcher. El que farem és que el mòdul piper de Speech Dispatcher executi el Piper que tens dins del contenidor Docker o, encara millor, que tingui accés al mateix model.

Com que ara mateix ja tens:

  • model: ca_ES-upc_ona-medium.onnx
  • Piper funcionant dins Docker
  • servidor local independent a 127.0.0.1
  • i vols conservar-lo intacte

jo faria la solució més neta: compartir el model amb Speech Dispatcher sense tocar el servidor HTTP.

1. Primer comprovem exactament on és el model

Executa:

ls -lh ~/tts-server/ca_ES-upc_ona-medium.onnx
ls -lh ~/tts-server/ca_ES-upc_ona-medium.onnx.json

I també:

docker exec piper ls -lh /config/ca_ES-upc_ona-medium.onnx

Si les tres ordres mostren el model, ja tenim confirmat que el model del Docker és accessible també des de l’amfitrió.

2. No modifiquis encara piper-generic.conf

Abans de tocar /etc/speech-dispatcher/modules/, vull comprovar quin Piper executable tenim disponible fora del Docker, perquè aquí tenim dues possibilitats:

A. Fer que Speech Dispatcher executi directament el Piper local:

Speech Dispatcher → Piper local → Ona

B. Fer que Speech Dispatcher enviï el text al Piper del Docker:

Speech Dispatcher → Docker Piper → Ona

La B és especialment interessant en el teu cas perquè el servidor Docker ja funciona i així no dupliquem el motor Piper.

I sobretot: el teu servidor HTTP 127.0.0.1 continuarà funcionant independentment.

Per tant, no facis encara cap mount -o remount,rw /usr ni modifiquis /usr.

Passa’m només la sortida d’aquestes 3 ordres:

ls -lh ~/tts-server/ca_ES-upc_ona-medium.onnx*
docker exec piper ls -lh /config/ca_ES-upc_ona-medium.onnx*
docker exec piper which piper

Amb això et preparo el piper-generic.conf exacte perquè Firefox → Speech Dispatcher → Ona, mantenint alhora el teu servidor TTS 127.0.0.1 intacte.

Exacte. Això ens aclareix el problema: el model no és a l’amfitrió, només és visible dins del contenidor Docker. Per això Speech Dispatcher no el pot carregar directament.

I això no afecta el servidor 127.0.0.1 que ja tens funcionant.

Ara no copiaria ni mouria res encara. Primer localitzem el model real dins Docker i veiem com està muntat.

Executa aquestes dues ordres:

docker exec piper ls -lh /config

i:

docker inspect piper --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'

La segona ja ens havia indicat anteriorment /home/Miquel/tts-server -> /config, però el fet que el fitxer no existeixi a l’amfitrió és important: pot ser que Docker estigui utilitzant un volum o que el model s’hagi descarregat dins del contenidor.

El que volem aconseguir

La configuració final pot quedar així:

Firefox
   ↓
Speech Dispatcher
   ↓
mòdul piper
   ↓
Piper + ca_ES-upc_ona-medium
   ↓
àudio Ona

i, paral·lelament:

127.0.0.1:10200
        ↓
   Docker Piper
        ↓
      Ona

No volem substituir ni trencar el segon camí.

Envia’m la sortida de:

docker exec piper ls -lh /config

i

docker inspect piper --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'

i a partir d’això et dic exactament on posar el model i com fer el piper-generic.conf.

Perfecte. Ara ja tenim la dada clau: Ona és dins de /config del contenidor, juntament amb Pau i voices.json.


***** Per tant, no cal posar el model dins de piper-generic.conf. El que hem de fer és donar a Speech Dispatcher una manera d’executar Piper amb aquest model.


I podem fer-ho sense tocar el servidor TTS que ja tens funcionant.

La solució que et proposo és aquesta:

Firefox
   ↓
Speech Dispatcher
   ↓
piper-generic
   ↓
docker exec piper piper --model /config/ca_ES-upc_ona-medium.onnx
   ↓
Ona

I al mateix temps continuarà existint:

127.0.0.1:10200
   ↓
Docker Piper
   ↓
Ona

És a dir, dos usos independents del mateix contenidor/model.

Però abans de modificar res

Necessito confirmar una sola cosa: que el contenidor té l’executable piper accessible.

Executa:

docker exec piper which piper

i també:

docker exec piper piper --version

Si funcionen, et prepararé el contingut exacte de:

/etc/speech-dispatcher/modules/piper-generic.conf

i l’entrada:

AddModule "piper" "sd_generic" "/etc/speech-dispatcher/modules/piper-generic.conf"

No modificarem /usr, no aturarem el contenidor i no tocarem el servidor 127.0.0.1.

Perfecte. Això confirma que Piper està instal·lat dins del contenidor a:

/lsiopy/bin/piper

Per tant, podem fer que Speech Dispatcher utilitzi el mateix Piper i el mateix model Ona del Docker, sense copiar el model a l’host.

Però hi ha una qüestió important: el sd_generic normalment executa una ordre de l’host, i docker exec necessita executar-se des de l’host. Per tant, el nostre piper-generic.conf haurà de cridar:

*****

docker exec piper /lsiopy/bin/piper ...

Fem primer una prova manual

Això és segur i no modifica res. Executa:

echo "Hola, soc l'Ona. Aquesta és una prova des de Speech Dispatcher." | \
docker exec -i piper /lsiopy/bin/piper \
--model /config/ca_ES-upc_ona-medium.onnx \
--output_raw | \
aplay -f S16_LE -r 22050 -c 1

Aquesta prova és millor que l’anterior perquè utilitza -i en docker exec, que és necessari perquè Docker rebi el text que li passem per stdin.

Si sona Ona, ja tenim confirmat tot el camí:

stdin
  ↓
docker exec
  ↓
Piper /config/ca_ES-upc_ona-medium.onnx
  ↓
PCM 22050 Hz
  ↓
aplay

Després d’això et donaré el piper-generic.conf complet perquè puguem fer:

Firefox
   ↓
Speech Dispatcher
   ↓
sd_generic
   ↓
docker exec piper
   ↓
Ona

i el servidor TTS de 127.0.0.1 continuarà funcionant exactament com ara.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.