1287 lines
170 KiB
Plaintext
1287 lines
170 KiB
Plaintext
{
|
|
"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": [
|
|
"<IPython.lib.display.Audio object>"
|
|
],
|
|
"text/html": [
|
|
"\n",
|
|
" <audio controls=\"controls\" >\n",
|
|
" <source src=\"data:audio/x-wav;base64,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fwJtAqwCyQIDA/cCwAKzAn0CRwJKAmAChwKOAqACbwInAt0BogGqAbIByAHGAckBswGOAYEBewFsAXwBhAGNAasB1AHCAcMBzQHNAbQBewF3AVEBUQExAe4ByQEkAVAB8wCYAPsAnAGiAcABNwIIAnUB2QH9AdABBgJ3AnUCTwKBAmAC+wHnASQCPAJPAnMCrgKbApICtwKyArQCuQL8Ai0DRwNrA3IDdwNwA4UDgwOfA7ADpQO1A6QDpwOWA5sDrAO5A7oDnwOUA2UDXgNHAzYDMgMbAwID3QK5AoMCUgI2Ai4CCwL6AdYBqwGdAX4BZwFQASQBCgH/AO8A2gC6AKoAkgB0AHQAcQBuAHoAgwCYAJUAnwCyAMYA3QD1ABMBJAFHAWsBhgGhAc4B8wEYAkUCcQKVAqkCyALqAggDJQNEA2YDhgOkA80D2wPkA/wDCQQiBDAEOwQ+BDwEOwRDBEUENAQoBAwE9QPfA+QD1wObA4YDZwNKAyID9QLZArMCjwJjAkkCIQLoAb8BrAGYAXABUQExARoB+wDgAL4AmQCQAHsAbQBzAGUAUAA7ACEAGQAnADIAJwA3ADYAMgA6AFEAfwCQAKcAqwC/ANcA5QAJARkBLgFPAXsBkAGxAcYBzwHvAQECEgIyAkoCSwJeAmQCeAJ/AoUCkgKcArwCugK0Aq0CqQKnAqoCnAKVAoACfQKBAnMCcAI8AhoCCAIRAgYC9AHmAcEBrwGMAXgBXQFOATQBJQElAe0A3gDbAMoAqgCSAIwAfwB3AFgATgA+ACQAGgAWABAAFgAXABsAHQAdACsAHwAmACsALwA+AE0AUgBaAGoAZwBsAHoAhgCVAJ8ApAC5AMUAzgDjAAUB/AASATsBPAFKAVUBZwFxAX8BkgGpAawBtAHGAccB0QHfAekB6wH6Af0B+AEGAgoCAQL/AfkB6wHxAf4B/QHiAdAByQG2Aa0BqQGeAYUBdQFiAVQBSAE8AR4BBQH9ANsAwgCfAIUAfQBnAFIATQAuACIAGgD5/+r/3f/X/9D/xv/O/8f/tP+6/77/xP/P/+z//v8AAA4AHQAjACgALgBOAGIAcwCGAKgAwADbAAUBEAE2AUsBWwFxAZMBpwGpAcAB4AHwAe0BEgIpAhwCLAJBAjwCPwJDAjwCPAIxAjACMAIfAhIC/wHmAc8BwQGuAYwBcwFKATQB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+fcs+Ij47fiX+N/3Q/dd9ov1+vTE9Ab1xPXL9rr3Y/jV+Gf56/k9+jv61PlG+WH4Pvcq9oj1XfVa9aD1KvYG9z33Pvde94L3i/dP92/3v/dv+A/52fmF+hX7Xvss+6r68Pk0+Yf4mfjm+Cn5SflV+V75ZPlZ+XD5nfmr+XL51fgj+In3Aven9lr2KvZe9o72Svdw+Nv5xPoT+2P7jvtT+3L6hPmN+N73D/dD9tb1z/UL9lr2DPfr96j4Gvm2+fn5Jvr0+Zf5Wvkp+Wj5VvmJ+dX5Sfpp+kT6G/ra+cb5nvmJ+W35vvnA+dD5P/rS+iv74vqb+j/6u/kB+WD4DPgq+Fv4ovgX+Sn5xviN+JH4gPhF+CH4s/hR+XL5Mvlm+QH6O/oS+tz5qPl8+V/5DPnZ+MH4efj394/3Sffh9pT20/Yk92r31/cu+E/4f/jb+Oj4M/nB+Un6ovoK+1j7Vvss+9n6fPrk+Xv5Yvk/+Rz5RPlQ+Vf5jvna+Sr6bPpn+i/6JPp5+tr66/r2+sn6wPrc+vD6K/t2+5P7T/vT+mn6CfqN+SH5B/k5+T/5N/lj+Xr5Yfmj+R/6i/rY+lX7MPyZ/Kr8O/1z/VL9jP25/eT9kP3o/IH8T/xC/E38E/wB/JH8M/2s/T/+k/6Q/nr+af6s/vb+Fv8j/2f/wP/h/4L/OP/k/nb+Mf7S/ab9if10/Uj9Mf3S/C/8g/sW++b6svqO+mT6pPoH+2P74Ps9/IX82PwD/XD94v1s/vb+C//0/tX+kv5P/ij++v0A/i/+gv7C/u7+wf6h/sH+O//k/4gANAGOAcIBbwEIAcAABAFtAU4BMAH1AM8AdgDg/3f/Iv9b/8P/1f/s/7//Kf8a/h/9svya/KX8tPw1/ez9m/4Q/xb/RP+M/63/Z/9A/3H/iP9L/+X+zv6s/lr+RP54/uz+hv+w/8D/HwCEAJIAcgBRAF0AgwCLAJgArQC2ANkADwE/AYEBowHFAcwB5QHzAc4B1gG+AXcBPAHiAKEAgQBsAIcAegB4ANwADAEIAfoA+gAuAUsBYwF6Aa8BwAHGAfIBRwKvAtYC0gJ8Av8BcgG+ADwABAAMACgAZgDrAFsBtAEKAlUChgJ7AmQCWAJOApAC2AIRA4ED6AP7A+4D0QNoA9UC/QEyAXMA7//I/8b/DwCNAFABLAIcA9QDXgSWBHwEKQSpA14DRANhA5kDtwOqA34D8AJRAhACVwKVAsACGgNtA7kD/QMkBBgE1gNdAyEDKQNhA8gD7QP8A1oEWgQlBP8DzwPaAwwEJgQVBOADWwPfArIC1AL2AgwDVQO4A14E1QTpBMIEVwSzA/4CigJcAowC5gJDA8QDVgSTBJsE2gQDBe0EtwSIBJoEzwT8BPcEHgWEBc0FvwWaBXcFFgXJBGcEBQTFA9wDLASJBBMFogUFBhoG+gW4BUQFqATwA0MD9QLgAtUC5QJEA8ADIAQ0BBsE+wPPA4cDSQM9A2kDvQMbBLEEOgXTBRwGHgYDBqwFEwVcBPADyQPRA/UDbQQDBY8F3wXbBZsFPwX4BLYE\" type=\"audio/x-wav\" />\n",
|
|
" Your browser does not support the audio element.\n",
|
|
" </audio>\n",
|
|
" "
|
|
]
|
|
},
|
|
"metadata": {}
|
|
},
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"FR:\n"
|
|
]
|
|
},
|
|
{
|
|
"output_type": "display_data",
|
|
"data": {
|
|
"text/plain": [
|
|
"<IPython.lib.display.Audio object>"
|
|
],
|
|
"text/html": [
|
|
"\n",
|
|
" <audio controls=\"controls\" >\n",
|
|
" <source src=\"data:audio/x-wav;base64,UklGRiSiAABXQVZFZm10IBAAAAABAAEAIlYAAESsAAACABAAZGF0YQCiAAD9/wMAAAABAAAAAgAAAAEA//8BAP3//v/9//3/AAD9/wAA/v8AAP////8AAP//AAD+/wAA/////////v////7////+/wAA/v8AAP//AAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAEAAAABAAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAAAEAAAABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAEAAAACAAAAAQABAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAEAAAABAAAAAAABAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAABAAAAAAAAAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAgAAAAEAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAEAAAABAAAAAAAAAAEAAAAAAAEAAAABAAAAAAABAAAAAQABAAAAAgAAAAAAAgAAAAEAAQABAAEAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAP//AAABAAAAAQAAAAAAAAAAAAAAAAAAAAAA//8AAAAA//8AAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AQAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAABAAAAAQAAAAAAAQAAAAAAAAAAAAEAAQAAAAEAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAEAAAACAAAAAQAAAAEAAAABAAEAAAACAAEAAQABAAEAAQABAAEAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAEAAAABAAEAAAABAAEAAAACAAAAAAABAAAAAQAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAA/v8BAAEA//8AAAAAAAAAAAAAAAAAAAAAAQD//wAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAA//8AAP//AAAAAP//AAAAAAAA//8BAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAABAAAAAQABAAAAAQAAAAIAAAAAAAAAAQAAAAAAAQABAAIAAAACAAAAAQABAAEAAQAAAAEAAQABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAEAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAACAAAAAQAAAAAAAQABAAAAAAAAAAEAAAAAAAAAAAACAAAAAQAAAAAAAQAAAAAAAQABAAEAAgACAAAAAQAAAAEAAQABAAAAAgABAAEAAQAAAAEAAAABAAAAAQABAAEAAAABAAAAAAABAAAAAAABAAAAAQABAAAAAQAAAAIAAAABAAAAAQD//wIAAgABAAMAAAACAAAAAQACAAEAAQACAAAAAQAAAAAAAQAAAAAAAAACAAAAAQABAAEAAQACAAEAAQABAAAAAAABAAAAAAAAAAEAAQAAAAAAAAABAAAAAAABAAAAAAAAAP7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA//8AAAAA//8AAAAAAAD//wEAAAAAAAEA//8AAAAAAAAAAAAAAAAAAAEAAAAAAAAA//8AAAAA//8AAAAA//8AAAAA/////wAAAAAAAAAAAAD+/wAA///9/wAA/v///////v///////v8AAPz////+//z//f/9/////f////z////+//3//f/9//z//f/+//3////9//3//P////z//f/+//z////9//7//v/9//7//f/+//3//P/+//3//v/+//7//f/+//7//v/+//3//f/+//z///////z////+//////8AAP3///8AAPz/////////AAD//////v///wAA//8AAP7/AAD///7////+////AAAAAAAAAAD//wAA/v////////////7//////wAA//8AAAAA//8AAAAAAAAAAAAAAAAAAP//AAD//wEAAQAAAAIA//8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAAABAAAAAgABAAIAAQACAAAAAgADAAEAAgAAAAMAAQABAAMAAgADAAQAAQACAAIAAgACAAIAAQABAAMAAgACAAIAAgABAAEAAgACAAEAAAACAAIAAAACAAEAAwABAAIAAQAAAAIAAQACAAAAAAABAAEAAQACAAIAAgABAAIAAgABAAMAAgADAAMAAgADAAMAAgAFAAQAAwAEAAMABAAFAAQABgAFAAQABQAEAAQABAAEAAQABAAEAAMABQADAAQABgACAAQABAADAAQAAwADAAMABAAEAAMAAwADAAMAAwADAAEAAgAEAAEABQAFAAMABAADAAUABAACAAMABAAEAAIAAwADAAIAAwABAAIAAwAAAAQAAwACAAMAAAADAAIAAgACAAEAAwABAAEAAgADAAEAAgABAAIAAwD//wMAAgABAAEAAAAAAP3/AgACAAEA//8CAAQAAAABAAIAAAABAAAAAAACAAAAAQAAAAAAAAAAAAAA////////AAD9/wAA/v/+//7////9//7//v/8//3//v/8//z//P/9//z//P/8//n/+v/8//n//P/6//n/+v/3//r/+f/6//j/+f/3//f/+f/2//b/9//3//b/+f/1//n/9v/4//n/9P/3//b/+P/0//f/9v/1//b/9f/1//T/9f/1//T/9f/y//T/8//x//T/8v/0//L/8//w//T/8f/z//H/9P/1//D/9P/x//X/8//0//P/8v/z//T/8v/0//T/8//0//T/9f/1//b/9P/4//b/9//2//b/9//2//b/9v/1//b/9v/2//f/9//2//b/+v/3//j/+f/3//j/+P/3//n/+f/5//j/+//5//r//P/5//v/+P/8//3//P////3/+/////z//f/+//7//v/+/////f8BAP7///////7/AAAAAP//AAAAAAAAAAAAAAAA//8AAP//AAAAAAAAAQABAP//AQAAAAMAAgABAAMAAAAEAAEABAADAAEAAwACAAIAAwACAAMABgAAAAQABAACAAQAAwAFAAMABQACAAUABQAEAAQABAAEAAQABgAFAAcABQAGAAQACAAFAAYABwAFAAkABwAIAAgABwAHAAcACAAHAAcACAAHAAgACAAIAAcACAAJAAcACAAIAAcACAAIAAgACQACAAoACwAIAAgACQAIAAgACQAHAAoACQAJAAgACAAHAAgACQAIAAkACQAHAAcABwAGAAgABwAHAAcACAAIAAgACAAJAAYACAAGAAYACQAGAAgABwAHAAgABgAIAAYABwAGAAcABwAGAAMABwAHAAUABgAFAAgABgAHAAMABQAFAAQABAAEAAUAAgAFAAMABQAFAAEABgAFAAQABAACAAQAAQAFAAYABAAAAAUABwABAAEAAgADAAAAAAADAAAAAgAEAP//AAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA/v///////v/+//z//v////z//v/9//7//v/+//3/+//9//3//f/9//z//v/9//z//v/8//7/+//8//3/+//9//z//P/9//z/+//7//r//P/8//v/+v/8//z//P/9/////P/9//r//P////r//f/6//3/+v/7//v/+v/6//r/+f/4//r/9//5//f/9//4//f/+P/3//f/9//3//f/+P/1//b/9//y//n/+f/1//f/9v/4//b/9v/4//j/+P/2//f/+P/2//n/9//3//j/8//4//j/9P/3//T/+P/2//b/9//1//f/9f/1//b/9v/0//X/9f/1//b/8v/3//b/9P/1//L/9P/x//T/9v/1//H/9f/3//L/8//1//L/9P/v//X/9v/z//b/8v/z//H/8//y//H/8f/y//H/8P/x/+//8f/v//H/7v/w/+//7f/w//D/7//w/+//8P/v/+//8P/t//D/8f/u//L/8v/v//D/7//x//D/8v/x//H/8P/v//H/7//v//D/8P/v//L/7P/y//H/7//x/+7/8v/w//L/8f/w//H/7//w//H/8P/w//H/8f/w//P/8P/x//D/8P/y//D/8v/w//L/7//w//H/8v/w//L/8P/y//L/7//0//L/8v/z/+//9f/4//L/9v/0//f/9P/2//j/9f/6//X/+f/4//r/+f/6//r/+v/8//r/+v/8//v/+//9//3//v/9/wAA/v///wAA/f////7//f8AAP7/AAD//wAAAAAAAAMA//8AAAAAAAABAAIAAwADAAAABAAEAAAABQAFAAQABAAGAAUACgAGAAgACAAGAAkACAAHAAgACQAJAAoACwAKAAoACgAKAA0ACwALAAwADAAJAAoACgAOAA0ADAAMAAwADQALAA8ACwALAA0ADAAMAA4ADAANAA8ADQANAAwADgAOAA0ADgAMAA0ADAAPAA4ADQAMAA0ADQANAA4ADgARAA4ADwANAA8ADgANAA8ADQAQAA4AEAAQAA4ADgAOAA8ADwAPAA8ADwANAA0AEAANAA4ADgAMAA4ADwAOABEAEAAOABAABQAUABYADgATAA0AEgAOABEAEQAPABMADwARAA8ADwAPABAAEAARABAAEAANAA4AEQAKABAADwAQAA4AEAAPAA4AEQAOAA8ACwAOAA0ADAAPAAwADgAOAA8AEQANAA8ADQAOAA4ADgANAA4ACwAMAAwACgAMAAsACgAJAAsACwAOAAgACgAKAAkACwAJAAsACwAKAAoACgAJAAoACQAKAAkACAAIAAoACAALAAkABwAIAAgACgAIAAkABwAIAAgABwAIAAYABwAGAAUABwAGAAcABQAHAAkABwAIAAcABgAGAAcABgAEAAcABAAEAAQAAwAGAAUABQAFAAYABQADAAUAAwADAAUAAwADAAUAAgADAAUAAgADAAQAAwAEAAMAAwABAAIAAgAEAAMAAwAEAAMAAQACAAMAAAADAAIABAADAAMAAQACAAEAAgACAAEAAgABAAMAAgAEAAIAAgABAAEAAwABAAIAAQACAAMAAAAAAAIAAQABAAMAAAACAAIAAAADAP//AgABAAAAAgAAAAIAAAACAAEAAAACAAIAAQACAAEAAwADAAQAAgADAAQAAwABAAIAAwAEAAUAAwAEAAQABAAEAAUAAgAHAAYABAAGAAUABgAFAAcABgAHAAYABwAHAAcABwAJAAgACAAHAAcACQAJAAkACgAIAAoACwAJAAsACAALAAoACQALAAsACwAMAA0ADQAMAA0ADgAMABAADwAPAA8ADwAPABAADwAPABAAEAAOABAAEQAQABEAEAAQAA8AEQAPABIAEgAQABEAEQARABIAFAASABMAEgATABIAFAARABUAFQAVABMAEwAVABQAFQARABQAEwATABQAEQARABEAEQASABAAEAASABMAEgARABIAEAATAA8AEAARABAAEAAPABIADQANAA8ADgAQAA8AEgAPABMAEgAQABUADgARAA8AEAATABEA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ZQBqAGIAbwBvAE4AOAArAB4AHQAZABcAKgBBAFQASQBQAGEATwA+ADQAKQAkACMAFQA4AEMATgBfAFMAWgBZAEYAOgAoACoAMgAlACYAMQBMAFUAUQBJAFgAWABNAFIAHgBPAGUARwBQAD4AXQBZAFsAVwBZAF8ARgBGAEcATQBNAEsATwBYAFYATQBIAEoAUQBAADkANwAwADQAMQA2ADoARwBEAEgARQA8ADgAJwAtABoAFgAeABsAHwArADQANgA/ADUAMgAnAB8AIAAMAAcABwAMABcAIQAjACoALgAuAC0AJAAoACEAHgAZABkAGQAZAB0AHQAaABoAGQAWAAsADwAXAAkABgAQABkAEQAYABsAHAAjABsAJQAtACYAIwAhAB0AEAAMAA8ACwASABkAHwAcAB0AIQAnABwAHAAXABMAEQAWABMABgANABQAFQAQABQAGQAlABoAJQAhABcAHAAXABUAGgAeACYALAAmACgAIQAiAB0AFgAPABwADgAYACIAGgAjAB8AIAAeABUAGQAlACIAIgAcABwAGQAdABoAGAAVABEAFAAQABoAEAAZABkAGwAKAA0ADgAUAAsA9/8hABwAIwAgABwAGQAaACAAGgAdABEAEQAMAAwADgAGAAgACgANAAsACAANAAkAAwAEAAEAAAADAAIACAAEAAoABgAFAAMACgAOAAwACQAJABQABwAOAAoACgAPAAwAFAAYABEAEgASABAAEAAOABMAGAAVABYADwAOABcAEwASABAAEwAPABsAFAAVACAAHgAdAB0AJAAoACMAIwAqACsAMgAqACgAIQAjACYALQAzACsALwAuADAALAAsACwALgAoACkAKAApACcAJwAqACYAKgApACgAJQAlACUAJwAlACQAKwAmACUAKQAnACkAJQAnACcALgAxAC8AMQAnADEAMwAsACwAKwAuACwAKgAuADAALwAwAC0ALQAwADAALwArADAAKwArACkAKQAvACgAKgAoACMAKAApACcAJQAnACwAIgAeACQAIQAhAB0AIwAmACMAIgAnACYAJQApACIAIAAhACMAJwApACUAIwAtACwAJAAoACsAJwAnACkALAAnAC4AKgAsADQANQAzAC0AMQAuADQAMAAxADgALwA4AD0AMwAzADQANgA6ADoAOwA/ADwAPAA4ADYAOgA4AD0AOgA5ADgANQA5ADUAMQA2ADYAOAA2AEAAPwA7AD4AOgBCADoAOgA1ADUAOAA0AD8AOQA+ADwAOQBDAD8AQgA/AD8APAA9ADsAOAA6ADgAOQA4ADsANgA5ADQANwA3ADEALwAxADIALQAzADIANQAwADEALAApADEAMwAvACsALgAzACkALQAsACYAMAAlACUAKwArACsALwApADIAMQAtAC4ALwAuAC8ANQAvAC8AMgA5ADMANgAxADMANwA2ADcANAA2ADMANgAzADQAMgA5ADMANAAyADoAOgA3ADoAQABFADsARAA8AEEAQQBCAEQAPgBEAEAAQgBFAEYARQBEAEUAQwBCAEUAQwBDAEIAPgBBAEEAPgBAAD0APQA9AD4APQA/ADkAOQA4ADkAOgA0ADsAOgA+ADoAOQA5ADoAOQA1ADUALwAzADYALwArADAALQAuACkAMQAxAC0AMAApACoAKQArACoAKAAjACgAJwAkACYAJAAnACUAKAAlACUAIwAfAB8AIAAbAB4AHQAdACEAIAAhACUAJAAjACgAJAAiACQAIgAjACcAJAApACYAJQAmAB8AMgAwACoALwAyADAALwAzADEALQA1ADQAMQAzADQAOgA4ADkAOAA2ADMAMQAvADIANwAwADkAOgAwADUANgA3ADMANgA5ADUANwAzADAANwAzADQAOQAyADQALwAxADQANQArADgAJQAzAEEALwA+AC4AOgAyADUAOgAuADcAMgAvADMALwA0ADcAMQAxADEAMwAsAC0ALwAvACsALwAsAC0AKgArACwALQAsACwALgAoAC8ALAAwAC8ALwAxAC0ALwAtAC0ALwArACwAKQAnACgAJwAqACkAKQApACgAKAArACoALAAtACwALQAuACoALwAsACsALQAtACwALAAoACwAMgAqADAAKQAuAC4ALAAuACoAKwAsAC8ALwAzADAANAA2ADYANAA0ADAAMwA2ADQANgA4ADkAOAA5ADoAOQA/AD8APgBAAD0AQQA/AD8APAA9AD4APQA9AD4APgA7AEMAQQBBAD4APgA7ADkAOwA5ADgAOwA8ADcAOgA5ADkAOgA4ADgANwA2ADUANgA1ADMANAA1ADMAMAAzADUANgAyADcANQAzADcANAAzADMAMgAxADIAMQAxADEAMgAvADEAMAAwADAAMQAwADAAMAAzACwALwAwACoAMgAtAC8AKwAsACsALQAtACwALwAsAC8ALwAuAC8ALQAvAC8AMAAuACsALwAwAC8AMAAxACwANQAxADIAMgAyADQANAA0ADMANQAyADkAMQA0ADIANAA3ADMAMwAyADUAMwA2ADUAMgA0ADQAMQAwADAALgAwADAALwAwADAALAAvAC4AKwAvACsALQArACwAKwApACkAJwApACkAKQAoACkAJwAnACYAJwAmACkAJwAnACcAKAAoACUAJAAlACcAJwAoACUAKgAoACcAJwAlACUAJgAmACMAJgAlACcAJgAnACYAJwAoACkAKQAqACcAKAAkACUAKgAnACoAKQAoACoAJgAnACgAKAApACkAKwApACwAJwAlACoAJgAoACUAJwAmACgAKQApACUAKAAmACYAJgAiACYAIgAhACEAHwAiACEAJAAlACQAJwAkACcAJgAmACYAKAApACgAKwAnACkAJgAnACgAKAAmACQAIwAmACUAJAAkACAAIQAhACEAIgAkACUAJgAkACkAJgAnACMAIgAlACMAJgAhAB8AHQAeABoAHgAaABoAGAAVABUAEgATABAAEwALAAsACwAIAAgAAwAEAAIAAgABAAAAAwAFAAIABQAIAAoACAADAAMACQAMAAsABwAHAAwACgAJAAcACwAHAA8ABgAEAAQABwAEAAIABwAMAAYACQAUACEANwBJAE8AagBaAIYAVQD7/zMAUgAgAOL/+/9EANIAvAA/ABsAYACqAFAAAACz//n/FACc/yT/yf/n//L/d//7/sn/SwDO/+D/PwCeABsCFQFJAKwADAGpAJT/+f66/o//8f55/pX+4/6Z/6r/cv/5/wYBLAHHAR8BqAEKAoYBRwFzAGwAewAMAPH+Gv/6/kX/ev+N/tb+Vf+W/8r/5v/M/7YANAEUAcIAxgBTAYQBOwHq/y8AawD9//X/QP9S/0UAW/9Y/zv/f/8tALn/Wf+Q/1MAKACUAPT/kAAFARIBvQDwABUBmgFLAXAAhgAkACoAbf8B/1b+BwAH//X+9/4n//D/jQCO/8//8QAAAJQB6ABrAOYB0gGMAFEAuf91/7v+R/7p/PX96f1u/XL+x/7b/y4BBQFxAWgCPQJgAuoBqQHcACQBtwDu/w3/Z/+Z/hf+6/2W/VD+Jf/8/YD/LwJ1ABoFTAR+BegIAwhYCNgHnQajBLoCx/8f/kX8I/r19+z36PXc9o/3xvYz+Sf7d/zo/kUBVwIiBQMG0QUXBqUFzgTsA8ABxf+O/1H9Y/zS+6j6t/tz+8P7jfwW/vn+Iv/cAfIBgAJ1BMQDfgTVBIwDqQNTA7wBXgGTAMb/wv5l/hP+8PyM/QT97fwo/gv+iP4kADv/WgBTAYcAnAE7AbIBtAHgAdwBAwFBAUIBvQAgAV0ACQFRAfQA3QCjALcAIACg/2L/df8f/6z/Sf/6/3kATgAcAQgBbQHtAbMBqgF1AY4BvgDBALsAZwCPAJr//f5U/wL/ZP64/jT+3v6O//3+bv/w/3AAygDzALkAcgEiAqcBGQKhATABEQLxAKcACQEIAJYA7//H/lj/g/8Y/1b/5f9A/6YA+wA1ACoB4gFQATIBPwGeADQBxwAlALb/6P/6/3X/tf+L/6r//wAfALP/MgH4AGsAFAI3APIAugHD/9IA3P/b/5//Xv9u/gr/lf9R/yz/TABz/xgABgFC/2gBugCRAPYAiACEAOYAhQDp/yAAAQAWAOT/jv/A/67/0f/P/1r/lP8KAKr/gv/9/4T/RABDAAkAvv9PAID/cADz/3IAfQBRABUBt/8OAQEA7QBlALwA0AA6ABQBSgCE/zoAQf+7/+P/Yf+s/53/HgA4/yMAAACUAOkAwQDg/+8AXgBy/xsAy/4w/yP/7v6U/gX/Of82/3v/av96/14AKgDw/0MAFAD//yUAev91/wAAo/93/6D/sf/t/3AAlP8+ALUAxwDDAPcA1//qACQB2v85ALH/0f9c//L/O/9M/0IAcP+k/4v/LP8TABUApP8IAHoAWgC8/9X/DgD5/xIAfv/o/mL/RwBG/23/hgD9/xEBcgDc/1sAFQA6APj/PABoAMUAEgGpAJQAvACXAEIA+v/J/9P/n/94//D+Wf+Z/3b/t/9D/1wAuwDjAH8BbwE/AVgBfADD/xIAGwDf/8f+9f6//gn/ov/W/tn+8v80ABUB0AH4APEBFAGJAM7/n/9OABYA6f9U/3T/C/+7/rb+lf8a/1wAuwD1ABwBXwEGAgIB5wHlAPUAIgEqAMv/nf8V/3r+EP+N/p7+of+w/r/+0f6N/lIAWgDXAL8AHQGfAXcB/gBsACABrQBSANIAZgCx//UAHgC0/oH/1P4m/nv+fv4Q/8z/kgCsAJ0A0QC3ABkAtQDlAPcA0QFIAXEByQE/AecABgDx/z4A1v/R/2j/af5u/k/+6/0R/3H+c/60/7f/aACcAeACzQIYAgACBAI+AT4Akf8m/1b+OP7z/dL9Y/+C/7QAMwDzAJ8B+wBbAucBCAI/AtQBnwCO/yH/Iv5i/Zj9zP3t/Wj/d/+J/08AdABCAIwAogByAM0BhQFiAWEBQQExAG7/YP80/sH+ef4R/nn9d/6R/pn/egAiAUoDMwPLArEBGQKZAZoB2QGrADQASwAL/xD+z/29/f785fye/fH9Z/+zANAAAQEXA+4CvgLEAoMBuAFYAYwAwf8N/8H/t/72/YL9bv3w/sn+qP6z/s7/EAHlARUCogE+AjkCtwHfALIAmgDv/6n+6v1j/ZH9a/6l/mn/iQACAeoA7QDCAHUBSwHM/zb/CP8Y/sj9U/1K/c/+u/+n/woA2AD3AHsAIQAUAA0ANgE2AZwAAADQ/5D/vP7K/T/9g/3Q/fz9i/5TABIB1wFRAq8BHwHtADYAaf++/2H/Mf9n/7f/TwCbAIsBPgGRAGQBywAJAHsAZf8G/6P/bv/e/ygAcwBWACwAXwChAIABtwHTAe4BqwGRAWgBLQHVAM8AlwBGABAA9f/GAIYBUwIHA9oCSAPPAuUBwQFDATQBPQEVAWUBjwEhAY4AAADjAAYBRwGGAg4C+gF1Ah0CwwHwAZwB2v/S/tL+/vwI/Tb9mfvH+yX8t/tJ/Ff9Xfww/cb90/ye/R/+RP7H/Qf+0P2p/Jn74vpj+aX4UPg197n3Jfhp+Cb59vkQ+pn65vqJ+oT6lPu5+3H7E/yx+w37svys/Xz9X/9NALcA8gGQAhwCbwOsBPcDZwXpBgcHugeNCQ0JPQkXC5AKbQpNC3cL4wqeCxgMmgowDDQNcgz4DTcP7A3IDe0N3grYCVQJTAdoBtcF/gOmAvUBuwA1/3//AgCf/4cAVgGsAEABuAGvAJsAOgDk/qv9G/35+/X6k/lV+BP36PXV9f70rfTu9KT0G/Tf81rzrPKM8l7z0fJc8mHxCfGC8KLvLu+77C3s6urk6WDoS+ek56jnI+mJ6wntWPAL9GL2rvlF/QIAHQMgB6gIEwufDRcO3A9GECYQ4Q91DwAPVA66DXkNUw00DnoPBxDGEEYSMRPqE/AU1RSVFHEVpBT0EsQR+Q6cDHQKVwd6BKACDAFI/3n9yPyH+1X8/v1R/mL/xwF0AisEQgaUBaQHQghxCCkJPQjsB+0GEQZ8BZsDrQJlAvYAhAEgATAAPgBz/yT/Jf58/ar9ZvuZ/Av6ufft9rfzy/KI8f7uX+1U7GHqS+kT6HHnX+ZN51zm3eUj5irlreWF5o3lF+YG5nXlg+Yn57rneem47G7uQvKz9b34jP0nArYG0QpIDzASfhX8GGAaVhtAHQUd2ByWHAca2hiLF1gVFxQYEvkQtw+NDyYPhQ6ODswOVg7iDcsN1QtjC4IJTgeCBeMC7P/9/Z36OvnX96f1gvUH9ND0lPWA9qf3ovnQ/OT+7AGnBBgHpQlzDDMNzw4mEOUQzREVEvMReBGEEUMQaQ9qDrgMQQssCSoHiATSAmYA+/35+zj59/YL9MDxbe+l7bjrY+p46GLniOaC5TrlqeQO5DTkdOOO4vPhK+HV4IPg7d9u34/fRt8S4Crh7OMQ5ufqhe5F8tb4EP0YA6YJnQ6uE5oZYhy+HwciPyOZIxUkKSK/HxseqhpAGKgVvhIvED8PaA0sDPELhgvWC2kMWgz9CyMMuwu5CmwJbge5BMoCQP/8+3z50PVd9FjyifDW77vvhPA68jH0kPab+bH9EAGDBFgIbwu9DhYSyRMoFbAWQxeXF84XXRdNFi4V0hSXEsAQJRAtDd4LDgoAB2IEawI6/zT8s/nZ9a7yZPDK7AjqWOiL5QrkdOLZ4RngjeBR4MffiuEE4Z3hDeLI4ovi1uNp4+/iUuOq4lzicuLT4l3jMuf36fvs5vHx9Rf7TwNtCfwO2xUmG8kf7ySTJ3YnTSo+KVYneCWzIIwcGBkmFVEQvwzLCZwGLAYjBQYECgXoBUIHowh8CZ4JhwoNCjAJfgeJBOcBnv6c+qz3H/QN8YLvu+007L3tIu4B8DX06/aG+mgAXwQ4CDQOMhEHFKsYPBr+GdgcbhsEGiIbVBivFRMWPRMvENsQHQ0vCxILMAjTBfUE/QGv/rL9//kA9sbzmO8Y7EHqHuaX4/jh/d/o3gffB94D3zHgpuDk4vDj6uSU5mbnhedJ6Jvnd+bX5ankd+PR4jDjFuQL5jLqmuxY8Zz3z/xeBOMLKhFUGKgebyKaJ+oo/ykrKjspOybAIv0d9RjfFNYPqQthB/sE0QImAuABEAL5A/oFDgidCogLrwzKDbMNBQ3gChQIpQQcAQL9b/jD9DLxv+6y7B3r4uoi7OjtlvEH9Uv5j/75Ak0ISw0LETgVqRgHGgIc/htVGzEbWRoCGFYWwBQkEbwQaw7xC4oL1wmWB8oGIgV9AnsBGf/V+1T5hvbi8b/vNuyZ6KrmPOTl4U3hfODi3+fgruET41rkW+bz56XpMeso7PXsyuzE7F/rf+lv6GHmFOTw4j/iauFZ5CLnL+nY7nnzSfhKAf4Hkg38FJkarx7lI8smnSUpKL0mdiNFITkcJBeGE5YPnwpkB1AFowKpAo0DCwMcBQ4IxwmNDPoO8Q5aEYERlBB1D/ULGQmFBRcBPP1u+H30QfGJ7krsfevL69bsee/l8s/1lPrS/54DSAmADboQ0RRAFzUYOBl8GfIYvRfLFioU9hEvEVMOJw1RDKYKgwmJCdsH5wbSBvIEzgNLAi3/I/yU+Rf2JvPC75TsZumm553lT+TO4+zjdeRp5Q3nsucm6nXrjO3i7hbvoO+X7jrupuz56nPoDOaW45vh0N9P36fgVOGd5bzoLOxs8/n4O//2B4wNeBN+Gu0djyFKJEIlQSQ2JDwh0Rz+GRwV1BBZDYYJLwbpBBgEOgOYBAwG3AdCC8MNvQ9MEqsTHxTqFAUT8xBNDhoKBwZuARD8/veo82LwCO1B61vq/eqh7BLvH/JK9gv7ff/tBOIIXQ1WESIUVBbaF60X0xceF94VyRMjEuYP0Q3sDJkKLwplCRcJlAg3CBwIXAdrBzwGfwTEAv3/+/wW+rv2QPPr7/PswOnJ5+HltuRs5PTkc+V95lToeOnf65ntWO/o8Bfx5/G18Mrv2+4N7PPpSucm5BDiCOAX33jfGOCo45jlf+mK7xr0UvvZAkgIMg+sFc8Z8R7tIaAjLiQlJX0iwB8AHcUXnxTuEHEMHAm9BrsEvAP3A4wEkAVaCIsKrgxFD/YQ4BGzE2ET8hGDED4N5wk1BucBMf2d+Gf1oPAK7kjsdOrR6qjsze2n8C/1T/ge/dwCTQbKCrcP6hF3FMwWXBcGFzoYRxYjFG4T5BBXDpYNzgv0CIMJ8AdSBoEHMgZlBREG3QSDA5ACkwBF/q/8N/rB9n70o/Ho7gPtH+t86QDpuOhv6Cvp0unH6kPsbO2m7nfvJvAO8L/vDO+Y7Qvs2OnE51flOuN84Ujg2N+u4HbiDeXE5+vrcfCA9uT8kQJ8CDEO8xOlGLcc9R5CIVUizyI1Id0eDByeGAUWTBKfDokLEwnfBgoGIgWzBNcF/gY5CN4JLAtODMUNaw7mDXgN7wuBCVUHTgRxAG799vlY9p3zP/HM7nDufO7Z7pTwDfOf9Xn5BP5MAa8FoQoVDbwQQRRxFEcXcxifFmwXzhZ/E6kT+hFRDkAOewz0CdkJbQmuBqkHtwc9BRYGFgWEAvECZwH8/XT9TPqE99v10PIb8HTujey86u/pBOlU6O7ouukh6sfrPexc7b3uM+++75DvCu9c7uLsXesQ6fbmj+X74u/h5uBP4PbhrOP15fHoCO0q8QT3Lv0zAgcImg2LElwXMRv6HJsfiiB1IE8fRx2EGg8YfxUDEkoPlQwxCgEJ+Af7Bg8HpgevCNwJHAuZCzcNXg5zDosOUg3uC1kKFAhBBdgB7f5x+7D4sPU380nxhfBe8HPwu/GI8/n1Sfn4/AcAIwRZCPUKxg6XEZ8SbBVMFs0VjBblFQMUcxM9Eo8PmQ55DeMKQwqUCS4HGAfOBiYF3AQ/BHMCjwHdAIj+w/xu+9L4cvYs9e3xS/Aj79bs++sD6yDq3+ll6sTqJ+tm7Lfse+297qDuA+/G7gXu8+y/69vpHugT5gjkbeL/4D3gIuAR4QnjJOWw6AzsUfAV9gL7tgBFBk8LRxBAFZcYpRsSHm8fKCA6IKsewhwXG4oYThYUFBkR/g6aDe4L9QpUCtAJCwqdCt8KPgvICzkMZwyPDLALegpLCW8HYwX7AhAAkv3l+oz44fUP9MjyDvL98SnyOfPt9B/32PnT/Nf/ZgOjBnIJdwwGD50Q1hLDE8oTVhTgE7ESYxIyEZIOnA5iDNcK/QmOCNoG0AbbBeQDXATWAvUBxwGTAJb+XP6P/K/6lflo99r0GfTB8b3v+O617Drsx+tG69bqV+u26x7seO1T7aHtyO4X7m3u9+1q7MTrburY6H7nmOX64xPjf+JV4tDiXuTK5qjpme0B8Tz1HPve/0wFbgqbDgwTWhcMGlkcMh7jHjEfDR8JHR8beBn3FvIU+BLYDyAO2gwiC3wK0gn9CC8J0AlFCf8JNwogCpwKkApMCWoIcQc/BREEvQG//hP9dfou+Ir2pvQz8yTzl/Lp8mT0ZvWl92P6svzO/3EDyQUMCQQMwA1gEAoSfhI+E14TVBIhEjIRNQ+wDZUMFwpECasH1AWJBSwE1wOVAmgCFwK6AfUBTwE1APH/Gv+N/c385vqx+HX3ePUc86LxyO8s7q3tvOzW6+7rLOww7GDtle267ejute4u7wTvau6S7bvsnesq6pfoEOei5bLkRuT+47TkTOY86GvrXe6z8XL25PoEAPsEfAmnDTISuhXGGFsbyxzSHZIe2B2YHGMbYBnjFxAWkhNpEeEPLA7/DBQMxgpsCjQK9gnKCcQJuQnRCREKcQl8CLYHWgYwBaADUQF4/2L9g/tP+X73zPXQ9Dr0tfPR83T0ePVB91D5Pfvx/awAMwM9BrsIvgpTDQoPDRAZEb8RbRHEESQRWA8FD2QNwAuXCkcJEQfrBo4FuQP7A54CKgJAAs4BtgAgAXAAb/9J//79cfzf+wj6G/jV9qP0LfME8knwF+807s/tT+2W7ajtlu3s7u3upO8o8CbwffBj8PfvbO8n7kztDOy06qXpG+g859rmgeba5grouun66zHvHPKF9Tz6Lv4BA64HfAtnD04TERaZGFIaLxvUG+cb/BqnGS8YahbiFPQS0xDXDm4NTQwbCzYKNwm6CAIJtAifCIgIoQjyCPQIcwhdB7EGvQWMBPYC5gA2/279tvvG+cv3f/ah9cD0gvST9Bv1kvYe+Lr5NPxs/hwB0gNCBogIBAvXDGcOvA9DEJ8Q7RBIEGQPqw4pDeALhgrPCGsHXAYUBQMEQANxAtQBuAEyAc8AHQFoAEsAJgBN/8H+Af6P/H77X/qJ+Ar3ZvX682DyiPEU8GfvSO8A7y3vfO/v78zw2/GI8nnzx/OV9AD1D/Xh9EP0m/PR8nXxHPB07gTtCuyg6vLpmemb6eDqXew37mfwgvOd9jr6v/6zAdAFjwmlDLQPdhLJE3oVsxaPFq0W9BWtFIwTlRKNEGMPxg1ZDI8L9AobCpUJuglVCQAKFwomCrcKNgtDC0YLtQr1CWIJUAjeBkMFbgOVAfD/qv3t+0r6Avkh+GL31/YH9+P34fhV+t/7qf0kACECbQR8Bm8IWQrDC6IMcQ3mDe0Nyw0iDS8MJQsNCpkIbgckBs4E6QPkAikCqQEqAfEAyQDLAK8AxACfAFMANwCn/83+z/2m/D37DPpH+IX2HvWN84DyE/FN8Jvvne/L7xvw0fCR8Q/z5PM69Sn2HvcG+GT4ZvhU+Pv3Gvdf9tX0PPMR8krwt+5J7cXrBOvt6n/q9Oo97Jjt1u9B8nr0efdx+3P+0gEIBcIHwAqsDTEP2hBaEsUScxM6E4kS6RFrEV8QRQ9MDhUNhAwiDJsLLwtVC0ULiwv7C/sLbAwTDeMMEw3EDAsMswuRCmYJ4QcaBl4EsgKfAP7+Rf3W+5b6hfmy+IT41/hE+UT6NPtz/Dz+GADyAcwDkAUXB84IAwrpCp8L7wv/C/oLPwtNCl4JNwgTB6wFGwS9AqgBvwC4/wn/YP49/iv++P0z/kf+fP7l/q7+tf6A/t39pf2a/Mn7s/q8+ZT4u/fF9tb1QvXF9JP0qvSl9Av14vVR9nn3Lvjs+Mj5cPoF+yn7JPuM+ir6d/k6+Bz3V/Xj82Hyw/C67lztQ+uM6sXpBuk26cfpNevT7Ebv9/Dq8/32dvq9/QkBwAMnB+8JNAyPDsIPkxGVEh4T8BIRExoSMRKIEWAQxg/NDkcO3g3RDboMTg3aDPIMPA3/DAwNmA2DDR8N7AzmC0MLkwo+CawHMgZbBNoCHQFy/5/9b/xb+1v60flr+bP5b/os+wz8Bv2B/j8A0wFwA84EEgajB5EIUAnnCRMKEQoQClQJPgh5BzQG/gT0AzYC3ADw/63+3f0W/Ub8y/v0+3f7oPvL+8H7KPyE/E38Yvxj/NL78vtV+6r6SPqd+fX4nPgD+Hz3ivc19zr3TPdn9xH4PvjY+FD5vvlm+sP66Ppg++/6Pfvf+hf61vmN+Pb30PaF9Un04/Lc8ZPwdu8y7lXt2uyq7F7szOxY7evu1vAw8oH0kfav+c/82f9SAjwFJgg1C6QNhQ88EbgSUhTRFCYV2xTSFHYU9hPjEqER1xD0D0QPcQ6IDbIMpgwzDBUMwwtfC28LegsdC58K/glCCaUIvwdgBtgEfQP6AckAC/+X/Tr8MPtn+pr5Kfkn+ZL5VfoA++v7BP1y/uL/KwFRAlcDjgRYBeEFWAZeBkIGKwZmBYQErQNxAmsBWwAL/8X98PwC/DP73/ob+uz58Pn4+Rr6ofrX+nf79vtX/Mn80fxY/QP9ZP3F/KH8PfzW+7/7A/sP+3n6mPqS+p76rfoE+2j7u/sy/Ir89vxB/aP9hP2h/U/97/yl/K374/q7+aD4kPdB9g71vPOa8obx0PC67y7vcu537nTu7+6S737wfPLy8yL2KfhE+uz8AQBQAiQFaQfcCUcMRA7uDzMRuBKZEzYUZhQjFPcT1xMwE1ESXRFmELsPGQ8SDh0NhAzQC1gLuQrwCZAJWgnfCFIInAfKBj0GmAWbBH8DVQIeAR4Awf6Y/WD8W/uj+uz5WfkC+Uf5nfkZ+qv6MPs+/G39hP6E/3AARwErAucCXQOWA7IDowN0Aw0DSQJ3Ac8A9P89/yv+QP2N/Pb7nfv1+rz6a/qO+rH65foT+4r7/fuy/CT9fP0S/kP+6P7m/gz/G/8n/yH/B//p/oT+of55/nL+cf5p/rL+t/79/iL/SP9W/2//av9p/wb/sf4+/of93vzu+/n6v/mj+H73RPY79RH0DfNP8qPx9/Cc8BPw8u898G7wwfBu8Tvyp/OR9d32pPi0+uv8cf8MAs8DSAbTCAELIQ3MDhwQdhERE0wTuhOwE2ATKxPOEsYRwhDyD78OHQ4EDeILvwoRCiYJcAi4B+kGgAYpBpAF9gRYBLEDUAOSAtMB1QAKADr/Uf5j/X78lPv4+oD6C/q0+Zn56vlb+tb6VPv9+/L87f3b/qb/dAA7Ae4BZQLBAgwDIgM+AwYDnAI0ApoBDQGPAM7/Cf9//uD9aP0w/ab8c/xu/Ej8PvyR/If8rfxg/RL91/3c/fr9eP6L/qL+v/7l/q3+Hf/L/u/+2P7p/vT+JP8Y/zr/pv92//f/CAAeADYAOwDw/+v/ff/k/p7+5P0J/VL8avtY+qb5jviQ98L2w/Ut9Zf06vOM82DzEPMm8wHzI/NR89bzPvTe9Nj1ovYI+FH5mPr1+8n9W/9BAQYDrAROBj4IsQkiC3sMWA1oDiYPlQ+WD64PXg8fD6IO5A0jDW8MugvgCi8KRAl1CN0HSgevBjYGsQVDBQoFqQQOBLMDNwPBAm0CpwEEAW4A2/85/4b+x/1M/dH8dPw1/AL88/sV/Ez8ovwd/ab9P/73/pT/JQDAADsBqAEXAj8CZwKTAmICPAIaApgBKAHDABoAj/8P/2j++f2l/SD91vyu/G/8YvyF/G78mvzY/AP9Rv2j/c79DP5l/mz+if6m/rf+sv7p/r/+sv7c/sT+zv79/gn/J/9i/5r/yf8BAEoAYACaAJ0AgwCSAEUA9/+g/xP/fP7e/Sf9U/yC+7364fkv+Xv4zfdb9+f2h/Ze9jL2HPYv9j32Yvau9t72UffA9274EPnd+db6vvv4/A7+Tf95APgBHQOCBLwFzgYCCA4J7QmuClMLngsjDDAMKQz/C7cLcAvoCnMK4QlCCb0ILgiIBxMHdQbyBaoFIAXPBH0EKgTUA6gDMAPKAn4CJQKjAVwB3QB4ADcAwf90/xX/3v6P/o3+Y/5u/qf+xP4h/3j/0f9LALwAHQGYAewBQQKDArUCzgLsArwCpgJlAhMCsAFeAc0AdQDo/2v/Hf+N/l3+8P3R/Y39av1Z/VX9U/1t/Wr9j/2a/c39yf3C/er9rP3t/cD9s/2y/bX9ov24/cv9zP0L/h7+TP6C/sL+5f4h/2n/ev+d/8T/pf++/6L/aP9I/+z+rv5F/t79bP3+/Jf8KPzI+2j7F/vY+pb6X/pO+ib6GfoQ+hT6Ivor+kP6QPpn+lz6rvrE+vz6QfuR+/r7fvwJ/Yb9bf7p/sH/lQBjAR8CIwO9A34ENQW/BU8GxQYRBygHdgdbBycHCAfdBnkGKAbGBU8F/ASlBB4E5gOXAzYDDAPtAqwCigKMAmMCYAJZAiQCHAImAu8B4QHQAaABkgF9AVsBRAFPAT4BQwFVAWMBbAGjAd8BEAJfAqkC1AJAA20DmgPhA+wDEQQVBP4D8wPGA4IDRAPhAoMCEwKXATEBrwBEANv/Yf///rn+U/7//cn9ff1V/T/9CP0H/fH86vzs/Nf82/zT/N382PzV/Ob86Pzu/Ab9/Pwd/S39Rf1q/Xz9nP26/en9B/4g/kn+Vv5l/nP+ZP5s/lv+RP4u/gL+2v24/W39Of31/Ln8hPxC/Bn85/vI+7z7n/uN+5P7ivuh+7P70fvn+wH8FPw3/Fv8dfyj/N38C/1C/ZD9zP0t/o3+4v5Q/9H/RgC3ADcBrQE1ApsCCgOCA9MDMgRsBKYE7ATOBPQE8QTlBNEEwgSPBHoEUgQKBAUE1QOoA4QDcQNNA0IDOgMsAzEDWANJA1cDZAOFA3gDswOlA7cDzgO2A+MDzgPSA84DygPAA8UDpwOkA5wDkAOFA24DWwM4AyADAAPPArYCjgJXAkAC/AG1AYUBNgHZAKEALwDj/57/MP/e/o3+LP7V/ab9P/30/M78f/xL/Cv87/vE+737mPt8+377Yftm+3D7aftz+477q/vA++b7AfwZ/Ej8cfyi/M388Pwh/T/9b/2Z/bz95f0B/hH+Mv5M/l/+df51/oj+jv6F/o7+k/6D/nr+af5V/mD+Rf4s/ir+JP4f/g3+Ff4b/h7+Nf5D/lT+c/6U/r7+6f4H/y//aP+V/83/8v8qAGIAkwDDAOsAIgFaAYUBrQHRAfIBGQI6AlICagKZArMCuwLYAucCAQMhAzIDLQM6A0cDVANYA2MDYQNnA3wDbgOHA4cDjwOTA44DpQOpA7kDtQPAA80DzQPZA8IDwwO6A7cDpgOlA40DggN2A18DQAMgAwED0wK0An0CSwIbAu8BrAF5ATEB+AC4AH4ASwARANn/l/9l/x//5/6u/o3+X/4p/v79zf2k/X79UP0v/Q/96fzS/Ln8qPyZ/Ir8gPx//Hv8ePx6/Iv8i/yi/Lr80fz1/AX9Jv1A/WL9iP2p/cb97f0I/iD+Pf5W/nH+kP6j/rz+z/7r/gb/H/89/1v/Zf+Z/7r/yP/t//v/FwAkADcAUQBgAF4AYQBmAGYAZwBmAF8AXABaAFMAUABFAEkARgBFAEoAUwBdAGAAZQB2AHwAjgCWAKgArAC0AMMAwgDQAMwA2gDeAOQA7ADjAOcA4gDrAOIA4wDeAOIA4gDgAN8A9QAEAQYBFQEoATIBNAFHAT8BRgFNAUoBRAE9ATkBLQEnARMBDgH+APQA7gDiAN8A2wDSAM0AygDRAM8AxADFALwArgCnAJgAiwB6AGkAWQBIACwAFQD4/+H/0P+x/6T/k/+D/2z/VP9V/1D/N/8y/yD/F/8M/wX/9f7r/uL+0f7N/sH+wf68/rj+tP66/rz+wv7G/tb+5v74/g//Iv83/1T/bP+D/57/rP/F/9j/8f8CABUAJwA1AEkAVgBkAGsAfACBAJAAmwCqAK0AsACzALoAtgC2ALIAqACpAKEAmQCPAIgAhACAAHsAdABsAGYAXwBSAEgAPQA0ACwAHwAXAAcAAAD///n/9P/v/+z/5P/n/9//3v/X/9z/2f/a/97/2f/f/9//4f/n/+j/8P/1/wgAEQAOABIAGAAeABwAHgAdAB4AJgAoACkAJwAqAC4AKQApADAAKwAxADYANAA+AEMASABIAEkATABMAE0ATQBQAEoARgBDAD8APAA6AC8ALAAhABwAGQASAAYAAADx//P/6//c/9n/z//L/8T/xf/C/77/u/+y/63/q/+n/6v/p/+j/6T/oP+l/6L/oP+g/6H/mv+b/5r/lf+b/5z/oP+k/6L/rP+t/6//tP+4/8D/yf/T/9//4//z//r//P8IAAoAEgAbABoAFQAaABsAGwAgACMALQAzADkAQgBIAEIASwBTAEsATgBQAFEAVQBXAFAAUABTAFAAUQBJAEQAQgBBADsAOQA0ADAAKgAnACEAFQAVABUADQAKAAUAAAD8//v/8P/s/+X/6P/q/+T/5f/i/+v/7P/w//n/+v8AAAIADAATABcAGQAeACYAKQAvADkAOQBDAEgASwBQAFMAVwBZAFoAXABaAGQAYgBbAF0AXABeAFQATQBHAEEAPwA6ADIALAAkABsAFQALAAMA/P/0/+3/6//f/93/2f/Z/9z/1v/Q/8//xP/G/8r/w//H/8X/y//K/8v/z//L/83/zP/K/8n/x//G/8T/wP++/7j/uf+1/7T/sf+q/6n/pf+i/6L/m/+Z/5f/mP+W/5j/mf+V/5f/l/+a/5f/m/+g/6T/pP+q/7L/tP+9/8P/w//K/87/1f/h/+L/7P/u//z//v8DAAwAEwAXABcAIwAkAC0AMgA4AD0APABCAD4AQgBCAEYASABDAEQAQgA8ADsAOgA9ADwAPwBBAEUARgBDAEkAQgBHAEgARgBOAEcASABNAEsASQBJAEYATABNAFIAUQBRAFUAVwBZAGAAYABeAGAAWgBbAF0AXABVAFUAVABOAFEASABFAD0AOwA3ADYAMAAmACcAIQAaABgADQASABIACQALAAYAAAD8//n/9//2//X/9f/3//P/+//7//r//f/3//z//v///wAAAQAAAAAAAQABAAAAAAAAAAAAAAD7//z/9v/y//H/8f/t/+v/5//m/93/3P/X/9T/0f/K/8v/yf/F/8X/xv/D/8P/xP/G/8T/yv/K/87/z//V/9j/2v/f/+P/7P/u//f//v8CAAUACwAOABYAGAAdAB8ALQAuAC0AMQA5ADkAOwBDADwAQQBBAEYARgBKAEkARwBGAEIASQBBAEAAQAA9ADoANwA3ADgANAAzADMANAAzADMAOAA6ADgAOAA0ADsAPgAzADsANQAzADUAMwA5ADUAOAA0ADYAMwAxAC8ALAAtACUAIQAaABsAGQAXABUAEwAXAAwAFgAXAA4ACQAPABAADgAWABEAEAARABQADwARABIAEwAMAAsABwABAAEA/P/4//X/9f/w//L/6//q/+v/5//j/+H/3//b/9n/1v/W/9n/0//T/9b/1P/S/9X/0P/Q/8r/wf/Q/8b/xv/C/7//vv+2/7z/wP/A/8L/xP/A/8L/vf/A/8P/vv+8/8H/wv/A/8b/xv/L/87/zP/S/9H/1v/c/+H/5P/v//T//P8AAAcADAANABMAFwAWABwAHgAkACwALAA0ADcANgA9AEEAQgBFAEYATQBOAEsAVgBdAFoAWwBVAFQAUgBOAEsARQBGAEAAQgBBAD0APAA4ADkANQA2ADMALQAsACQAHgAcABcAFAAQAAwADAAMAAwACgAFAAQAAwABAAMAAwAEAAAAAgAAAAIAAAABAP7/AAACAP//AgAAAAAAAgACAAIABAADAAMAAgAEAAIABAAHAAYACAAHAAcACQAJAAkACgAJAAoACAAHAAMABQAAAAQAAgD+////+v/5//n/+v/3//j/9//3//T/7//y//T/7P/s/+3/6v/t/+r/6P/r/+z/6//s/+n/6v/o/+n/7P/s/+//8P/x//j/9P/2//f/+P/+//7/AAADAAIABwAMAA0AEwAVABoAIQAgACIAJQAsAC4ALQAzADMANgA2ADoAPgA9AEMAPgBKAE4ATQBPAFAAUABbAF4AVwBXAFwAWwBTAFUATwBRAEwASwBIAEEARgBDADwANwAvAC0AKgAmACQAHgAiABsAGgAVABQAEgAQABAACwAOAAgABwAHAAQABgACAAAAAgAEAAIAAQABAP3/+v/8//v/+f/5//z/AAD9/////P/7//f/+P/4//b//f/5//r//v/6//j/+f/x//n/+P/0//b/9f/z//H/8v/x//D/8f/x/+3/8P/x//H/7//w/+//7v/v/+//7f/s/+3/7P/t/+3/6f/w//D/8P/0//L/8v/y//T/9P/y//L/7//t//L/8P/0//L/9P/1//b/+v/5//7/+f/9//7//v/9////AQADAAMAAgAHAAMACAANAAcACgAJAAoACQALAA8ACQAMAAoADQAKAAoACAAHAAkABgAGAAQAAAACAAEA//8CAAEA/v/6//v/9v/3//X/8f/x/+3/7//x/+z/6v/p/+b/5v/j/+P/3v/e/9z/3P/c/9r/3P/Y/9f/1//X/9b/1P/R/9T/z//R/87/z//P/8r/0P/M/8//zv/O/8//0//R/9P/1v/V/9P/1v/Z/9T/2v/Y/9r/3P/Z/9r/3P/b/93/3f/e/97/3P/f/9//4v/g/+H/4v/k/+T/5P/l/+f/6P/o/+n/6//q/+r/6//r/+v/6//n//D/7v/v//P/7//w//T/9//0//P/+f/7//n//f/6////AAD//wAA/f8AAAIAAgACAAIAAQABAAMAAgAGAAgAAwAHAAYABAAFAAgABwAKAAoABwAHAAgABgAGAAYABQACAAcABgAAAAIA/v8AAP3/+f/8//v/+f/8//n/+//4//b/9P/y//P/7f/y//L/8P/w/+//8P/u/+n/7f/q/+f/5//o/+X/5P/l/+P/4v/k/+T/4//j/+P/5P/h/+P/4P/j/97/3f/f/97/3//b/97/3//e/97/4f/i/9//3//d/97/4v/h/9//4P/e/9v/3//f/9//2//h/9//3v/h/+L/5v/g/+P/4f/i/+X/4//n/+f/5v/p/+j/6f/p/+n/6f/s/+7/7P/t//D/9P/y//X/9f/4//f/+v/6//n//P8AAAAA//8CAAEABAAEAAoABQAIAAgACgALAAkADQAMAA8AEAARABIAEgANABUAEwARABQAEgATABIAFAAVABMAFgARABMAFgASABEAEgATABEAEgANABAAEAAPAA0ABgANAAgABwAHAAYABQAGAAYAAAABAAEA/P/8//n/+f/7//b/+f/2//T/8v/y//H/8f/u/+v/7v/v/+v/6f/r/+v/6f/o/+n/5P/l/9z/5f/q/+L/5P/h/+f/4v/k/+H/3//i/9v/4f/k/+L/3//i/+L/4v/k/9//5P/k/+T/4//h/+X/5//n/+f/6v/n/+v/7f/q/+z/7f/r/+7/6P/w//H/8f/1//D/9P/y//T/9f/0//b/9//1//b/9//3//r/+f/7//f/+v/6//f/+f/4//X/9f/x//n/9v/z//X/8v/1//L/8v/y/+7/8v/z/+7/8v/z//X/8f/x//D/8f/y/+//8P/v/+//7v/w/+v/8P/t/+//7//p/+3/7f/v/+r/7f/r/+r/6//p/+j/6P/q/+n/6f/q/+n/6P/o/+f/6v/n/+r/6P/r/+f/6v/r/+b/5f/r/+r/5f/n/+X/7P/o/+v/6f/n/+3/8//q/+3/7f/q/+//6v/y//L/8//x//H/8//w//P/8//y//T/8//y//L/8//0//T/8//2//L/9//7//X/9v/5//n/9//6//f/+v/6//v/+P/7//n/+v/+//r//v/5//3////9/wAA///+/wIA/v8AAAMAAAD//wEABQABAAcAAgACAAUAAQAEAAgABgAHAAcACAAIAAkACAAHAAgABgAJAAcACQAKAAgABgAKAAgACgAGAAoACwAFAAwABwAMAAoACAAKAAkACgAJAAoACgALAAUACgAKAAcACwAJAAsACgALAAgACwAKAAkACQAIAAcACAALAAoADAAJAAoACAANAAgADAAMAAkADQAMAAsACwAOAAoADgALAAwACgAMAAwACwAMAAwACwANAA0ACgAPAA0ADQANAA4ADgAOAAoADwAPAA0AEQAPAA8ADgARAA8ADwARAA4AEAAPAA8ADwAQAA8ADgAQABAADwARABEADAAQAA8AEQAOABAADgAOAA8ADAANAAkADAALAAsACgAJAAkACQAIAAgABQAHAAcABgAHAAgABAAHAAcAAwAEAAIABQAEAAUAAQADAAMAAwABAAMAAgAAAAIAAAACAAAA/v8AAAAAAAAAAP7/AgD///3//v/+//3//v////v//P/9//v/+P/5//r/9//5//n/9v/4//f/+P/3//j/+P/4//j/+P/4//b/9//2//j/9//3//b/9P/2//b/9v/2//X/+P/2//b/9v/2//b/9P/2//f/9//4//j/9f/4//b/+P/3//f/9//2//n/9//5//j/+P/4//f/+f/5//j/+f/5//n/+v/5//n//P/5//v/+//6//v/+v/6//r/+//6//z/+f/7//v//P/8//r//f/5//3/+v/5//v//P/8//v/+//9//v/+//8//r//P/7//z//f/7//z//f/7//3//f/8//3//P/8//v//v/9//7//f/7/////f/9//7/+//9//3//P/+//3//f/+//3//f/7//7//f/9/////f/9/////v/+/////////////v////3////+/wAAAAD+/wAAAAD/////AAD//wAA//8BAAAAAAABAAAA//8AAAAA//8AAAAAAAAAAAAAAAABAAAAAQD9/wIABAAAAAMAAQACAAIAAQABAAEAAQACAAAAAgACAAIAAgACAAMAAQACAAIAAgADAAEABAAEAAMABQADAAUABAAFAAMABAAEAAQABAAGAAMABgAHAAIABQADAAQABAAGAAIAAwADAAIAAwADAAQAAwAEAAIAAgABAAEAAgADAAEAAQAAAAAAAAACAAEAAQABAAAAAgABAAAAAQABAAEAAQABAAAAAQACAAAAAQACAAMAAQACAAIAAwAEAAIAAwACAAMAAwACAAMAAgADAAIAAgADAAEAAgACAAEAAwACAAEAAQAAAAEAAAABAAAAAAABAAIAAgAAAAIAAQAAAAIAAAACAAIAAwAEAAQAAgAGAAQABQAEAAcACAAGAAcAAwAFAAQABgADAAEABAADAAQABQAFAAcACQA=\" type=\"audio/x-wav\" />\n",
|
|
" Your browser does not support the audio element.\n",
|
|
" </audio>\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": [
|
|
"<IPython.core.display.Javascript object>"
|
|
],
|
|
"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": [
|
|
"<IPython.core.display.Javascript object>"
|
|
],
|
|
"application/javascript": [
|
|
"download(\"download_3db68d78-6807-4b91-a375-6120a8095472\", \"hey_marco.onnx\", 206276)"
|
|
]
|
|
},
|
|
"metadata": {}
|
|
},
|
|
{
|
|
"output_type": "display_data",
|
|
"data": {
|
|
"text/plain": [
|
|
"<IPython.core.display.Javascript object>"
|
|
],
|
|
"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": [
|
|
"<IPython.core.display.Javascript object>"
|
|
],
|
|
"application/javascript": [
|
|
"download(\"download_bc5d9c4f-dc14-43d1-aacf-8c09ee4bde00\", \"hey_marco.tflite\", 206992)"
|
|
]
|
|
},
|
|
"metadata": {}
|
|
}
|
|
],
|
|
"execution_count": 10
|
|
}
|
|
]
|
|
} |