{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [], "gpuType": "T4", "authorship_tag": "ABX9TyPKhrhJQuxhFJG2C1A+aMsQ", "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "source": [ "# [Piper](https://github.com/rhasspy/piper) model exporter\n", "## ![Piper logo](https://contribute.rhasspy.org/img/logo.png)\n", "\n", "Notebook created by [rmcpantoja](http://github.com/rmcpantoja)" ], "metadata": { "id": "EOL-kjplZYEU" } }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "id": "FfMKr8v2RVOm", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "b4456f3d-726d-4602-8811-2476263ec5c2" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Installing...\n", "/content/piper/src/python\n", "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", "torchaudio 2.0.2+cu118 requires torch==2.0.1, but you have torch 1.11.0 which is incompatible.\n", "torchdata 0.6.1 requires torch==2.0.1, but you have torch 1.11.0 which is incompatible.\n", "torchtext 0.15.2 requires torch==2.0.1, but you have torch 1.11.0 which is incompatible.\n", "torchvision 0.15.2+cu118 requires torch==2.0.1, but you have torch 1.11.0 which is incompatible.\u001b[0m\u001b[31m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m14.6/14.6 MB\u001b[0m \u001b[31m40.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m121.6/121.6 MB\u001b[0m \u001b[31m6.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m46.0/46.0 kB\u001b[0m \u001b[31m4.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m86.8/86.8 kB\u001b[0m \u001b[31m7.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "Reading package lists... Done\n", "Building dependency tree \n", "Reading state information... Done\n", "The following additional packages will be installed:\n", " espeak-ng-data libespeak-ng1 libpcaudio0 libsonic0\n", "The following NEW packages will be installed:\n", " espeak-ng espeak-ng-data libespeak-ng1 libpcaudio0 libsonic0\n", "0 upgraded, 5 newly installed, 0 to remove and 15 not upgraded.\n", "Need to get 4,215 kB of archives.\n", "After this operation, 12.0 MB of additional disk space will be used.\n", "Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 libpcaudio0 amd64 1.1-4 [7,908 B]\n", "Get:2 http://archive.ubuntu.com/ubuntu focal/main amd64 libsonic0 amd64 0.2.0-8 [13.1 kB]\n", "Get:3 http://archive.ubuntu.com/ubuntu focal/main amd64 espeak-ng-data amd64 1.50+dfsg-6 [3,682 kB]\n", "Get:4 http://archive.ubuntu.com/ubuntu focal/main amd64 libespeak-ng1 amd64 1.50+dfsg-6 [189 kB]\n", "Get:5 http://archive.ubuntu.com/ubuntu focal/universe amd64 espeak-ng amd64 1.50+dfsg-6 [322 kB]\n", "Fetched 4,215 kB in 1s (3,726 kB/s)\n", "Selecting previously unselected package libpcaudio0:amd64.\n", "(Reading database ... 123105 files and directories currently installed.)\n", "Preparing to unpack .../libpcaudio0_1.1-4_amd64.deb ...\n", "Unpacking libpcaudio0:amd64 (1.1-4) ...\n", "Selecting previously unselected package libsonic0:amd64.\n", "Preparing to unpack .../libsonic0_0.2.0-8_amd64.deb ...\n", "Unpacking libsonic0:amd64 (0.2.0-8) ...\n", "Selecting previously unselected package espeak-ng-data:amd64.\n", "Preparing to unpack .../espeak-ng-data_1.50+dfsg-6_amd64.deb ...\n", "Unpacking espeak-ng-data:amd64 (1.50+dfsg-6) ...\n", "Selecting previously unselected package libespeak-ng1:amd64.\n", "Preparing to unpack .../libespeak-ng1_1.50+dfsg-6_amd64.deb ...\n", "Unpacking libespeak-ng1:amd64 (1.50+dfsg-6) ...\n", "Selecting previously unselected package espeak-ng.\n", "Preparing to unpack .../espeak-ng_1.50+dfsg-6_amd64.deb ...\n", "Unpacking espeak-ng (1.50+dfsg-6) ...\n", "Setting up libpcaudio0:amd64 (1.1-4) ...\n", "Setting up libsonic0:amd64 (0.2.0-8) ...\n", "Setting up espeak-ng-data:amd64 (1.50+dfsg-6) ...\n", "Setting up libespeak-ng1:amd64 (1.50+dfsg-6) ...\n", "Setting up espeak-ng (1.50+dfsg-6) ...\n", "Processing triggers for man-db (2.9.1-1) ...\n", "Processing triggers for libc-bin (2.31-0ubuntu9.9) ...\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m10.4/10.4 MB\u001b[0m \u001b[31m67.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDone!\n" ] } ], "source": [ "#@title Install software\n", "\n", "print(\"Installing...\")\n", "!git clone -q https://github.com/rhasspy/piper\n", "%cd /content/piper/src/python\n", "!pip install -q cython>=0.29.0 espeak-phonemizer>=1.1.0 librosa>=0.9.2 numpy>=1.19.0 pytorch-lightning~=1.7.0 torch~=1.11.0\n", "!pip install -q onnx onnxruntime-gpu\n", "!bash build_monotonic_align.sh\n", "!apt-get install espeak-ng\n", "!pip install -q torchtext==0.12.0\n", "# fixing recent compativility isswes:\n", "!pip install -q torchaudio==0.11.0 torchmetrics==0.11.4\n", "print(\"Done!\")" ] }, { "cell_type": "code", "source": [ "#@title Voice package generation section\n", "%cd /content/piper/src/python\n", "import os\n", "import ipywidgets as widgets\n", "from IPython.display import display\n", "import json\n", "from google.colab import output\n", "guideurl = \"https://github.com/rmcpantoja/piper/blob/master/notebooks/wav/en\"\n", "#@markdown #### Download:\n", "#@markdown **Drive ID or direct download link of the model in another cloud:**\n", "model_id = \"\" #@param {type:\"string\"}\n", "#@markdown **Drive ID or direct download link of the config.json file:**\n", "config_id = \"\" #@param {type:\"string\"}\n", "#@markdown ---\n", "\n", "#@markdown #### Creation process:\n", "#@markdown **Choose the language code (iso639-1 format):**\n", "\n", "#@markdown You can see a list of language codes and names [here](https://www.loc.gov/standards/iso639-2/php/English_list.php)\n", "\n", "language = \"en-us\" #@param [\"ca\", \"da\", \"de\", \"en\", \"en-us\", \"es\", \"fi\", \"fr\", \"grc\", \"is\", \"it\", \"k\", \"nb\", \"ne\", \"nl\", \"pl\", \"pt-br\", \"ru\", \"sv\", \"uk\", \"vi-vn-x-central\", \"yue\"]\n", "voice_name = \"Myvoice\" #@param {type:\"string\"}\n", "voice_name = voice_name.lower()\n", "quality = \"medium\" #@param [\"high\", \"low\", \"medium\", \"x-low\"]\n", "def start_process():\n", " if not os.path.exists(\"/content/project/model.ckpt\"):\n", " raise Exception(\"Could not download model! make sure the file is shareable to everyone\")\n", " output.eval_js(f'new Audio(\"{guideurl}/starting.wav?raw=true\").play()')\n", " !python -m piper_train.export_onnx \"/content/project/model.ckpt\" \"{export_voice_path}/{export_voice_name}.onnx\"\n", " print(\"compressing...\")\n", " !tar -czvf \"{packages_path}/voice-{export_voice_name}.tar.gz\" -C \"{export_voice_path}\" .\n", " output.eval_js(f'new Audio(\"{guideurl}/success.wav?raw=true\").play()')\n", " print(\"Done!\")\n", "\n", "export_voice_name = f\"{language}-{voice_name}-{quality}\"\n", "export_voice_path = \"/content/project/voice-\"+export_voice_name\n", "packages_path = \"/content/project/packages\"\n", "if not os.path.exists(export_voice_path):\n", " os.makedirs(export_voice_path)\n", "if not os.path.exists(packages_path):\n", " os.makedirs(packages_path)\n", "print(\"Downloading model and his config...\")\n", "if model_id.startswith(\"1\"):\n", " !gdown -q \"{model_id}\" -O /content/project/model.ckpt\n", "elif model_id.startswith(\"https://drive.google.com/file/d/\"):\n", " !gdown -q \"{model_id}\" -O \"/content/project/model.ckpt\" --fuzzy\n", "else:\n", " !wget \"{model_id}\" -O \"/content/project/model.ckpt\"\n", "if config_id.startswith(\"1\"):\n", " !gdown -q \"{config_id}\" -O \"{export_voice_path}/{export_voice_name}.onnx.json\"\n", "elif config_id.startswith(\"https://drive.google.com/file/d/\"):\n", " !gdown -q \"{config_id}\" -O \"{export_voice_path}/{export_voice_name}.onnx.json\" --fuzzy\n", "else:\n", " !wget \"{config_id}\" -O \"{export_voice_path}/{export_voice_name}.onnx.json\"\n", "#@markdown **Do you want to write a model card?**\n", "write_model_card = False #@param {type:\"boolean\"}\n", "if write_model_card:\n", " with open(f\"{export_voice_path}/{export_voice_name}.onnx.json\", \"r\") as file:\n", " config = json.load(file)\n", " sample_rate = config[\"audio\"][\"sample_rate\"]\n", " num_speakers = config[\"num_speakers\"]\n", " output.eval_js(f'new Audio(\"{guideurl}/waiting.wav?raw=true\").play()')\n", " text_area = widgets.Textarea(\n", " description = \"fill in this following template and press start to generate the voice package\",\n", " value=f'# Model card for {voice_name} ({quality})\\n\\n* Language: {language} (normaliced)\\n* Speakers: {num_speakers}\\n* Quality: {quality}\\n* Samplerate: {sample_rate}Hz\\n\\n## Dataset\\n\\n* URL: \\n* License: \\n\\n## Training\\n\\nTrained from scratch.\\nOr finetuned from: ',\n", " layout=widgets.Layout(width='500px', height='200px')\n", " )\n", " button = widgets.Button(description='Start')\n", "\n", " def create_model_card(button):\n", " model_card_text = text_area.value.strip()\n", " with open(f'{export_voice_path}/MODEL_CARD', 'w') as file:\n", " file.write(model_card_text)\n", " text_area.close()\n", " button.close()\n", " output.clear()\n", " start_process()\n", "\n", " button.on_click(create_model_card)\n", "\n", " display(text_area, button)\n", "else:\n", " start_process()" ], "metadata": { "cellView": "form", "id": "PqcoBb26V5xA", "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "outputId": "27f230fd-a212-4734-dfe8-9df2121086d8" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "/content/piper/src/python\n", "Downloading model and his config...\n", "/usr/local/lib/python3.10/dist-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: '/usr/local/lib/python3.10/dist-packages/torchvision/image.so: undefined symbol: _ZN3c104impl8GPUTrace13gpuTraceStateE'If you don't plan on using image functionality from `torchvision.io`, you can ignore this warning. Otherwise, there might be something wrong with your environment. Did you have `libjpeg` or `libpng` installed before building `torchvision` from source?\n", " warn(\n", "INFO:torch.distributed.nn.jit.instantiator:Created a temporary directory at /tmp/tmpb81gzwb3\n", "INFO:torch.distributed.nn.jit.instantiator:Writing /tmp/tmpb81gzwb3/_remote_module_non_sriptable.py\n", "Removing weight norm...\n", "/content/piper/src/python/piper_train/vits/attentions.py:235: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", " t_s == t_t\n", "/content/piper/src/python/piper_train/vits/attentions.py:295: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", " pad_length = max(length - (self.window_size + 1), 0)\n", "/content/piper/src/python/piper_train/vits/attentions.py:296: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", " slice_start_position = max((self.window_size + 1) - length, 0)\n", "/content/piper/src/python/piper_train/vits/attentions.py:298: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", " if pad_length > 0:\n", "/content/piper/src/python/piper_train/vits/transforms.py:174: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", " assert (discriminant >= 0).all(), discriminant\n", "/usr/local/lib/python3.10/dist-packages/torch/onnx/symbolic_helper.py:719: UserWarning: allowzero=0 by default. In order to honor zero value in shape use allowzero=1\n", " warnings.warn(\"allowzero=0 by default. In order to honor zero value in shape use allowzero=1\")\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "WARNING: The shape inference of prim::Constant type is missing, so it may result in wrong shape inference for the exported graph. Please consider adding it in symbolic function.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "WARNING: The shape inference of prim::Constant type is missing, so it may result in wrong shape inference for the exported graph. Please consider adding it in symbolic function.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "WARNING: The shape inference of prim::Constant type is missing, so it may result in wrong shape inference for the exported graph. Please consider adding it in symbolic function.\n", "Warning: Constant folding - Only steps=1 can be constant folded for opset >= 10 onnx::Slice op. Constant folding not applied.\n", "INFO:piper_train.export_onnx:Exported model to /content/project/voice-es-narrador-medium/es-narrador-medium.onnx\n", "compressing...\n", "./\n", "./es-narrador-medium.onnx.json\n", "./es-narrador-medium.onnx\n", "Done!\n" ] } ] }, { "cell_type": "code", "source": [ "#@title Download/export your generated voice package\n", "\n", "#@markdown #### How do you want to export your model?\n", "export_mode = \"upload it to my Google Drive\" #@param [\"Download the voice package on my device (may take some time)\", \"upload it to my Google Drive\"]\n", "print(\"Exporting package...\")\n", "if export_mode == \"Download the voice package on my device (may take some time)\":\n", " from google.colab import files\n", " files.download(f\"{packages_path}/voice-{export_voice_name}.tar.gz\")\n", " msg = \"Please wait a moment while the package is being downloaded.\"\n", "else:\n", " voicepacks_folder = \"/content/drive/MyDrive/piper voice packages\"\n", " from google.colab import drive\n", " drive.mount('/content/drive')\n", " if not os.path.exists(voicepacks_folder):\n", " os.makedirs(voicepacks_folder)\n", " !cp \"{packages_path}/voice-{export_voice_name}.tar.gz\" \"{voicepacks_folder}\"\n", " msg = f\"You can find the generated voice package at: {voicepacks_folder}.\"\n", "print(f\"Done! {msg}\")" ], "metadata": { "cellView": "form", "id": "Hu3V9CJeWc4Y", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "f18ecafa-cc62-4bdb-d552-141360e5d68e" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Exporting package...\n", "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n", "Done! You can find the generated voice package at: /content/drive/MyDrive/piper voice packages.\n" ] } ] }, { "cell_type": "markdown", "source": [ "# I want to test this model! I don't need anything else anymore?\n", "\n", "No, this is almost the end! Now you can share your generated package to your friends, upload to a cloud storage and/or test it on:\n", "* [The inference notebook](https://colab.research.google.com/github/rmcpantoja/piper/blob/master/notebooks/piper_inference_(ONNX).ipynb)\n", " * run the cells in order for it to work correctly, as well as all the notebooks. Also, the inference notebook will guide you through the process using the enhanced accessibility feature if you wish. It's easy to use. Test it!\n", "* Or through the NVDA screen reader!\n", " * Download and install the latest version of the [add-on](https://github.com/mush42/piper-nvda/releases).\n", " * Once the plugin is installed, go to NVDA menu/preferences/settings... and look for the `Piper Voice Manager` category.\n", " * Tab until you find the `Install from local file` button, press enter and select the generated package in your downloads.\n", " * Once the package is selected and installed, apply the changes and restart NVDA to update the voice list.\n", "* Enjoy your creation!" ], "metadata": { "id": "IRiNBHkeoDbC" } } ] }