Ossian es una colección de código Python para construir sistemas de texto a voz (TTS), con énfasis en facilitar la investigación en la construcción de sistemas TTS con una supervisión de expertos mínimas. Trabajar en él comenzó con la financiación del proyecto UE FP7 Simple4All, y este repositorio contiene una versión que es considerable más actualizada que la disponible anteriormente. En particular, la versión original del kit de herramientas se basaba en HTS para realizar el modelado acústico. Aunque todavía es posible usar HTS, ahora admite el uso de redes neuronales capacitadas con el kit de herramientas de Merlin como modelos de duración y acústica. Todos los comentarios y comentarios sobre formas de mejorarlo son muy bienvenidos.
Aquí hay un documento chino. : : Doc de Ossia China.
Se requiere perl 5 .
Se requiere Python 2.7 .
Use el instalador de paquetes pip , dentro de un Python virtualenv según sea necesario, para obtener algunos paquetes necesarios:
pip install numpy
pip install scipy
pip install configobj
pip install scikit-learn
pip install regex
pip install lxml
pip install argparse
Utilizaremos el Merlin Toolkit para entrenar redes neuronales, creando las siguientes dependencias:
pip install bandmat
pip install theano
pip install matplotlib
Usaremos sox para procesar los datos del habla:
apt-get install sox
Clon the Ossian Github Repository de la siguiente manera:
git clone https://github.com/candlewill/Ossian.git
Esto creará un directorio llamado ./Ossian ; La siguiente discusión supone que una variable de entorno $OSSIAN está configurada para señalar este directorio.
Ossian se basa en el kit de herramientas de modelo Markov (HTK) y el sistema de síntesis de voz basado en HMM (HTS) para su alineación y (opcionalmente) modelado acústico, aquí hay algunas notas sobre la obtención y la compilación de las herramientas necesarias. Para obtener una copia del código fuente HTK, es necesario registrarse en el sitio web de HTK para obtener un nombre de usuario y contraseña. Se supone aquí que se han obtenido y las variables de entorno $HTK_USERNAME y $HTK_PASSWORD les señalan.
Ejecutar el siguiente script descargará e instalará las herramientas necesarias (incluido Merlín):
./scripts/setup_tools.sh $HTK_USERNAME $HTK_PASSWORD
El script ./scripts/setup_tools.sh hará las siguientes cosas:
$OSSIAN/tools/merlin , y restablece su cabeza a 8aed278merlin/tools/WORLD/ Carpeta, y cree, luego copie analysis y synth en $OSSIAN/tools/bin/ : cd $OSSIAN /tools/merlin/tools/WORLD/
make -f makefile
make -f makefile analysis
make -f makefile synth
mkdir -p $OSSIAN /tools/bin/
cp $OSSIAN /tools/merlin/tools/WORLD/build/{analysis,synth} $OSSIAN /tools/bin/$OSSIAN/tools/ carpeta.$OSSIAN/tools/$OSSIAN/tools/g2p-r1668-r3 y corenlp-python se instalarían si cambiara el valor de SEQUITUR , STANFORD de 0 a 1. Como todas las herramientas se instalan en $OSSIAN/tools/ Directory, el directorio $OSSIAN/tools/bin incluiría todos los binarios utilizados por Ossian.
Si ha instalado las herramientas mencionadas anteriormente manualmente y no desea instalar desde cero, puede hacer un enlace suave para decirle a Ossian dónde ha instalado estas herramientas.
# 1 Mannuly clone the merlin repo
# 2 Downlaod WORLD, HTK, HDecode, HTS, HTS-engine, SPTK, build and install.
# 3 Copy all of the binaries into one folder. E.g., bin.
# 3 Where is your merlin dir
export merlin_dir=/home/dl80/heyunchao/Programs/Ossian/tools/merlin
# 4 Where is the bin direcotry inculuding all the binaries
export bin_dir=/home/dl80/heyunchao/Programs/Ossian/tools/bin
# 5 Create soft link in your Ossian/tools direcotry
cd /home/dl80/heyunchao/Programs/MyOssian_Github/tools
ln -s $merlin_dir merlin
ln -s $bin_dir bin Proporcionamos una colección binaria preconstruida aquí ossian_required_bin.tar. Descargue y muévase al directorio $bin_dir , si alguien no quiere construir para cero.
Ossian espera que sus datos de capacitación estén en los directorios:
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/txt/*.txt
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/wav/*.wav
Los archivos de texto y olas deben estar numerados consistentemente entre sí. <OSSIAN_LANG> y <DATA_NAME> son cadenas arbitrarias, pero es sensato elegir las que tengan sentido obvio.
Descargue y desempaquete este Corpus de juguete (rumano) para obtener alguna orientación:
cd $OSSIAN
wget https://www.dropbox.com/s/uaz1ue2dked8fan/romanian_toy_demo_corpus_for_ossian.tar?dl=0
tar xvf romanian_toy_demo_corpus_for_ossian.tar?dl=0
Esto creará las siguientes estructuras de directorio:
./corpus/rm/speakers/rss_toy_demo/
./corpus/rm/text_corpora/wikipedia_10K_words/
Comencemos por construir algunas voces en este pequeño conjunto de datos. Los resultados sonarán mal, pero si puede hacer que hable, no importa cuán mal funcione, las herramientas están funcionando y puede volver a entrenar en más datos de su propia elección. A continuación se presentan instrucciones sobre cómo capacitar a las voces basadas en la red neuronal y basadas en HTS en estos datos.
Puede descargar conjuntos de datos de 1 hora en varios idiomas que preparamos aquí: http://tundra.simple4all.org/ssw8data.html
Ossian entrena las voces de acuerdo con una 'receta' dada: la receta especifica una secuencia de procesos que se aplican a un enunciado para convertirlo del texto en discurso, y se da en un archivo llamado $OSSIAN/recipes/<RECIPE>.cfg (donde <RECIPE> es el nombre de la receta específica que está usando). Comenzaremos con una receta llamada naive_01_nn . Si desea agregar componentes al sintetizador, la mejor manera de comenzar será tomar el archivo para una receta existente, copiarlo a un archivo con un nuevo nombre y modificarlo.
La receta naive_01_nn es una receta de lenguaje independiente que usa ingenuamente letras como unidades de modelado acústico. Funcionará razonablemente para idiomas con ortografías sensatas (por ejemplo, rumano) y menos bien para el inglés.
Ossian pondrá todos los archivos generados durante la capacitación en los datos <DATA_NAME> en el lenguaje <OSSIAN_LANG> según la receta <RECIPE> en un directorio llamado:
$OSSIAN/train/<OSSIAN_LANG>/speakers/<DATA_NAME>/<RECIPE>/
Cuando si ha entrenado con éxito una voz, los componentes necesarios en la síntesis se copian a:
$OSSIAN/voices/<OSSIAN_LANG>/<DATA_NAME>/<RECIPE>/
Suponiendo que queremos comenzar entrenando una voz desde cero, es posible que deseemos verificar que estas ubicaciones no existan para nuestra combinación de datos/lenguaje/receta:
rm -r $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/ $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/
Luego para entrenar, haz esto:
cd $OSSIAN
python ./scripts/train.py -s rss_toy_demo -l rm naive_01_nn
Como varios mensajes impresos durante la capacitación le informarán, la capacitación de las redes neuronales en sí que se utilizarán para la duración y el modelado acústico no se admite directamente dentro de Ossian. La línea de comandos anterior se prepara los datos y las configuraciones necesarias para entrenar a las redes para la duración y al modelo acústico. El NNS que produce luego debe convertirse de nuevo a un formato adecuado para Ossian. Esto es un poco desordenado, pero una mejor integración entre Ossian y Merlín es un área de desarrollo en curso.
Aquí le mostramos cómo hacer esto: estas mismas instrucciones se habrán imprimido cuando llame ./scripts/train.py arriba. Primero, entrene el modelo de duración:
cd $OSSIAN
export THEANO_FLAGS=""; python ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg
Para estos datos de juguete, el entrenamiento en CPU como esta será rápido. Alternativamente, para usar GPU para el entrenamiento, hacer:
./scripts/util/submit.sh ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg
Si el entrenamiento fue bien, entonces puede exportar el modelo capacitado a un mejor formato para Ossian. El problema básico es que las herramientas NN-TTS almacenan el modelo como un archivo Python Pickle: si esto se hace en una máquina GPU, solo se puede usar en una máquina GPU. Este script se convierte en un formato más flexible entendido por Ossian: llámelo con el mismo archivo de configuración que usó para capacitar y el nombre de un directorio cuando se debe colocar el nuevo formato:
python ./scripts/util/store_merlin_model.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/processors/duration_predictor
Al entrenar el modelo de duración, habrá muchas advertencias que dicen WARNING: no silence found! - Las tesis no son un problema y se pueden ignorar.
Del mismo modo para el modelo acústico:
cd $OSSIAN
export THEANO_FLAGS=""; python ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg
O:
./scripts/util/submit.sh ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg
Entonces:
python ./scripts/util/store_merlin_model.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/processors/acoustic_predictor
Si el entrenamiento salió bien, puedes sintetizar el discurso. Hay un ejemplo de oración rumana en $OSSIAN/test/txt/romanian.txt : sintetizaremos un archivo de onda para él en $OSSIAN/test/wav/romanian_toy_naive.wav de esta manera:
mkdir $OSSIAN/test/wav/
python ./scripts/speak.py -l rm -s rss_toy_demo -o ./test/wav/romanian_toy_HTS.wav naive_01_nn ./test/txt/romanian.txt
Puede encontrar el audio para esta oración aquí para comparación (no se usó en la capacitación).
Los archivos de configuración utilizados para la duración y el entrenamiento del modelo acústico funcionarán como es para el conjunto de datos de juguete, pero cuando se mueva a otros conjuntos de datos, querrá experimentar con la edición para obtener una mejor permanencia. En particular, querrá aumentar el entrenamiento_epochs para entrenar voces en mayores cantidades de datos; Esto podría establecerse en EG 30 para el modelo acústico y EG 100 para el modelo de duración. También querrá experimentar con Learning_Rate, Batch_Size y Network Architecture (Hidden_layer_Size, Hidden_layer_Type). Actualmente, Ossian solo admite redes de avance.
El comando para síntesis de la nueva onda dada el texto como entrada es:
python ./scripts/speak.py -l $OSSIAN_LANG -s $DATA_NAME -o ./test/wav/ ${OSSIAN_LANG} _ ${DATA_NAME} _test.wav $RECIPE ./test/txt/test.txt Donde ./test/wav/${OSSIAN_LANG}_${DATA_NAME}_test.wav y $RECIPE ./test/txt/test.txt son la onda y el texto de entrada sintetizados.
El uso completo de speak.py es:
usage: speak.py [-h] -s SPEAKER -l LANG [-o OUTPUT] [-t STAGE] [-play] [-lab]
[-bin CUSTOM_BINDIR]
config [files [files ...]]
positional arguments:
config configuration to use: naive, semi-naive, gold, as
defined in < ROOT > /recipes/ < config > -d irectory
files text files to speak, reading from stdin by default
optional arguments:
-h , --help show this help message and exit
-s SPEAKER the name of the speaker: < ROOT > /corpus/ < LANG > / < SPEAKER >
-l LANG the language of the speaker: < ROOT > /corpus/ < LANG >
-o OUTPUT output audio here
-t STAGE defines the current usage stage (definitions of stages
should by found in < config > /recipe.cfg
-play play audio after synthesis
-lab make label file as well as wave in output location
-bin CUSTOM_BINDIR Si desea exportar su modelo pre-trained , debe empacar los siguientes archivos:
voice/train/cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dur.hed.conttrain/cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dur.hedtrain//cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dnn.hed.contLuego, después de ponerlos en el directorio correcto, alguien más podría usar su modelo para síntesis de texto dado.
Aquí, proporcionamos un modelo simple previamente capacitado para los TT chinos. Como el modelo está entrenado en un pequeño corpus interno pequeño para las pruebas, la calidad de la voz sintetizada no es muy buena.
Modelo chino simple pre-entrenado: OSSIAN_CN_PRETRAENTY_MODEL.TAR.GZ
Se pueden encontrar algunas muestras generadas a partir de este modelo: OSSIAN_CHINESE_SAMPLES.ZIP
Si desea usar el último Repo de Merlín, ahora es posible. Sin embargo, cuando el modelo de exportación se produce algunos files no exist . Puede copiar manualmente los archivos correspondientes a la carpeta correcta para tratarlo. Estos archivos existen después del entrenamiento, pero no en el directorio correcto. Puede usar find -name *.dat para encontrar dónde están.
Aquí hay un ejemplo:
# Duration model
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/inter_module/norm_info__mgc_lf0_vuv_bap_187_MVN.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//cmp//norm_info_mgc_lf0_vuv_bap_187_MVN.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/inter_module/label_norm_HTS_3491.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//cmp//label_norm_HTS_3491.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/nnets_model/feed_forward_6_tanh.model /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//dnn_training_ACOUST//nnets_model/DNN_TANH_TANH_TANH_TANH_TANH_TANH_LINEAR__mgc_lf0_vuv_bap_0_6_1024_1024_1024_1024_1024_1024_3491.187.train.243.0.002000.rnn.model
# Acoustic model
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_DUR/inter_module/norm_info__dur_5_MVN.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn///norm_info_dur_5_MVN.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_DUR/inter_module/label_norm_HTS_3482.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/
...Hemos usado muchas otras recetas con Ossian que se documentarán aquí cuando se limpien lo suficiente como para ser útiles para otros. Esto dará la capacidad de agregar más conocimiento a las voces construidas, en forma de léxicos, reglas de letras a sonido, e integrar componentes capacitados existentes donde están disponibles para el idioma de destino. Algunos de ellos se pueden encontrar aquí:
Este proyecto se basa en el CSTR-Edinburgh/Ossian. Todos los derechos de autor pertenecen al proyecto original.
Yunchao él