{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [], "gpuType": "T4" }, "accelerator": "GPU", "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "kQ_GGoU_5ArA" }, "source": [ "# Hey Marco — Wake Word Training\n", "\n", "Basé sur `Automatic_model_training_simple_TFR`. \n", "Cible : **\"hey marco\"** (EN/DE/NL/IT/ES) + **\"hé marco\"** (FR).\n", "\n", "**Runtime recommandé : GPU (T4)** — Durée estimée : ~45-90 min" ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "RoPWDlcB5ArC", "outputId": "60c0195c-e746-4648-8368-1d467bfb1493" }, "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')\n", "\n", "import os\n", "drive_output_dir = '/content/drive/My Drive/Colab Notebooks/Wakeword/openwakeword'\n", "os.makedirs(drive_output_dir, exist_ok=True)\n", "print(f'Models will be saved in: {drive_output_dir}')" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n", "Models will be saved in: /content/drive/My Drive/Colab Notebooks/Wakeword/openwakeword\n" ] } ], "execution_count": 1 }, { "cell_type": "code", "source": [ "# @title Configuration globale { display-mode: \"form\" }\n", "# @markdown Tous les paramètres du training. Les proportions par langue sont calculées automatiquement.\n", "\n", "number_of_examples = 10000 # @param {type:\"slider\", min:1000, max:50000, step:500}\n", "number_of_training_steps = 25000 # @param {type:\"slider\", min:1000, max:50000, step:500}\n", "false_activation_penalty = 1500 # @param {type:\"slider\", min:100, max:3000, step:100}\n", "\n", "# Répartition par langue (% fixes, total = number_of_examples)\n", "LANG_RATIOS = {\n", " 'fr': 0.35, # hé marco — phonétique différente, priorité FR\n", " 'en': 0.30,\n", " 'en-gb': 0.10,\n", " 'de': 0.10,\n", " 'nl': 0.05,\n", " 'it': 0.05,\n", " 'es': 0.05,\n", "}\n", "\n", "import math\n", "lang_samples = {}\n", "total_assigned = 0\n", "langs = list(LANG_RATIOS.keys())\n", "for lang in langs[:-1]:\n", " n = math.floor(number_of_examples * LANG_RATIOS[lang])\n", " lang_samples[lang] = n\n", " total_assigned += n\n", "lang_samples[langs[-1]] = number_of_examples - total_assigned\n", "\n", "print(f'Total samples : {sum(lang_samples.values())}')\n", "for lang, n in lang_samples.items():\n", " print(f' {lang:6s} : {n}')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "-2axZd7PnRvh", "outputId": "d6ee46f6-03b3-432b-f45d-5b625fd7e600" }, "execution_count": 11, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Total samples : 10000\n", " fr : 3500\n", " en : 3000\n", " en-gb : 1000\n", " de : 1000\n", " nl : 500\n", " it : 500\n", " es : 500\n" ] } ] }, { "cell_type": "markdown", "metadata": { "id": "owgMy2-z5ArC" }, "source": [ "## Étape 1 — Piper sample generator + modèles TTS" ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6P1c2LlY5ArD", "outputId": "5ab575c9-f9aa-4258-e4a6-95df5a9bf441" }, "source": [ "import os, sys\n", "from IPython.display import Audio\n", "\n", "if not os.path.exists('./piper-sample-generator'):\n", " !git clone https://github.com/rhasspy/piper-sample-generator\n", " !cd piper-sample-generator && git checkout 213d4d5\n", " !pip install piper-tts piper-phonemize-cross\n", " !pip install webrtcvad\n", " !pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 --index-url https://download.pytorch.org/whl/cu121\n", "\n", "# Modèle EN\n", "os.makedirs('piper-sample-generator/models', exist_ok=True)\n", "if not os.path.exists('piper-sample-generator/models/en_US-libritts_r-medium.pt'):\n", " !wget -q -O piper-sample-generator/models/en_US-libritts_r-medium.pt \\\n", " 'https://github.com/rhasspy/piper-sample-generator/releases/download/v2.0.0/en_US-libritts_r-medium.pt'\n", "\n", "# Modèle FR via piper-tts .onnx (le .pt n'est pas disponible dans le LFS du repo)\n", "if not os.path.exists('fr_FR-siwis-medium.onnx'):\n", " !wget -q -O fr_FR-siwis-medium.onnx \\\n", " 'https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/siwis/medium/fr_FR-siwis-medium.onnx'\n", " !wget -q -O fr_FR-siwis-medium.onnx.json \\\n", " 'https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/siwis/medium/fr_FR-siwis-medium.onnx.json'\n", "\n", "if 'piper-sample-generator/' not in sys.path:\n", " sys.path.append('piper-sample-generator/')\n", "from generate_samples import generate_samples\n", "\n", "print('Piper prêt.')" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Piper prêt.\n" ] } ], "execution_count": 12 }, { "cell_type": "code", "metadata": { "id": "3YZc7M5J5ArD", "colab": { "base_uri": "https://localhost:8080/", "height": 168 }, "outputId": "9d244b69-aece-494d-8488-f9cd36a17adf" }, "source": [ "# Test audio EN\n", "generate_samples(text='hey_marco', max_samples=1, output_dir='./', batch_size=1,\n", " auto_reduce_batch_size=True, file_names=['test_en.wav'])\n", "print('EN:')\n", "display(Audio('test_en.wav', autoplay=False))\n", "\n", "# Test audio FR via piper CLI\n", "!echo \"hé marco\" | piper --model fr_FR-siwis-medium.onnx --output_file test_fr.wav\n", "print('FR:')\n", "display(Audio('test_fr.wav', autoplay=False))" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "EN:\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/html": [ "\n", " \n", " " ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "FR:\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/html": [ "\n", " \n", " " ] }, "metadata": {} } ], "execution_count": 13 }, { "cell_type": "markdown", "metadata": { "id": "fgAcnSFS5ArD" }, "source": [ "## Étape 2 — Téléchargement des données" ] }, { "cell_type": "code", "metadata": { "id": "ikCXMW_i5ArE", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "b9648065-04c1-4f82-c1a1-23c6fa552c7c" }, "source": [ "import locale\n", "def getpreferredencoding(do_setlocale=True):\n", " return 'UTF-8'\n", "locale.getpreferredencoding = getpreferredencoding\n", "\n", "import os, shutil\n", "\n", "# Clone openWakeWord\n", "if os.path.exists('./openwakeword'):\n", " shutil.rmtree('./openwakeword')\n", "!rm -rf ./openwakeword\n", "!git clone https://github.com/dscripka/openwakeword\n", "!pip install -e ./openwakeword --no-deps\n", "\n", "# Autres dépendances\n", "!pip install mutagen==1.47.0\n", "!pip install torchinfo==1.8.0\n", "!pip install torchmetrics==1.2.0\n", "!pip install speechbrain==0.5.14\n", "!pip install audiomentations==0.33.0\n", "!pip install torch-audiomentations==0.11.0\n", "!pip install acoustics==0.2.6\n", "!pip install onnxruntime==1.22.1 ai_edge_litert==1.4.0 onnxsim\n", "!pip install onnx2tf\n", "!pip install onnx==1.19.1\n", "!pip install onnx_graphsurgeon sng4onnx\n", "!pip install pronouncing==0.2.0\n", "!pip install datasets==2.14.6\n", "!pip install deep-phonemizer==0.0.19\n", "\n", "# Modèles embedding openWakeWord\n", "os.makedirs('./openwakeword/openwakeword/resources/models', exist_ok=True)\n", "base = 'https://github.com/dscripka/openWakeWord/releases/download/v0.5.1'\n", "for f in ['embedding_model.onnx', 'embedding_model.tflite', 'melspectrogram.onnx', 'melspectrogram.tflite']:\n", " !wget -q {base}/{f} -O ./openwakeword/openwakeword/resources/models/{f}\n", "\n", "print('Installation terminée.')" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Cloning into 'openwakeword'...\n", "remote: Enumerating objects: 1248, done.\u001b[K\n", "remote: Counting objects: 100% (554/554), done.\u001b[K\n", "remote: Compressing objects: 100% (146/146), done.\u001b[K\n", "remote: Total 1248 (delta 446), reused 408 (delta 408), pack-reused 694 (from 2)\u001b[K\n", "Receiving objects: 100% (1248/1248), 3.24 MiB | 15.41 MiB/s, done.\n", "Resolving deltas: 100% (771/771), done.\n", "Obtaining file:///content/openwakeword\n", " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", " Checking if build backend supports build_editable ... \u001b[?25l\u001b[?25hdone\n", " Getting requirements to build editable ... \u001b[?25l\u001b[?25hdone\n", " Preparing editable metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", "Building wheels for collected packages: openwakeword\n", " Building editable for openwakeword (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for openwakeword: filename=openwakeword-0.6.0-0.editable-py3-none-any.whl size=17481 sha256=a3fe81720c4a733c8a4ca9a95233759e0aa9c8ec77b24a33bdd5ef5e3f34993d\n", " Stored in directory: /tmp/pip-ephem-wheel-cache-qxd0c5ly/wheels/95/b4/6f/f887431fea7b3379ef42ac3594a92164114b83a95abb8b7969\n", "Successfully built openwakeword\n", "Installing collected packages: openwakeword\n", " Attempting uninstall: openwakeword\n", " Found existing installation: openwakeword 0.6.0\n", " Uninstalling openwakeword-0.6.0:\n", " Successfully uninstalled openwakeword-0.6.0\n", "Successfully installed openwakeword-0.6.0\n", "Requirement already satisfied: mutagen==1.47.0 in /usr/local/lib/python3.12/dist-packages (1.47.0)\n", "Requirement already satisfied: torchinfo==1.8.0 in /usr/local/lib/python3.12/dist-packages (1.8.0)\n", "Requirement already satisfied: torchmetrics==1.2.0 in /usr/local/lib/python3.12/dist-packages (1.2.0)\n", "Requirement already satisfied: numpy>1.20.0 in /usr/local/lib/python3.12/dist-packages (from torchmetrics==1.2.0) (1.26.4)\n", "Requirement already satisfied: torch>=1.8.1 in /usr/local/lib/python3.12/dist-packages (from torchmetrics==1.2.0) (2.5.0+cu121)\n", "Requirement already satisfied: lightning-utilities>=0.8.0 in /usr/local/lib/python3.12/dist-packages (from torchmetrics==1.2.0) (0.15.3)\n", "Requirement already satisfied: packaging>=22 in /usr/local/lib/python3.12/dist-packages (from lightning-utilities>=0.8.0->torchmetrics==1.2.0) (26.2)\n", "Requirement already satisfied: typing_extensions in /usr/local/lib/python3.12/dist-packages (from lightning-utilities>=0.8.0->torchmetrics==1.2.0) (4.15.0)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (3.29.0)\n", "Requirement already satisfied: networkx in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (3.6.1)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (3.1.6)\n", "Requirement already satisfied: fsspec in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (2023.10.0)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (12.1.105)\n", "Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (9.1.0.70)\n", "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (12.1.3.1)\n", "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (11.0.2.54)\n", "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (10.3.2.106)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (11.4.5.107)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (12.1.0.106)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (2.21.5)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (12.1.105)\n", "Requirement already satisfied: triton==3.1.0 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (3.1.0)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (75.2.0)\n", "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.8.1->torchmetrics==1.2.0) (1.13.1)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.12/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.8.1->torchmetrics==1.2.0) (12.8.93)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from sympy==1.13.1->torch>=1.8.1->torchmetrics==1.2.0) (1.3.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.12/dist-packages (from jinja2->torch>=1.8.1->torchmetrics==1.2.0) (3.0.3)\n", "Requirement already satisfied: speechbrain==0.5.14 in /usr/local/lib/python3.12/dist-packages (0.5.14)\n", "Requirement already satisfied: hyperpyyaml in /usr/local/lib/python3.12/dist-packages (from speechbrain==0.5.14) (1.2.3)\n", "Requirement already satisfied: joblib in /usr/local/lib/python3.12/dist-packages (from speechbrain==0.5.14) (1.5.3)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (from speechbrain==0.5.14) (1.26.4)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.12/dist-packages (from speechbrain==0.5.14) (26.2)\n", "Requirement already satisfied: scipy in /usr/local/lib/python3.12/dist-packages (from speechbrain==0.5.14) (1.16.3)\n", "Requirement already satisfied: sentencepiece in /usr/local/lib/python3.12/dist-packages (from speechbrain==0.5.14) (0.2.1)\n", "Requirement already satisfied: torch>=1.9 in /usr/local/lib/python3.12/dist-packages (from speechbrain==0.5.14) (2.5.0+cu121)\n", "Requirement already satisfied: torchaudio in /usr/local/lib/python3.12/dist-packages (from speechbrain==0.5.14) (2.5.0+cu121)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.12/dist-packages (from speechbrain==0.5.14) (4.67.1)\n", "Requirement already satisfied: huggingface-hub in /usr/local/lib/python3.12/dist-packages (from speechbrain==0.5.14) (0.36.2)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (3.29.0)\n", "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (4.15.0)\n", "Requirement already satisfied: networkx in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (3.6.1)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (3.1.6)\n", "Requirement already satisfied: fsspec in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (2023.10.0)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (12.1.105)\n", "Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (9.1.0.70)\n", "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (12.1.3.1)\n", "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (11.0.2.54)\n", "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (10.3.2.106)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (11.4.5.107)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (12.1.0.106)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (2.21.5)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (12.1.105)\n", "Requirement already satisfied: triton==3.1.0 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (3.1.0)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (75.2.0)\n", "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.9->speechbrain==0.5.14) (1.13.1)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.12/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.9->speechbrain==0.5.14) (12.8.93)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from sympy==1.13.1->torch>=1.9->speechbrain==0.5.14) (1.3.0)\n", "Requirement already satisfied: hf-xet<2.0.0,>=1.1.3 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub->speechbrain==0.5.14) (1.5.0)\n", "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub->speechbrain==0.5.14) (6.0.3)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.12/dist-packages (from huggingface-hub->speechbrain==0.5.14) (2.32.4)\n", "Requirement already satisfied: ruamel.yaml<0.19.0,>=0.17.28 in /usr/local/lib/python3.12/dist-packages (from hyperpyyaml->speechbrain==0.5.14) (0.18.17)\n", "Requirement already satisfied: ruamel.yaml.clib>=0.2.15 in /usr/local/lib/python3.12/dist-packages (from ruamel.yaml<0.19.0,>=0.17.28->hyperpyyaml->speechbrain==0.5.14) (0.2.15)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.12/dist-packages (from jinja2->torch>=1.9->speechbrain==0.5.14) (3.0.3)\n", "Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface-hub->speechbrain==0.5.14) (3.4.7)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface-hub->speechbrain==0.5.14) (3.15)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface-hub->speechbrain==0.5.14) (2.5.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface-hub->speechbrain==0.5.14) (2026.5.20)\n", "Requirement already satisfied: audiomentations==0.33.0 in /usr/local/lib/python3.12/dist-packages (0.33.0)\n", "Requirement already satisfied: numpy>=1.18.0 in /usr/local/lib/python3.12/dist-packages (from audiomentations==0.33.0) (1.26.4)\n", "Requirement already satisfied: librosa!=0.10.0,<0.11.0,>=0.8.0 in /usr/local/lib/python3.12/dist-packages (from audiomentations==0.33.0) (0.10.2.post1)\n", "Requirement already satisfied: scipy<2,>=1.4.0 in /usr/local/lib/python3.12/dist-packages (from audiomentations==0.33.0) (1.16.3)\n", "Requirement already satisfied: soxr<1.0.0,>=0.3.2 in /usr/local/lib/python3.12/dist-packages (from audiomentations==0.33.0) (0.5.0.post1)\n", "Requirement already satisfied: audioread>=2.1.9 in /usr/local/lib/python3.12/dist-packages (from librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (3.1.0)\n", "Requirement already satisfied: scikit-learn>=0.20.0 in /usr/local/lib/python3.12/dist-packages (from librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (1.6.1)\n", "Requirement already satisfied: joblib>=0.14 in /usr/local/lib/python3.12/dist-packages (from librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (1.5.3)\n", "Requirement already satisfied: decorator>=4.3.0 in /usr/local/lib/python3.12/dist-packages (from librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (4.4.2)\n", "Requirement already satisfied: numba>=0.51.0 in /usr/local/lib/python3.12/dist-packages (from librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (0.60.0)\n", "Requirement already satisfied: soundfile>=0.12.1 in /usr/local/lib/python3.12/dist-packages (from librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (0.13.1)\n", "Requirement already satisfied: pooch>=1.1 in /usr/local/lib/python3.12/dist-packages (from librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (1.9.0)\n", "Requirement already satisfied: typing-extensions>=4.1.1 in /usr/local/lib/python3.12/dist-packages (from librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (4.15.0)\n", "Requirement already satisfied: lazy-loader>=0.1 in /usr/local/lib/python3.12/dist-packages (from librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (0.5)\n", "Requirement already satisfied: msgpack>=1.0 in /usr/local/lib/python3.12/dist-packages (from librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (1.1.2)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.12/dist-packages (from lazy-loader>=0.1->librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (26.2)\n", "Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /usr/local/lib/python3.12/dist-packages (from numba>=0.51.0->librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (0.43.0)\n", "Requirement already satisfied: platformdirs>=2.5.0 in /usr/local/lib/python3.12/dist-packages (from pooch>=1.1->librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (4.9.6)\n", "Requirement already satisfied: requests>=2.19.0 in /usr/local/lib/python3.12/dist-packages (from pooch>=1.1->librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (2.32.4)\n", "Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.12/dist-packages (from scikit-learn>=0.20.0->librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (3.6.0)\n", "Requirement already satisfied: cffi>=1.0 in /usr/local/lib/python3.12/dist-packages (from soundfile>=0.12.1->librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (2.0.0)\n", "Requirement already satisfied: pycparser in /usr/local/lib/python3.12/dist-packages (from cffi>=1.0->soundfile>=0.12.1->librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (3.0)\n", "Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->pooch>=1.1->librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (3.4.7)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->pooch>=1.1->librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (3.15)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->pooch>=1.1->librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (2.5.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->pooch>=1.1->librosa!=0.10.0,<0.11.0,>=0.8.0->audiomentations==0.33.0) (2026.5.20)\n", "Requirement already satisfied: torch-audiomentations==0.11.0 in /usr/local/lib/python3.12/dist-packages (0.11.0)\n", "Requirement already satisfied: julius<0.3,>=0.2.3 in /usr/local/lib/python3.12/dist-packages (from torch-audiomentations==0.11.0) (0.2.8)\n", "Requirement already satisfied: librosa>=0.6.0 in /usr/local/lib/python3.12/dist-packages (from torch-audiomentations==0.11.0) (0.10.2.post1)\n", "Requirement already satisfied: torch>=1.7.0 in /usr/local/lib/python3.12/dist-packages (from torch-audiomentations==0.11.0) (2.5.0+cu121)\n", "Requirement already satisfied: torchaudio>=0.7.0 in /usr/local/lib/python3.12/dist-packages (from torch-audiomentations==0.11.0) (2.5.0+cu121)\n", "Requirement already satisfied: torch-pitch-shift>=1.2.2 in /usr/local/lib/python3.12/dist-packages (from torch-audiomentations==0.11.0) (1.2.5)\n", "Requirement already satisfied: audioread>=2.1.9 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (3.1.0)\n", "Requirement already satisfied: numpy!=1.22.0,!=1.22.1,!=1.22.2,>=1.20.3 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (1.26.4)\n", "Requirement already satisfied: scipy>=1.2.0 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (1.16.3)\n", "Requirement already satisfied: scikit-learn>=0.20.0 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (1.6.1)\n", "Requirement already satisfied: joblib>=0.14 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (1.5.3)\n", "Requirement already satisfied: decorator>=4.3.0 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (4.4.2)\n", "Requirement already satisfied: numba>=0.51.0 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (0.60.0)\n", "Requirement already satisfied: soundfile>=0.12.1 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (0.13.1)\n", "Requirement already satisfied: pooch>=1.1 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (1.9.0)\n", "Requirement already satisfied: soxr>=0.3.2 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (0.5.0.post1)\n", "Requirement already satisfied: typing-extensions>=4.1.1 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (4.15.0)\n", "Requirement already satisfied: lazy-loader>=0.1 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (0.5)\n", "Requirement already satisfied: msgpack>=1.0 in /usr/local/lib/python3.12/dist-packages (from librosa>=0.6.0->torch-audiomentations==0.11.0) (1.1.2)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (3.29.0)\n", "Requirement already satisfied: networkx in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (3.6.1)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (3.1.6)\n", "Requirement already satisfied: fsspec in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (2023.10.0)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (12.1.105)\n", "Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (9.1.0.70)\n", "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (12.1.3.1)\n", "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (11.0.2.54)\n", "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (10.3.2.106)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (11.4.5.107)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (12.1.0.106)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (2.21.5)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (12.1.105)\n", "Requirement already satisfied: triton==3.1.0 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (3.1.0)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (75.2.0)\n", "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.7.0->torch-audiomentations==0.11.0) (1.13.1)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.12/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.7.0->torch-audiomentations==0.11.0) (12.8.93)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from sympy==1.13.1->torch>=1.7.0->torch-audiomentations==0.11.0) (1.3.0)\n", "Requirement already satisfied: primePy>=1.3 in /usr/local/lib/python3.12/dist-packages (from torch-pitch-shift>=1.2.2->torch-audiomentations==0.11.0) (1.3)\n", "Requirement already satisfied: packaging>=21.3 in /usr/local/lib/python3.12/dist-packages (from torch-pitch-shift>=1.2.2->torch-audiomentations==0.11.0) (26.2)\n", "Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /usr/local/lib/python3.12/dist-packages (from numba>=0.51.0->librosa>=0.6.0->torch-audiomentations==0.11.0) (0.43.0)\n", "Requirement already satisfied: platformdirs>=2.5.0 in /usr/local/lib/python3.12/dist-packages (from pooch>=1.1->librosa>=0.6.0->torch-audiomentations==0.11.0) (4.9.6)\n", "Requirement already satisfied: requests>=2.19.0 in /usr/local/lib/python3.12/dist-packages (from pooch>=1.1->librosa>=0.6.0->torch-audiomentations==0.11.0) (2.32.4)\n", "Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.12/dist-packages (from scikit-learn>=0.20.0->librosa>=0.6.0->torch-audiomentations==0.11.0) (3.6.0)\n", "Requirement already satisfied: cffi>=1.0 in /usr/local/lib/python3.12/dist-packages (from soundfile>=0.12.1->librosa>=0.6.0->torch-audiomentations==0.11.0) (2.0.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.12/dist-packages (from jinja2->torch>=1.7.0->torch-audiomentations==0.11.0) (3.0.3)\n", "Requirement already satisfied: pycparser in /usr/local/lib/python3.12/dist-packages (from cffi>=1.0->soundfile>=0.12.1->librosa>=0.6.0->torch-audiomentations==0.11.0) (3.0)\n", "Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->pooch>=1.1->librosa>=0.6.0->torch-audiomentations==0.11.0) (3.4.7)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->pooch>=1.1->librosa>=0.6.0->torch-audiomentations==0.11.0) (3.15)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->pooch>=1.1->librosa>=0.6.0->torch-audiomentations==0.11.0) (2.5.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->pooch>=1.1->librosa>=0.6.0->torch-audiomentations==0.11.0) (2026.5.20)\n", "Requirement already satisfied: acoustics==0.2.6 in /usr/local/lib/python3.12/dist-packages (0.2.6)\n", "Requirement already satisfied: numpy>=1.8 in /usr/local/lib/python3.12/dist-packages (from acoustics==0.2.6) (1.26.4)\n", "Requirement already satisfied: scipy>=0.16 in /usr/local/lib/python3.12/dist-packages (from acoustics==0.2.6) (1.16.3)\n", "Requirement already satisfied: matplotlib in /usr/local/lib/python3.12/dist-packages (from acoustics==0.2.6) (3.10.0)\n", "Requirement already satisfied: six>=1.4.1 in /usr/local/lib/python3.12/dist-packages (from acoustics==0.2.6) (1.17.0)\n", "Requirement already satisfied: pandas>=0.15 in /usr/local/lib/python3.12/dist-packages (from acoustics==0.2.6) (2.2.2)\n", "Requirement already satisfied: tabulate in /usr/local/lib/python3.12/dist-packages (from acoustics==0.2.6) (0.9.0)\n", "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from pandas>=0.15->acoustics==0.2.6) (2.9.0.post0)\n", "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.12/dist-packages (from pandas>=0.15->acoustics==0.2.6) (2025.2)\n", "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.12/dist-packages (from pandas>=0.15->acoustics==0.2.6) (2026.2)\n", "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib->acoustics==0.2.6) (1.3.3)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.12/dist-packages (from matplotlib->acoustics==0.2.6) (0.12.1)\n", "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib->acoustics==0.2.6) (4.63.0)\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib->acoustics==0.2.6) (1.5.0)\n", "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib->acoustics==0.2.6) (26.2)\n", "Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.12/dist-packages (from matplotlib->acoustics==0.2.6) (11.3.0)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib->acoustics==0.2.6) (3.3.2)\n", "Collecting onnxruntime==1.22.1\n", " Using cached onnxruntime-1.22.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (4.9 kB)\n", "Collecting ai_edge_litert==1.4.0\n", " Using cached ai_edge_litert-1.4.0-cp312-cp312-manylinux_2_17_x86_64.whl.metadata (1.9 kB)\n", "Requirement already satisfied: onnxsim in /usr/local/lib/python3.12/dist-packages (0.6.4)\n", "Requirement already satisfied: coloredlogs in /usr/local/lib/python3.12/dist-packages (from onnxruntime==1.22.1) (15.0.1)\n", "Requirement already satisfied: flatbuffers in /usr/local/lib/python3.12/dist-packages (from onnxruntime==1.22.1) (25.12.19)\n", "Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.12/dist-packages (from onnxruntime==1.22.1) (1.26.4)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.12/dist-packages (from onnxruntime==1.22.1) (26.2)\n", "Requirement already satisfied: protobuf in /usr/local/lib/python3.12/dist-packages (from onnxruntime==1.22.1) (4.25.5)\n", "Requirement already satisfied: sympy in /usr/local/lib/python3.12/dist-packages (from onnxruntime==1.22.1) (1.13.1)\n", "Requirement already satisfied: backports.strenum in /usr/local/lib/python3.12/dist-packages (from ai_edge_litert==1.4.0) (1.2.8)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.12/dist-packages (from ai_edge_litert==1.4.0) (4.67.1)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.12/dist-packages (from ai_edge_litert==1.4.0) (4.15.0)\n", "Requirement already satisfied: onnx in /usr/local/lib/python3.12/dist-packages (from onnxsim) (1.19.1)\n", "Requirement already satisfied: rich in /usr/local/lib/python3.12/dist-packages (from onnxsim) (13.9.4)\n", "Requirement already satisfied: humanfriendly>=9.1 in /usr/local/lib/python3.12/dist-packages (from coloredlogs->onnxruntime==1.22.1) (10.0)\n", "Requirement already satisfied: ml_dtypes>=0.5.0 in /usr/local/lib/python3.12/dist-packages (from onnx->onnxsim) (0.5.1)\n", "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.12/dist-packages (from rich->onnxsim) (4.2.0)\n", "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.12/dist-packages (from rich->onnxsim) (2.20.0)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from sympy->onnxruntime==1.22.1) (1.3.0)\n", "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.12/dist-packages (from markdown-it-py>=2.2.0->rich->onnxsim) (0.1.2)\n", "Using cached onnxruntime-1.22.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (16.5 MB)\n", "Using cached ai_edge_litert-1.4.0-cp312-cp312-manylinux_2_17_x86_64.whl (11.2 MB)\n", "Installing collected packages: ai_edge_litert, onnxruntime\n", " Attempting uninstall: ai_edge_litert\n", " Found existing installation: ai-edge-litert 2.1.2\n", " Uninstalling ai-edge-litert-2.1.2:\n", " Successfully uninstalled ai-edge-litert-2.1.2\n", " Attempting uninstall: onnxruntime\n", " Found existing installation: onnxruntime 1.24.3\n", " Uninstalling onnxruntime-1.24.3:\n", " Successfully uninstalled onnxruntime-1.24.3\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", "openwakeword 0.6.0 requires speexdsp-ns<1,>=0.1.2; platform_system == \"Linux\", which is not installed.\n", "onnx2tf 2.4.1 requires ai-edge-litert==2.1.2, but you have ai-edge-litert 1.4.0 which is incompatible.\n", "onnx2tf 2.4.1 requires onnx==1.20.1, but you have onnx 1.19.1 which is incompatible.\n", "onnx2tf 2.4.1 requires onnxruntime==1.24.3, but you have onnxruntime 1.22.1 which is incompatible.\n", "openwakeword 0.6.0 requires ai-edge-litert<3,>=2.0.2; platform_system == \"Linux\" or platform_system == \"Darwin\", but you have ai-edge-litert 1.4.0 which is incompatible.\u001b[0m\u001b[31m\n", "\u001b[0mSuccessfully installed ai_edge_litert-1.4.0 onnxruntime-1.22.1\n", "Requirement already satisfied: onnx2tf in /usr/local/lib/python3.12/dist-packages (2.4.1)\n", "Requirement already satisfied: numpy==1.26.4 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (1.26.4)\n", "Collecting onnx==1.20.1 (from onnx2tf)\n", " Using cached onnx-1.20.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (8.4 kB)\n", "Collecting onnxruntime==1.24.3 (from onnx2tf)\n", " Using cached onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (5.1 kB)\n", "Requirement already satisfied: opencv-python==4.11.0.86 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (4.11.0.86)\n", "Requirement already satisfied: onnxsim-prebuilt==0.4.39.post2 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (0.4.39.post2)\n", "Requirement already satisfied: onnxoptimizer==0.4.2 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (0.4.2)\n", "Requirement already satisfied: onnxscript==0.6.2 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (0.6.2)\n", "Collecting ai-edge-litert==2.1.2 (from onnx2tf)\n", " Using cached ai_edge_litert-2.1.2-cp312-cp312-manylinux_2_27_x86_64.whl.metadata (2.1 kB)\n", "Requirement already satisfied: sne4onnx==2.0.1 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (2.0.1)\n", "Requirement already satisfied: sng4onnx==2.0.1 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (2.0.1)\n", "Requirement already satisfied: psutil==5.9.5 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (5.9.5)\n", "Requirement already satisfied: protobuf==4.25.5 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (4.25.5)\n", "Requirement already satisfied: h5py==3.12.1 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (3.12.1)\n", "Requirement already satisfied: ml-dtypes==0.5.1 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (0.5.1)\n", "Requirement already satisfied: flatbuffers==25.12.19 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (25.12.19)\n", "Requirement already satisfied: tqdm==4.67.1 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (4.67.1)\n", "Requirement already satisfied: pytest==9.0.2 in /usr/local/lib/python3.12/dist-packages (from onnx2tf) (9.0.2)\n", "Requirement already satisfied: backports.strenum in /usr/local/lib/python3.12/dist-packages (from ai-edge-litert==2.1.2->onnx2tf) (1.2.8)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.12/dist-packages (from ai-edge-litert==2.1.2->onnx2tf) (4.15.0)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.12/dist-packages (from onnxruntime==1.24.3->onnx2tf) (26.2)\n", "Requirement already satisfied: sympy in /usr/local/lib/python3.12/dist-packages (from onnxruntime==1.24.3->onnx2tf) (1.13.1)\n", "Requirement already satisfied: onnx_ir<2,>=0.1.15 in /usr/local/lib/python3.12/dist-packages (from onnxscript==0.6.2->onnx2tf) (0.2.1)\n", "Requirement already satisfied: rich in /usr/local/lib/python3.12/dist-packages (from onnxsim-prebuilt==0.4.39.post2->onnx2tf) (13.9.4)\n", "Requirement already satisfied: iniconfig>=1.0.1 in /usr/local/lib/python3.12/dist-packages (from pytest==9.0.2->onnx2tf) (2.3.0)\n", "Requirement already satisfied: pluggy<2,>=1.5 in /usr/local/lib/python3.12/dist-packages (from pytest==9.0.2->onnx2tf) (1.6.0)\n", "Requirement already satisfied: pygments>=2.7.2 in /usr/local/lib/python3.12/dist-packages (from pytest==9.0.2->onnx2tf) (2.20.0)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from sympy->onnxruntime==1.24.3->onnx2tf) (1.3.0)\n", "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.12/dist-packages (from rich->onnxsim-prebuilt==0.4.39.post2->onnx2tf) (4.2.0)\n", "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.12/dist-packages (from markdown-it-py>=2.2.0->rich->onnxsim-prebuilt==0.4.39.post2->onnx2tf) (0.1.2)\n", "Using cached ai_edge_litert-2.1.2-cp312-cp312-manylinux_2_27_x86_64.whl (16.3 MB)\n", "Using cached onnx-1.20.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (17.5 MB)\n", "Using cached onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (17.2 MB)\n", "Installing collected packages: ai-edge-litert, onnxruntime, onnx\n", " Attempting uninstall: ai-edge-litert\n", " Found existing installation: ai-edge-litert 1.4.0\n", " Uninstalling ai-edge-litert-1.4.0:\n", " Successfully uninstalled ai-edge-litert-1.4.0\n", " Attempting uninstall: onnxruntime\n", " Found existing installation: onnxruntime 1.22.1\n", " Uninstalling onnxruntime-1.22.1:\n", " Successfully uninstalled onnxruntime-1.22.1\n", " Attempting uninstall: onnx\n", " Found existing installation: onnx 1.19.1\n", " Uninstalling onnx-1.19.1:\n", " Successfully uninstalled onnx-1.19.1\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", "openwakeword 0.6.0 requires speexdsp-ns<1,>=0.1.2; platform_system == \"Linux\", which is not installed.\u001b[0m\u001b[31m\n", "\u001b[0mSuccessfully installed ai-edge-litert-2.1.2 onnx-1.20.1 onnxruntime-1.24.3\n", "Collecting onnx==1.19.1\n", " Using cached onnx-1.19.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (7.0 kB)\n", "Requirement already satisfied: numpy>=1.22 in /usr/local/lib/python3.12/dist-packages (from onnx==1.19.1) (1.26.4)\n", "Requirement already satisfied: protobuf>=4.25.1 in /usr/local/lib/python3.12/dist-packages (from onnx==1.19.1) (4.25.5)\n", "Requirement already satisfied: typing_extensions>=4.7.1 in /usr/local/lib/python3.12/dist-packages (from onnx==1.19.1) (4.15.0)\n", "Requirement already satisfied: ml_dtypes>=0.5.0 in /usr/local/lib/python3.12/dist-packages (from onnx==1.19.1) (0.5.1)\n", "Using cached onnx-1.19.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (18.2 MB)\n", "Installing collected packages: onnx\n", " Attempting uninstall: onnx\n", " Found existing installation: onnx 1.20.1\n", " Uninstalling onnx-1.20.1:\n", " Successfully uninstalled onnx-1.20.1\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", "onnx2tf 2.4.1 requires onnx==1.20.1, but you have onnx 1.19.1 which is incompatible.\u001b[0m\u001b[31m\n", "\u001b[0mSuccessfully installed onnx-1.19.1\n", "Requirement already satisfied: onnx_graphsurgeon in /usr/local/lib/python3.12/dist-packages (0.6.1)\n", "Requirement already satisfied: sng4onnx in /usr/local/lib/python3.12/dist-packages (2.0.1)\n", "Requirement already satisfied: ml-dtypes in /usr/local/lib/python3.12/dist-packages (from onnx_graphsurgeon) (0.5.1)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (from onnx_graphsurgeon) (1.26.4)\n", "Requirement already satisfied: onnx>=1.14.0 in /usr/local/lib/python3.12/dist-packages (from onnx_graphsurgeon) (1.19.1)\n", "Requirement already satisfied: protobuf>=4.25.1 in /usr/local/lib/python3.12/dist-packages (from onnx>=1.14.0->onnx_graphsurgeon) (4.25.5)\n", "Requirement already satisfied: typing_extensions>=4.7.1 in /usr/local/lib/python3.12/dist-packages (from onnx>=1.14.0->onnx_graphsurgeon) (4.15.0)\n", "Requirement already satisfied: pronouncing==0.2.0 in /usr/local/lib/python3.12/dist-packages (0.2.0)\n", "Requirement already satisfied: cmudict>=0.4.0 in /usr/local/lib/python3.12/dist-packages (from pronouncing==0.2.0) (1.1.3)\n", "Requirement already satisfied: importlib-metadata>=5 in /usr/local/lib/python3.12/dist-packages (from cmudict>=0.4.0->pronouncing==0.2.0) (8.7.1)\n", "Requirement already satisfied: importlib-resources>=5 in /usr/local/lib/python3.12/dist-packages (from cmudict>=0.4.0->pronouncing==0.2.0) (7.1.0)\n", "Requirement already satisfied: zipp>=3.20 in /usr/local/lib/python3.12/dist-packages (from importlib-metadata>=5->cmudict>=0.4.0->pronouncing==0.2.0) (4.1.0)\n", "Requirement already satisfied: datasets==2.14.6 in /usr/local/lib/python3.12/dist-packages (2.14.6)\n", "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (1.26.4)\n", "Requirement already satisfied: pyarrow>=8.0.0 in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (18.1.0)\n", "Requirement already satisfied: dill<0.3.8,>=0.3.0 in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (0.3.7)\n", "Requirement already satisfied: pandas in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (2.2.2)\n", "Requirement already satisfied: requests>=2.19.0 in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (2.32.4)\n", "Requirement already satisfied: tqdm>=4.62.1 in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (4.67.1)\n", "Requirement already satisfied: xxhash in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (3.7.0)\n", "Requirement already satisfied: multiprocess in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (0.70.15)\n", "Requirement already satisfied: fsspec<=2023.10.0,>=2023.1.0 in /usr/local/lib/python3.12/dist-packages (from fsspec[http]<=2023.10.0,>=2023.1.0->datasets==2.14.6) (2023.10.0)\n", "Requirement already satisfied: aiohttp in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (3.13.5)\n", "Requirement already satisfied: huggingface-hub<1.0.0,>=0.14.0 in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (0.36.2)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (26.2)\n", "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.12/dist-packages (from datasets==2.14.6) (6.0.3)\n", "Requirement already satisfied: aiohappyeyeballs>=2.5.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp->datasets==2.14.6) (2.6.2)\n", "Requirement already satisfied: aiosignal>=1.4.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp->datasets==2.14.6) (1.4.0)\n", "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp->datasets==2.14.6) (26.1.0)\n", "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.12/dist-packages (from aiohttp->datasets==2.14.6) (1.8.0)\n", "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.12/dist-packages (from aiohttp->datasets==2.14.6) (6.7.1)\n", "Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp->datasets==2.14.6) (0.5.2)\n", "Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/lib/python3.12/dist-packages (from aiohttp->datasets==2.14.6) (1.24.2)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.12/dist-packages (from huggingface-hub<1.0.0,>=0.14.0->datasets==2.14.6) (3.29.0)\n", "Requirement already satisfied: hf-xet<2.0.0,>=1.1.3 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub<1.0.0,>=0.14.0->datasets==2.14.6) (1.5.0)\n", "Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub<1.0.0,>=0.14.0->datasets==2.14.6) (4.15.0)\n", "Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->datasets==2.14.6) (3.4.7)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->datasets==2.14.6) (3.15)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->datasets==2.14.6) (2.5.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests>=2.19.0->datasets==2.14.6) (2026.5.20)\n", "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from pandas->datasets==2.14.6) (2.9.0.post0)\n", "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.12/dist-packages (from pandas->datasets==2.14.6) (2025.2)\n", "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.12/dist-packages (from pandas->datasets==2.14.6) (2026.2)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.8.2->pandas->datasets==2.14.6) (1.17.0)\n", "Requirement already satisfied: deep-phonemizer==0.0.19 in /usr/local/lib/python3.12/dist-packages (0.0.19)\n", "Requirement already satisfied: torch>=1.2.0 in /usr/local/lib/python3.12/dist-packages (from deep-phonemizer==0.0.19) (2.5.0+cu121)\n", "Requirement already satisfied: tqdm>=4.38.0 in /usr/local/lib/python3.12/dist-packages (from deep-phonemizer==0.0.19) (4.67.1)\n", "Requirement already satisfied: PyYAML>=5.1 in /usr/local/lib/python3.12/dist-packages (from deep-phonemizer==0.0.19) (6.0.3)\n", "Requirement already satisfied: tensorboard in /usr/local/lib/python3.12/dist-packages (from deep-phonemizer==0.0.19) (2.20.0)\n", "Requirement already satisfied: certifi>=2022.12.7 in /usr/local/lib/python3.12/dist-packages (from deep-phonemizer==0.0.19) (2026.5.20)\n", "Requirement already satisfied: wheel>=0.38.0 in /usr/local/lib/python3.12/dist-packages (from deep-phonemizer==0.0.19) (0.47.0)\n", "Requirement already satisfied: setuptools>=65.5.1 in /usr/local/lib/python3.12/dist-packages (from deep-phonemizer==0.0.19) (75.2.0)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (3.29.0)\n", "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (4.15.0)\n", "Requirement already satisfied: networkx in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (3.6.1)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (3.1.6)\n", "Requirement already satisfied: fsspec in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (2023.10.0)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (12.1.105)\n", "Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (9.1.0.70)\n", "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (12.1.3.1)\n", "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (11.0.2.54)\n", "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (10.3.2.106)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (11.4.5.107)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (12.1.0.106)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (2.21.5)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (12.1.105)\n", "Requirement already satisfied: triton==3.1.0 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (3.1.0)\n", "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.12/dist-packages (from torch>=1.2.0->deep-phonemizer==0.0.19) (1.13.1)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.12/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.2.0->deep-phonemizer==0.0.19) (12.8.93)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from sympy==1.13.1->torch>=1.2.0->deep-phonemizer==0.0.19) (1.3.0)\n", "Requirement already satisfied: packaging>=24.0 in /usr/local/lib/python3.12/dist-packages (from wheel>=0.38.0->deep-phonemizer==0.0.19) (26.2)\n", "Requirement already satisfied: absl-py>=0.4 in /usr/local/lib/python3.12/dist-packages (from tensorboard->deep-phonemizer==0.0.19) (1.4.0)\n", "Requirement already satisfied: grpcio>=1.48.2 in /usr/local/lib/python3.12/dist-packages (from tensorboard->deep-phonemizer==0.0.19) (1.80.0)\n", "Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.12/dist-packages (from tensorboard->deep-phonemizer==0.0.19) (3.10.2)\n", "Requirement already satisfied: numpy>=1.12.0 in /usr/local/lib/python3.12/dist-packages (from tensorboard->deep-phonemizer==0.0.19) (1.26.4)\n", "Requirement already satisfied: pillow in /usr/local/lib/python3.12/dist-packages (from tensorboard->deep-phonemizer==0.0.19) (11.3.0)\n", "Requirement already satisfied: protobuf!=4.24.0,>=3.19.6 in /usr/local/lib/python3.12/dist-packages (from tensorboard->deep-phonemizer==0.0.19) (4.25.5)\n", "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /usr/local/lib/python3.12/dist-packages (from tensorboard->deep-phonemizer==0.0.19) (0.7.2)\n", "Requirement already satisfied: werkzeug>=1.0.1 in /usr/local/lib/python3.12/dist-packages (from tensorboard->deep-phonemizer==0.0.19) (3.1.8)\n", "Requirement already satisfied: markupsafe>=2.1.1 in /usr/local/lib/python3.12/dist-packages (from werkzeug>=1.0.1->tensorboard->deep-phonemizer==0.0.19) (3.0.3)\n", "Installation terminée.\n" ] } ], "execution_count": 14 }, { "cell_type": "code", "metadata": { "id": "hTJFtu2T5ArE", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "cfd86de4-0ccd-484c-b7dc-dfd8c90a6f79" }, "source": [ "import numpy as np, sys, yaml, datasets, scipy\n", "from pathlib import Path\n", "from tqdm import tqdm\n", "\n", "# MIT Room Impulse Responses\n", "output_dir = './mit_rirs'\n", "if not os.path.exists(output_dir):\n", " os.mkdir(output_dir)\n", " !git lfs install\n", " !git clone https://huggingface.co/datasets/davidscripka/MIT_environmental_impulse_responses\n", " rir_dataset = datasets.Dataset.from_dict({\n", " 'audio': [str(i) for i in Path('./MIT_environmental_impulse_responses/16khz').glob('*.wav')]\n", " }).cast_column('audio', datasets.Audio())\n", " for row in tqdm(rir_dataset):\n", " name = row['audio']['path'].split('/')[-1]\n", " scipy.io.wavfile.write(os.path.join(output_dir, name), 16000, (row['audio']['array']*32767).astype(np.int16))\n", "\n", "# FMA music (1h de clips pour bruit de fond)\n", "output_dir = './fma'\n", "if not os.path.exists(output_dir):\n", " os.mkdir(output_dir)\n", " fma_dataset = datasets.load_dataset('rudraml/fma', name='small', split='train', streaming=True)\n", " fma_dataset = iter(fma_dataset.cast_column('audio', datasets.Audio(sampling_rate=16000)))\n", " n_hours = 1\n", " for i in tqdm(range(n_hours*3600//30)):\n", " row = next(fma_dataset)\n", " name = row['audio']['path'].split('/')[-1].replace('.mp3', '.wav')\n", " scipy.io.wavfile.write(os.path.join(output_dir, name), 16000, (row['audio']['array']*32767).astype(np.int16))\n", "\n", "# Features pré-calculées openWakeWord\n", "if not os.path.exists('./openwakeword_features_ACAV100M_2000_hrs_16bit.npy'):\n", " !wget -q https://huggingface.co/datasets/davidscripka/openwakeword_features/resolve/main/openwakeword_features_ACAV100M_2000_hrs_16bit.npy\n", "if not os.path.exists('validation_set_features.npy'):\n", " !wget -q https://huggingface.co/datasets/davidscripka/openwakeword_features/resolve/main/validation_set_features.npy\n", "\n", "print('Données prêtes.')" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Données prêtes.\n" ] } ], "execution_count": 15 }, { "cell_type": "markdown", "metadata": { "id": "lR8ZNUgE5ArE" }, "source": [ "## Étape 3 — Génération des samples hey_marco multi-langue" ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "yVTgaVB_5ArE", "outputId": "5fe63df8-579a-4a23-c10b-4436f22158bc" }, "source": [ "import sys, os, glob\n", "import scipy.io.wavfile as wav\n", "import scipy.signal as signal\n", "import numpy as np\n", "from tqdm import tqdm\n", "\n", "if 'piper-sample-generator/' not in sys.path:\n", " sys.path.append('piper-sample-generator/')\n", "from generate_samples import generate_samples\n", "\n", "os.makedirs('./hey_marco_clips', exist_ok=True)\n", "\n", "# ── EN/DE/NL/IT/ES via piper-sample-generator ───────────────────────────────\n", "for lang in ['en', 'en-gb', 'de', 'nl', 'it', 'es']:\n", " n = lang_samples[lang]\n", " out_dir = f'./hey_marco_clips/{lang}'\n", " os.makedirs(out_dir, exist_ok=True)\n", " existing = len([f for f in os.listdir(out_dir) if f.endswith('.wav')])\n", " remaining = n - existing\n", " if remaining <= 0:\n", " print(f' [{lang}] déjà complet ({existing}/{n})')\n", " continue\n", " print(f' [{lang}] génération {remaining} samples...')\n", " generate_samples(\n", " text='hey_marco', max_samples=remaining,\n", " length_scales=[0.9, 1.0, 1.1], noise_scales=[0.667], noise_scale_ws=[0.8],\n", " output_dir=out_dir, batch_size=50, auto_reduce_batch_size=True,\n", " )\n", "\n", "# ── FR via piper CLI (redirection fichier) + rééchantillonnage 16kHz ─────────\n", "fr_out_dir = './hey_marco_clips/fr'\n", "os.makedirs(fr_out_dir, exist_ok=True)\n", "existing_fr = len([f for f in os.listdir(fr_out_dir) if f.endswith('.wav')])\n", "remaining_fr = lang_samples['fr'] - existing_fr\n", "\n", "if remaining_fr > 0:\n", " print(f' [fr] génération {remaining_fr} samples : \"hé marco\"')\n", " speeds = [0.85, 0.9, 0.95, 1.0, 1.05, 1.1, 1.15]\n", " n_per_speed = remaining_fr // len(speeds)\n", " remainder = remaining_fr % len(speeds)\n", " for i, speed in enumerate(tqdm(speeds)):\n", " n = n_per_speed + (1 if i < remainder else 0)\n", " with open('/tmp/fr_input.txt', 'w', encoding='utf-8') as f:\n", " f.write('\\n'.join(['hé marco'] * n))\n", " !piper --model fr_FR-siwis-medium.onnx --length_scale {speed} --output_dir {fr_out_dir} < /tmp/fr_input.txt\n", "\n", " resampled = 0\n", " for path in glob.glob(f'{fr_out_dir}/*.wav'):\n", " if os.path.getsize(path) == 0:\n", " os.remove(path)\n", " continue\n", " try:\n", " sr, data = wav.read(path)\n", " if sr != 16000:\n", " n_s = round(len(data) * 16000 / sr)\n", " wav.write(path, 16000, signal.resample(data, n_s).astype(np.int16))\n", " resampled += 1\n", " except Exception:\n", " os.remove(path)\n", " print(f' [fr] {resampled} clips rééchantillonnés à 16kHz')\n", "else:\n", " print(f' [fr] déjà complet ({existing_fr}/{lang_samples[\"fr\"]})')\n", "\n", "total = sum(\n", " len([f for f in os.listdir(f'./hey_marco_clips/{lang}') if f.endswith('.wav')])\n", " for lang in lang_samples\n", ")\n", "print(f'\\nTotal clips générés : {total}/{number_of_examples}')" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " [en] déjà complet (3000/3000)\n", " [en-gb] déjà complet (1000/1000)\n", " [de] déjà complet (1000/1000)\n", " [nl] déjà complet (500/500)\n", " [it] déjà complet (500/500)\n", " [es] déjà complet (500/500)\n", " [fr] déjà complet (3500/3500)\n", "\n", "Total clips générés : 10000/10000\n" ] } ], "execution_count": 16 }, { "cell_type": "markdown", "metadata": { "id": "tS_Ml81B5ArF" }, "source": [ "## Étape 4 — Training" ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "-GHdlmWe5ArF", "outputId": "6e89d7cb-defb-4490-8034-330f88e81106" }, "source": [ "import yaml, os, sys, shutil, glob, random\n", "import scipy.io.wavfile as wav\n", "import scipy.signal as signal\n", "import numpy as np\n", "\n", "config = yaml.load(open('openwakeword/examples/custom_model.yml', 'r').read(), yaml.Loader)\n", "\n", "# Paramètres depuis la cellule de configuration globale\n", "config['target_phrase'] = ['hey marco', 'hé marco']\n", "config['model_name'] = 'hey_marco'\n", "config['n_samples'] = number_of_examples\n", "config['n_samples_val'] = max(500, number_of_examples // 10)\n", "config['steps'] = number_of_training_steps\n", "config['target_accuracy'] = 0.5\n", "config['target_recall'] = 0.25\n", "config['max_negative_weight'] = false_activation_penalty\n", "\n", "final_drive_output_dir = os.path.join(drive_output_dir, 'hey_marco')\n", "os.makedirs(final_drive_output_dir, exist_ok=True)\n", "\n", "local_temp_dir = './openwakeword_training_temp'\n", "config['output_dir'] = local_temp_dir\n", "config['background_paths'] = ['./fma']\n", "config['false_positive_validation_data_path'] = 'validation_set_features.npy'\n", "config['feature_data_files'] = {'ACAV100M_sample': 'openwakeword_features_ACAV100M_2000_hrs_16bit.npy'}\n", "\n", "with open('my_model.yaml', 'w') as f:\n", " yaml.dump(config, f)\n", "\n", "# Rééchantillonner les clips FR à 16kHz\n", "for path in glob.glob('./hey_marco_clips/fr/*.wav'):\n", " if os.path.getsize(path) == 0:\n", " os.remove(path)\n", " continue\n", " try:\n", " sr, data = wav.read(path)\n", " if sr != 16000:\n", " n_s = round(len(data) * 16000 / sr)\n", " wav.write(path, 16000, signal.resample(data, n_s).astype(np.int16))\n", " except Exception:\n", " os.remove(path)\n", "\n", "# Setup des dossiers via --generate_clips\n", "print('Setup des dossiers via --generate_clips...')\n", "!{sys.executable} openwakeword/openwakeword/train.py --training_config my_model.yaml --generate_clips\n", "\n", "# Remplacer les clips EN par nos clips multi-langue\n", "positive_clips_dir = os.path.join(local_temp_dir, 'hey_marco', 'positive_clips')\n", "positive_test_dir = os.path.join(local_temp_dir, 'hey_marco', 'positive_test')\n", "os.makedirs(positive_clips_dir, exist_ok=True)\n", "os.makedirs(positive_test_dir, exist_ok=True)\n", "\n", "for f in glob.glob(os.path.join(positive_clips_dir, '*.wav')): os.remove(f)\n", "for f in glob.glob(os.path.join(positive_test_dir, '*.wav')): os.remove(f)\n", "\n", "all_clips = glob.glob('./hey_marco_clips/**/*.wav', recursive=True)\n", "random.shuffle(all_clips)\n", "n_val = config['n_samples_val']\n", "for wav_path in all_clips[:n_val]:\n", " lang = os.path.basename(os.path.dirname(wav_path))\n", " shutil.copy(wav_path, os.path.join(positive_test_dir, f\"{lang}_{os.path.basename(wav_path)}\"))\n", "for wav_path in all_clips[n_val:]:\n", " lang = os.path.basename(os.path.dirname(wav_path))\n", " shutil.copy(wav_path, os.path.join(positive_clips_dir, f\"{lang}_{os.path.basename(wav_path)}\"))\n", "\n", "print(f'Training : {len(all_clips) - n_val} clips | Validation : {n_val} clips')\n", "\n", "# Supprimer le cache .npy\n", "for f in glob.glob(os.path.join(local_temp_dir, 'hey_marco', '*.npy')):\n", " os.remove(f)\n", " print(f'Cache supprimé : {os.path.basename(f)}')\n", "\n", "# Augmentation + training\n", "!{sys.executable} openwakeword/openwakeword/train.py --training_config my_model.yaml --augment_clips\n", "!{sys.executable} openwakeword/openwakeword/train.py --training_config my_model.yaml --train_model" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Setup des dossiers via --generate_clips...\n", "/usr/local/lib/python3.12/dist-packages/torch_audiomentations/utils/io.py:27: UserWarning: torchaudio._backend.set_audio_backend has been deprecated. With dispatcher enabled, this function is no-op. You can remove the function call.\n", " torchaudio.set_audio_backend(\"soundfile\")\n", "INFO:root:##################################################\n", "Generating positive clips for training\n", "##################################################\n", "WARNING:root:Skipping generation of positive clips for training, as ~10000 already exist\n", "INFO:root:##################################################\n", "Generating positive clips for testing\n", "##################################################\n", "WARNING:root:Skipping generation of positive clips testing, as ~1000 already exist\n", "INFO:root:##################################################\n", "Generating negative clips for training\n", "##################################################\n", "WARNING:root:Skipping generation of negative clips for training, as ~10000 already exist\n", "INFO:root:##################################################\n", "Generating negative clips for testing\n", "##################################################\n", "WARNING:root:Skipping generation of negative clips for testing, as ~1000 already exist\n", "Training : 9000 clips | Validation : 1000 clips\n", "Cache supprimé : positive_features_train.npy\n", "Cache supprimé : negative_features_test.npy\n", "Cache supprimé : negative_features_train.npy\n", "Cache supprimé : positive_features_test.npy\n", "/usr/local/lib/python3.12/dist-packages/torch_audiomentations/utils/io.py:27: UserWarning: torchaudio._backend.set_audio_backend has been deprecated. With dispatcher enabled, this function is no-op. You can remove the function call.\n", " torchaudio.set_audio_backend(\"soundfile\")\n", "INFO:root:##################################################\n", "Computing openwakeword features for generated samples\n", "##################################################\n", "/usr/local/lib/python3.12/dist-packages/onnxruntime/capi/onnxruntime_inference_collection.py:123: UserWarning: Specified provider 'CUDAExecutionProvider' is not in available provider names.Available providers: 'AzureExecutionProvider, CPUExecutionProvider'\n", " warnings.warn(\n", "/usr/local/lib/python3.12/dist-packages/torch_audiomentations/core/transforms_interface.py:77: FutureWarning: Transforms now expect an `output_type` argument that currently defaults to 'tensor', will default to 'dict' in v0.12, and will be removed in v0.13. Make sure to update your code to something like:\n", " >>> augment = PitchShift(..., output_type='dict')\n", " >>> augmented_samples = augment(samples).samples\n", " warnings.warn(\n", "/usr/local/lib/python3.12/dist-packages/torch_audiomentations/core/transforms_interface.py:77: FutureWarning: Transforms now expect an `output_type` argument that currently defaults to 'tensor', will default to 'dict' in v0.12, and will be removed in v0.13. Make sure to update your code to something like:\n", " >>> augment = BandStopFilter(..., output_type='dict')\n", " >>> augmented_samples = augment(samples).samples\n", " warnings.warn(\n", "/usr/local/lib/python3.12/dist-packages/torch_audiomentations/core/transforms_interface.py:77: FutureWarning: Transforms now expect an `output_type` argument that currently defaults to 'tensor', will default to 'dict' in v0.12, and will be removed in v0.13. Make sure to update your code to something like:\n", " >>> augment = AddColoredNoise(..., output_type='dict')\n", " >>> augmented_samples = augment(samples).samples\n", " warnings.warn(\n", "/usr/local/lib/python3.12/dist-packages/torch_audiomentations/core/transforms_interface.py:77: FutureWarning: Transforms now expect an `output_type` argument that currently defaults to 'tensor', will default to 'dict' in v0.12, and will be removed in v0.13. Make sure to update your code to something like:\n", " >>> augment = AddBackgroundNoise(..., output_type='dict')\n", " >>> augmented_samples = augment(samples).samples\n", " warnings.warn(\n", "/usr/local/lib/python3.12/dist-packages/torch_audiomentations/core/transforms_interface.py:77: FutureWarning: Transforms now expect an `output_type` argument that currently defaults to 'tensor', will default to 'dict' in v0.12, and will be removed in v0.13. Make sure to update your code to something like:\n", " >>> augment = Gain(..., output_type='dict')\n", " >>> augmented_samples = augment(samples).samples\n", " warnings.warn(\n", "/usr/local/lib/python3.12/dist-packages/torch_audiomentations/core/composition.py:42: FutureWarning: Transforms now expect an `output_type` argument that currently defaults to 'tensor', will default to 'dict' in v0.12, and will be removed in v0.13. Make sure to update your code to something like:\n", " >>> augment = Compose(..., output_type='dict')\n", " >>> augmented_samples = augment(samples).samples\n", " warnings.warn(\n", "/usr/local/lib/python3.12/dist-packages/audiomentations/core/transforms_interface.py:61: UserWarning: Warning: input samples dtype is np.float64. Converting to np.float32\n", " warnings.warn(\n", "Computing features: 14% 89/625 [01:05<07:51, 1.14it/s]" ] } ], "execution_count": null }, { "cell_type": "markdown", "metadata": { "id": "7PzwdVPt5ArF" }, "source": [ "## Étape 5 — Export ONNX → TFLite + sauvegarde Drive" ] }, { "cell_type": "code", "metadata": { "id": "-Y8mDdku5ArF", "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "outputId": "1e1cc21f-d261-49c8-c5ec-7f2c86beea8d" }, "source": [ "import shutil, os\n", "from google.colab import files\n", "\n", "local_onnx = f'{local_temp_dir}/hey_marco.onnx'\n", "drive_onnx = f'{final_drive_output_dir}/hey_marco.onnx'\n", "drive_tflite1 = f'{final_drive_output_dir}/hey_marco_float32.tflite'\n", "drive_tflite = f'{final_drive_output_dir}/hey_marco.tflite'\n", "\n", "shutil.copy(local_onnx, drive_onnx)\n", "print(f'ONNX copié : {drive_onnx}')\n", "\n", "!onnx2tf -i \"{drive_onnx}\" -o \"{final_drive_output_dir}\" -kat onnx____Flatten_0\n", "!mv \"{drive_tflite1}\" \"{drive_tflite}\"\n", "print(f'TFLite : {drive_tflite}')\n", "\n", "files.download(drive_onnx)\n", "files.download(drive_tflite)" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "ONNX copié : /content/drive/My Drive/Colab Notebooks/Wakeword/openwakeword/hey_marco/hey_marco.onnx\n", "\n", "\u001b[07mModel optimizing started\u001b[0m ============================================================\n", "Simplifying...\n", "Finish! Here is the difference:\n", "┏━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓\n", "┃ ┃ Original Model ┃ Simplified Model ┃\n", "┡━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩\n", "│ Add │ 4 │ 4 │\n", "│ Constant │ 14 │ 12 │\n", "│ Div │ 2 │ 2 │\n", "│ Flatten │ 1 │ 1 │\n", "│ Gemm │ 3 │ 3 │\n", "│ Mul │ 2 │ 2 │\n", "│ Pow │ 2 │ 2 │\n", "│ ReduceMean │ 4 │ 4 │\n", "│ Relu │ 2 │ 2 │\n", "│ Sigmoid │ 1 │ 1 │\n", "│ Sqrt │ 2 │ 2 │\n", "│ Sub │ 2 │ 2 │\n", "│ Model Size │ 200.6KiB │ 201.4KiB │\n", "└────────────┴────────────────┴──────────────────┘\n", "\n", "Simplifying...\n", "Finish! Here is the difference:\n", "┏━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓\n", "┃ ┃ Original Model ┃ Simplified Model ┃\n", "┡━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩\n", "│ Add │ 4 │ 4 │\n", "│ Constant │ 12 │ 12 │\n", "│ Div │ 2 │ 2 │\n", "│ Flatten │ 1 │ 1 │\n", "│ Gemm │ 3 │ 3 │\n", "│ Mul │ 2 │ 2 │\n", "│ Pow │ 2 │ 2 │\n", "│ ReduceMean │ 4 │ 4 │\n", "│ Relu │ 2 │ 2 │\n", "│ Sigmoid │ 1 │ 1 │\n", "│ Sqrt │ 2 │ 2 │\n", "│ Sub │ 2 │ 2 │\n", "│ Model Size │ 201.4KiB │ 201.4KiB │\n", "└────────────┴────────────────┴──────────────────┘\n", "\n", "Simplifying...\n", "Finish! Here is the difference:\n", "┏━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓\n", "┃ ┃ Original Model ┃ Simplified Model ┃\n", "┡━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩\n", "│ Add │ 4 │ 4 │\n", "│ Constant │ 12 │ 12 │\n", "│ Div │ 2 │ 2 │\n", "│ Flatten │ 1 │ 1 │\n", "│ Gemm │ 3 │ 3 │\n", "│ Mul │ 2 │ 2 │\n", "│ Pow │ 2 │ 2 │\n", "│ ReduceMean │ 4 │ 4 │\n", "│ Relu │ 2 │ 2 │\n", "│ Sigmoid │ 1 │ 1 │\n", "│ Sqrt │ 2 │ 2 │\n", "│ Sub │ 2 │ 2 │\n", "│ Model Size │ 201.4KiB │ 201.4KiB │\n", "└────────────┴────────────────┴──────────────────┘\n", "\n", "\u001b[32mModel optimizing complete!\u001b[0m\n", "\n", "\u001b[07mAutomatic generation of each OP name started\u001b[0m ========================================\n", "\u001b[32mAutomatic generation of each OP name complete!\u001b[0m\n", "\n", "\u001b[07mModel loaded\u001b[0m ========================================================================\n", "\n", "\u001b[07mflatbuffer_direct fast path started\u001b[0m ===============================================\n", "flatbuffer_direct lowering: 100% 25/25 [00:00<00:00, 7270.17it/s]\n", "flatbuffer_direct post-lowering [6/6] topological sort: 100% 6/6 [00:00<00:00, 126.88it/s]\n", "flatbuffer_direct write timing: stage=float32 mode=builder_direct total=0.018s serialize=0.006s (sanitize=0.000s build=0.001s pack=0.006s output=0.000s) write=0.009s size=0.20MB\n", "flatbuffer_direct write timing: stage=float16 mode=builder_direct total=0.020s serialize=0.005s (sanitize=0.000s build=0.000s pack=0.005s output=0.000s) write=0.014s size=0.10MB\n", "flatbuffer_direct export [4/3] write float16 tflite: 4it [00:00, 67.57it/s]\n", "\u001b[32mFloat32 tflite output complete! (/content/drive/My Drive/Colab Notebooks/Wakeword/openwakeword/hey_marco/hey_marco_float32.tflite)\u001b[0m\n", "\u001b[32mFloat16 tflite output complete! (/content/drive/My Drive/Colab Notebooks/Wakeword/openwakeword/hey_marco/hey_marco_float16.tflite)\u001b[0m\n", "\u001b[32mTensor correspondence report output complete! (/content/drive/My Drive/Colab Notebooks/Wakeword/openwakeword/hey_marco/hey_marco_tensor_correspondence_report.json)\u001b[0m\n", "TFLite : /content/drive/My Drive/Colab Notebooks/Wakeword/openwakeword/hey_marco/hey_marco.tflite\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "\n", " async function download(id, filename, size) {\n", " if (!google.colab.kernel.accessAllowed) {\n", " return;\n", " }\n", " const div = document.createElement('div');\n", " const label = document.createElement('label');\n", " label.textContent = `Downloading \"${filename}\": `;\n", " div.appendChild(label);\n", " const progress = document.createElement('progress');\n", " progress.max = size;\n", " div.appendChild(progress);\n", " document.body.appendChild(div);\n", "\n", " const buffers = [];\n", " let downloaded = 0;\n", "\n", " const channel = await google.colab.kernel.comms.open(id);\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", "\n", " for await (const message of channel.messages) {\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", " if (message.buffers) {\n", " for (const buffer of message.buffers) {\n", " buffers.push(buffer);\n", " downloaded += buffer.byteLength;\n", " progress.value = downloaded;\n", " }\n", " }\n", " }\n", " const blob = new Blob(buffers, {type: 'application/binary'});\n", " const a = document.createElement('a');\n", " a.href = window.URL.createObjectURL(blob);\n", " a.download = filename;\n", " div.appendChild(a);\n", " a.click();\n", " div.remove();\n", " }\n", " " ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "download(\"download_3db68d78-6807-4b91-a375-6120a8095472\", \"hey_marco.onnx\", 206276)" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "\n", " async function download(id, filename, size) {\n", " if (!google.colab.kernel.accessAllowed) {\n", " return;\n", " }\n", " const div = document.createElement('div');\n", " const label = document.createElement('label');\n", " label.textContent = `Downloading \"${filename}\": `;\n", " div.appendChild(label);\n", " const progress = document.createElement('progress');\n", " progress.max = size;\n", " div.appendChild(progress);\n", " document.body.appendChild(div);\n", "\n", " const buffers = [];\n", " let downloaded = 0;\n", "\n", " const channel = await google.colab.kernel.comms.open(id);\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", "\n", " for await (const message of channel.messages) {\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", " if (message.buffers) {\n", " for (const buffer of message.buffers) {\n", " buffers.push(buffer);\n", " downloaded += buffer.byteLength;\n", " progress.value = downloaded;\n", " }\n", " }\n", " }\n", " const blob = new Blob(buffers, {type: 'application/binary'});\n", " const a = document.createElement('a');\n", " a.href = window.URL.createObjectURL(blob);\n", " a.download = filename;\n", " div.appendChild(a);\n", " a.click();\n", " div.remove();\n", " }\n", " " ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "download(\"download_bc5d9c4f-dc14-43d1-aacf-8c09ee4bde00\", \"hey_marco.tflite\", 206992)" ] }, "metadata": {} } ], "execution_count": 10 } ] }