{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Youtube ASR + Diarization + SRT format\n", "\n", "Let say you want to transcribe long audio from youtube and detect speakers using TorchAudio and save to SRT format, malaya-speech able to do that." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "This tutorial is available as an IPython notebook at [malaya-speech/example/youtube-asr-diarization-torchaudio-srt](https://github.com/huseinzol05/malaya-speech/tree/master/example/youtube-asr-diarization-torchaudio-srt).\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "This module is not language independent, so it not save to use on different languages. Pretrained models trained on hyperlocal languages.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "This is an application of malaya-speech Pipeline, read more about malaya-speech Pipeline at [malaya-speech/example/pipeline](https://github.com/huseinzol05/malaya-speech/tree/master/example/pipeline).\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Download youtube video\n", "\n", "I use https://github.com/ytdl-org/youtube-dl to download,\n", "\n", "```bash\n", "pip install youtube-dl\n", "```" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "\n", "os.environ['CUDA_VISIBLE_DEVICES'] = ''" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "filename = 'LIVE - Perutusan khas oleh Perdana Menteri Muhyiddin Yassin-YzjNAOSALU8.mp3'\n", "url = 'https://www.youtube.com/watch?v=YzjNAOSALU8&ab_channel=KiniTV'\n", "\n", "if not os.path.exists(filename):\n", " import youtube_dl\n", "\n", " ydl_opts = {\n", " 'format': 'bestaudio/best',\n", " 'postprocessors': [{\n", " 'key': 'FFmpegExtractAudio',\n", " 'preferredcodec': 'mp3',\n", " 'preferredquality': '192',\n", " }],\n", " 'no-check-certificate': True\n", " }\n", " \n", " with youtube_dl.YoutubeDL(ydl_opts) as ydl:\n", " ydl.download([url])" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "`pyaudio` is not available, `malaya_speech.streaming.pyaudio` is not able to use.\n" ] } ], "source": [ "import malaya_speech\n", "from malaya_speech import Pipeline\n", "from malaya_speech.utils.astype import float_to_int" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load VAD model\n", "\n", "We are going to use WebRTC VAD model, read more about VAD at https://malaya-speech.readthedocs.io/en/latest/load-vad.html" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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9W/R2NjYa3tDQwMADHi/DndS40DR6/W9tl+/rJ6enpDJZOjo6IDRaLQbt6mpya6Nz2UaSOXl5QgJCbFrtwvXvHnzUFtbi9zcXKcUxjez2YycnBwEBQVh3bp1UKlU3Fba2rlmbzo6OpCXl2fTdu7cOdTW1kKj0QzoXutOaxwoRqMRZ8+etWnrbVkffPBBAMDevXttxtXpdLhw4YJNG9/LNFC0Wi0OHz6M+fPn271mF664uDjMmDEDb7zxhstfDh0Ibm5umDVrFurq6rBp0ybodDq0t7cjMzMTn3766U1/Ty6X4/XXX0dubi5MJhPy8/ORnp4ODw8PvP/++zbjpqenQyAQ4PLly06tcaBIpVL8x3/8B06cOHHLZd24cSP8/Pzw/PPPY//+/TAajSgqKkJ6errdoSLfyzRQ/vCHP0CpVOKhhx6yf7G3E7S8vDzy8PCgDRs2OOwk8G7l5uZyN4RahzfeeIPy8vLs2t9++206evSoXfv69euJiEir1dLTTz9NoaGh5O7uToGBgbRmzRp69dVXuXHj4+O5eVsvOBQVFVFycjLJZDKSSCSUmJhI2dnZdrXOnj2bvL29qaen55bLdP3NstcvU39qHKi/y4037p48eZKSkpLI29v7lst64cIFSktLIx8fH5JIJDRp0iTKyMigOXPmcNN78skn7+jv7mp++uknEggE9P333/f6+k1v3P34449JIBDQhx9+6LDiBqv+XM1rbm4miURCTz31lIOrYpzpl19+IbFYTL///e9vOs4t74p/5513SCAQ0EsvvXTbre69pK/hslgstGrVKgoMDGQf0RlCPv74Y3J3d6c1a9aQ2Wy+6Xi3/cjJli1byMvLi+Li4ig/P39Aixys+hquq1evUkJCAp0/f94JVTGOVltbSw8//DAJBAJ65ZVXbhksoj5+WPLixYuUlJREIpGIXnnlFWpvbx+QYgebW50TMUOXxWKhr776ivz8/GjEiBF04MCBPv1enz+JbDabafPmzSSTyWj48OH02WefUWdn5x0XzDCuzmKx0LZt2yg+Pp7c3d3ptdde69eOpd8d1FRVVdEzzzxDnp6epFar6f3336e2trb+ToZhXFZPTw999913FBMTQ0KhkB5++GEqKCjo93TuuGu16upqeu6558jLy4sCAgLo5ZdfpuLi4judHMPwrqamht566y0aMWIEubm50YoVK+7qfPmuOwWtq6uj9evXU1hYGAGghIQE+vLLL3u9eZNhXE1XVxdt27aNUlJSyM3NjZRKJa1bt44uXrx419MesO6sLRYLDhw4gC+//BI7duyAu7s7FixYgLS0NCxYsGBQ3gzMDE0dHR04ePAgduzYgZ9//hmNjY2YO3cunnjiCaSlpQ3Yo2Qd8iCGpqYmbNmyBdu3b8fhw1n25YIAABaASURBVIchEAgwa9YsLFmyBIsXL8awYcMGepYMc0vNzc3Ys2cPduzYgb1798JkMmHSpElYsmQJVqxYgbCwsAGfp8MfIdTc3IwDBw5g165d+Pnnn9Ha2orIyEju2Ulz5syBn5+fI0tg7kHt7e3cc7sOHDiAI0eOwGw2Y+rUqVi6dCkefvhhqNVqh9bg1IffdXR0cM9OOnToEM6cOQOBQIC4uDjMnj0biYmJmDx5stOen8QMHa2trTh16hSOHDmCzMxMHD9+HJ2dnRgzZgxmz56N2bNnY968eU49PeH1sa1NTU04fPgwF7aioiIAwPDhwzFlyhTuubf33Xef3Yf7mHtXd3c3zp07xz3iNy8vD8XFxbBYLAgPD0dSUhIXqN4+Z+UsLvFMZKumpiacPHnSZtBqtRCJRIiJiUFsbCw3xMTEOHy3zvCvsbERBQUF3MPHCwoKUFBQgPb2dvj4+CA+Pt5mQ8xnmG7kUuHqzeXLl3HixAmcOnWK+yPX1tYCuPbxamvQYmJiMHLkSIwaNQqhoaHs8a+DTE1NDcrKylBWVobi4mLuf3316lUAgJ+fH/fA+QkTJmDy5MkYO3YsL8867iuXD1dvmpqabLZm586dQ3FxMdcHg4eHByIjI7mwjRw5EiNHjkR4eDjCwsIgkUh4XoJ7T1dXF6qrq3HlyhUuRGVlZSgtLUVZWRnXX4aXlxeioqK4jaY1UIPxCvOgDNfN6HQ6u3+adbi+DwelUgm1Wo2wsDCEhoZCrVZDrVYjPDwcAQEBCAgIYFcw+8FgMKCurg4NDQ2orq7mQlRVVcX9XFdXx/WJ4e3tzW3wbhxc6bDubg2pcN1KU1MTqqqquH+69R9fWVmJ6upq1NTUoKurixvf3d0dKpUKKpUKQUFB3PcBAQFQKpVQKBTcIJfLIZfLoVAoBuwNSD50d3dDr9dDr9ejpaWFG/R6PZqbm1FXVwetVgutVouGhgbU19dDq9Wio6ODm4abmxuCgoIQHh7ObbhCQ0MRFhbGbdAG/NnDLuqeCdftEBG38tTX16OhoYFbkaztOp0O9fX1aGpqsusGzEosFnNhk8lkkEgkEIvFkEql8PDwgEwmg0gkglwuh1AohK+vL/e7Xl5evYbz+nGsWltbYTabbdp6enpsuqS2jtPS0gKLxYKWlhaYzWa0traiu7sbRqMRbW1tXKBMJlOvyySTyaBQKGw2Mr1tdAIDAxEUFMQe2PEvLFx34fot+/VbfOv3BoMBHR0daG9vh8lkQldXFwwGA3p6emxWeKu+BMaqL0G8Pshubm5QKBQQiUSQyWTw8PCAVCqFl5cXt9e1bhSsP1sHV75o4MpYuAYJnU4HlUqFgwcPYvbs2XyXw/QB2yQxjIOwcDGMg7BwMYyDsHAxjIOwcDGMg7BwMYyDsHAxjIOwcDGMg7BwMYyDsHAxjIOwcDGMg7BwMYyDsHAxjIOwcDGMg7BwMYyDsHAxjIOwcDGMg7BwMYyDsHAxjIOwcDGMg7BwMYyDsHAxjIOwcDGMg7BwMYyDsHAxjIOwcDGMg7BwMYyDsHAxjIOwcDGMg7BwMYyDsHAxjIOwcDGMg7CH37moxYsX4/Lly9zPZrMZly5dglqthpeXF9cuFotx6NAhyGQyPspkboE9vNZFjRo1ChkZGbhx21deXs59LxAIcP/997NguSh2WOiili9fbhesGwmFQqxevdpJFTH9xQ4LXVhkZKTNoeGNRCIR6uvr4efn58SqmL5iey4XtmrVKri7u/f6mkgkwoIFC1iwXBgLlwtbvnw5uru7e33NbDYjPT3dyRUx/cEOC11cbGwsCgsL7c6/JBIJdDqdzZVDxrWwPZeLW716Ndzc3Gza3N3d8fDDD7NguTgWLhe3cuVKmM1mm7bu7m6sWLGCp4qYvmKHhYNAQkICjh8/DovFAgBQKBRoaGi46cUOxjWwPdcgsGrVKggEAgDXDglXrFjBgjUIsD3XINDU1ITAwED09PQAAI4ePYoZM2bwXBVzO2zPNQj4+flh7ty5AIDg4GAkJCTwXBHTF+zeQh51dHSgra0NLS0tMJlM6OrqQnt7Ozo6OmzG0+v1GDVqFPbu3YvJkyfjp59+gkKh4A4VgWuHi97e3nBzc4OPjw9kMhm8vLwglUqdvVjMv7DDwgFSV1eH6upq1NXVQafTobGxEVqtFjqdjvtZp9PBaDTCZDKhpaXltvcODhS5XA4vLy/IZDIolUoolUr4+/tDqVRCpVLB398f/v7+UKlUCA8PR1BQkN3lf6b/WLj6wGKxoKqqCqWlpSgtLcWVK1dQXV2NyspK1NTUoLq6Gl1dXdz4Xl5e3AocEBBgszLLZDJIpVJuhZdIJPD19YVEIoFYLOb2QNfz9vaGu7s7/vSnP2H9+vWwWCzQ6/U241j3eN3d3TAajWhtbUV7ezsX5Pb2dhgMBi7k1q/WDYDBYOCmJRKJEBQUhLCwMKjVaqjVaoSFhWHUqFEYNWoUIiIi2AWVPmDhuk5nZyfOnz+Ps2fPoqSkBGVlZbh48SLKysrQ2dkJAPD19UVERAS3woWEhHDfq9VqDBs2DBKJxCH19fT0QCRyzJF8Z2cn6uvrUVVVhaqqKtTU1HDfWzck9fX1AK4dgkZERHBhGzNmDDQaDWJjY9nHX65zz4arpaUFeXl5OHPmDM6ePcsFqqenB15eXoiKiuJWnusHf39/vkvnTWtrK7f3tm54SktLUVJSgpaWFggEAowYMQJxcXHQaDTQaDSYNGkSgoKC+C6dF/dMuGpra5GTk4Ps7Gzk5OTg9OnTsFgs8PX1xbhx4xAfH88NUVFR7Jyjn2pra3Hq1CkUFRWhsLAQp06dQklJCSwWC4KDgzFjxgwkJCQgPj4ekydPhoeHB98lO9yQDVdVVRX27duHX3/9FZmZmdDpdBCLxZg4cSKmT5+O6dOnY9q0aQgICOC71CGrtbUVJ06cwLFjx5Cbm4vc3Fy0trZCJpNh5syZmD9/PpKTkxEVFcV3qQ4xZMLV3d2NrKws/PLLL/j1119RVFQEiUSCxMREzJs3D9OnT8eECRPuiS2mq7JYLCgsLEROTg4OHjyIgwcPorm5GeHh4VzQHnjggSHz9sGgDpfZbEZubi62bt2KLVu2oKGhAZGRkZg7dy7mzp2LBx980O7KG+M6zGYzzpw5gwMHDuDAgQM4fPgw3NzcMHfuXCxduhRLliwZ1BdIBmW4jh8/js8//xzbt29Hc3MzJk6ciKVLl2Lp0qWIiIjguzzmDul0Omzbtg1bt25FZmYmPD09sWDBAjzxxBNITk6GUDjIbiiiQaK1tZU++eQTiouLIwCk0Who06ZNdPnyZb5LYxxAq9XSZ599RrNmzSKBQEDDhw+njRs3Ul1dHd+l9ZnLh6umpoaee+45kslkJJFI6PHHH6fc3Fy+y2KcqKSkhF544QXy9fUlDw8PWrFiBRUVFfFd1m25bLhqampo3bp1JBaLKSQkhN577z1qbGzkuyyGR21tbfT3v/+doqOjSSgU0vLly6mwsJDvsm7K5cJlMpnolVdeIbFYTGq1mj788EPq6OjguyzGhZjNZvrhhx8oJiaGhEIhrV69murr6/kuy45LhWvv3r0UGRlJCoWCPvjgAxYq5pasIQsLCyM/Pz/68ssvyWKx8F0WxyXCZTKZaPXq1QSAHnnkEaqtreW7JGYQMRgM9Pzzz5ObmxslJSW5zPrDe7iqqqpowoQJpFQq6eeff+a7HOYOfP/99wSAAJCnpydvdeTl5dHo0aNJrVbTqVOneKvDitdwnTx5koKDgyk6OpouXbrEZynMAJgzZw6v4SIiampqovnz55OXlxf99NNPvNbC27tyZ8+eRXJyMjQaDXJzcxEZGclXKcwQ4uvri927d2PNmjVYtmwZdu7cyVstvHzMv6mpCampqYiLi8P27dshFov5KIMZokQiETZv3sz173jy5EmMGzfO6XXwsud6/vnnYTab8eOPP7JgMQ4hEAjw0UcfYfz48Vi9ejXX56MzOT1cp06dwj/+8Q98+OGHLvHBwx07dkAgEHBDZWUlHnvsMa6/iVWrVqG5uRkVFRVYtGgRZDIZgoODsXbtWpuPxgPXPin8ww8/YN68eQgKCoJEIkFsbCzef/99m3/uu+++y81PrVYjLy8Pc+bM4TqVSUpKQk5Ozh0tj/VDi9cPf/7zn7n6rm9/5JFH+lW3VUlJCdLS0iCXyyGVSjFz5kxkZ2ffUb2O5O7ujs8//xwFBQX49ttvnV+As0/ynnjiCdJoNM6e7W2lpqYSAHrooYcoPz+fjEYjff311wSAHnzwQUpNTaXTp0+TwWCgTz/9lADQCy+8YDONXbt2EQDauHEjNTU1kVarpQ8++ICEQiG99NJLdvPUaDQklUpp2rRpdOzYMTIajZSXl0fjx48nDw8PysrKshk/JSWFFAoFHTp06LbL88ADD5BQKKSysjK716ZNm0bffffdHdVdWlpKCoWCQkJCaN++fWQwGKigoIDmz59PERERvF/Q6M3KlStp8uTJTp+v08M1bNgwevvtt50929uyhmv37t027dHR0QSADh8+bNM+fPhwGjNmjE3brl27aNasWXbTTk9PJ3d3d9Lr9TbtGo2GANDp06dt2gsKCribk6+3YMECksvldPDgwdsuz4EDBwgA/fu//7tNe3Z2NoWFhVF3d/cd1b106VICYHclrqamhjw9PV0yXBkZGSQQCKihocGp83VquJqbmwkA/frrr86cbZ9Yw3XjbTTz5s0jAGQymWzaZ8yYQTKZrE/T3rRpEwGgY8eO2bRb91y9GTZsGAG4qzdE77vvPvLy8iKdTse1paam0v/8z//ccd0ymYwAkMFgsBs/NjbWJcNVW1tLAOjIkSNOna9Tz7lMJhMAuPQHGH18fGx+FgqFcHNzs3tcj5ubm935iF6vxx/+8AfExsbC19eXO7d5+eWXAQBtbW1281MoFL3WYe1+oKGh4Y6X5cUXX0RbWxs+/vhjAMDFixdx5MgRPPXUU3dUd2dnJwwGA8Rica//Q1ftMsH6gUuj0ejU+To1XEqlEkKhEHV1dc6crdMsWrQIb775JtauXYuLFy/CYrGAiPDXv/4VAHrtBLSxsbHXdmuo7maFfeyxxxAaGorNmzejs7MT7733HtauXWv36d6+1u3p6QmZTIaOjo5eV9SmpqY7rtWRrl69CsD54XdquMRiMcaPH4+srCxnztYpzGYzcnJyEBQUhHXr1kGlUnHdTbe3t9/09zo6OpCXl2fTdu7cOdTW1kKj0SA4OPiOaxKJRHjuuefQ0NCA9957D1u2bMG6devuqu4HH3wQALB3716bdp1OhwsXLtxxrY6UlZUFiUSCmJgY587YqQehRPTWW2+RUqkko9Ho7FnfkvWcq7293aY9OTmZ3Nzc7MZPTEy0O1+aPXs2AaC//OUvpNVqqa2tjQ4dOkRhYWEEgPbv328zvkajIblcTnPmzOnT1cKVK1cSACovL+/zcrW2tpJcLieBQECrV6/udZz+1F1WVkZ+fn42VwsLCwspOTmZAgICXO6cy2KxUHx8PC1btszp83Z6uLRaLSkUCnrttdecPete5ebmcjedWoc33niD8vLy7NrffvttOnr0qF37+vXriejasj399NMUGhpK7u7uFBgYSGvWrKFXX32VGzc+Pp6bt0ajoZCQECoqKqLk5GTu09aJiYmUnZ1tV+vs2bPJ29ubenp6+rWML7/8MgGgs2fP9vp6f+u+cOECpaWlkY+PD0kkEpo0aRJlZGTQnDlzuPGffPLJftXoKN9++y0JhUJebuTl5cbdjz76iEQikd3l7XuNNVx90dzcTBKJhJ566ikHVzV0XL58mXx9fenf/u3feJk/L70/ERGWLl2KrKwsZGVlOf9Y2EXExcVBp9Ohurr6luMRER5//HHs27cPZ86cuWe7h+6PhoYGJCYmQiwW49ixYw7rv/9WeLm3UCAQ4JtvvkFMTAxmzZqFzMxMPsoYNOrr61FeXo6DBw+yYPXBhQsXMHPmTPT09GDPnj28BAsAv12rtbe308qVK0kkEtEHH3zAZylOZX1zFjec5zF3b9++feTr60tTp06lq1ev8loL759EtlgstH79ehIIBLRixQqX7GiEcX3Wjo1EIhGlp6fbXfXlA+/hssrIyOA6Gvniiy9cqqMRxrVZOzaSy+X0ySefuMy64zLhIrLtaGT69Ol27wsxzPXOnDlDaWlpBICWLl3qMh3TWLlUuKzy8/MpOTmZAFBCQgILGWPj9OnTtGTJEhIIBDRhwgTas2cP3yX1yiXDZXXs2DEuZJMnT6Yvv/zS7u505t7Q09NDO3bsoAceeIAL1c8//+wyh4C9celwWR07doyWLVtGHh4epFAoaN26dYOir3Dm7lVXV9Mf//hHUqvVJBQKKTk5mXbu3OnSobIaFOGyampqov/93/+lESNGEAAaN24crV+/ni5cuMB3acwA0ul09NVXX1FKSgqJRCLy9fWldevW9fqpalc2KJ/PZbFYkJmZiR9//BHbtm2DTqdDfHw8li5dipSUFERHR/NdItNPlZWV+OWXX7B161YcPnwYYrEYKSkpePTRR5GSkjIonwg6KMN1vZ6eHmRmZmLr1q3Yvn07dDod1Go15s+fj/nz52Pu3LlQKpV8l8ncwGQyISsrC/v27cO+fftQUlICqVSKhQsX4tFHH8WCBQv4u7NigAz6cF3PbDYjPz+fe9D4iRMnYLFYMGHCBCQkJGD69OlISEhASEgI36XecxobG5Gbm4tjx44hJycHx48fR3d3NzQaDbchnDFjBjw9PfkudcAMqXDdSK/X4+DBg8jMzMSxY8dQUFCAnp4ehIWFISEhAVOnTkVcXBw0Gg3kcjnf5Q4ZbW1tKCwsxJkzZ5Cbm4vc3Fzug5RjxozBtGnTkJSUxHXlNlQN6XDdyGg0Ii8vDzk5OcjNzcWJEyfQ2NgIABg+fDg0Gg3Gjx8PjUaD6OhoDB8+fFAe6zuL2WzGlStXUFxcjIKCApw5cwZnz55FaWkpzGYzvL29ER8fj4SEBEybNg3Tpk27pw7R76lw9aaqqgoFBQU4e/Yst3KUlZXBYrFAJBIhPDwco0aNwujRozF69GiMGjUK4eHhCAsLG/TnBH3R1dWFmpoaVFZWorS0lBsuXLiA8vJydHZ2AgDCw8Oh0Wi4DVRcXBwiIyMH30PCB9A9H67etLW14cKFC9yKdPHiRVy8eBGlpaXcng641uFOSEgIwsLCEBISArVajWHDhsHf3x/+/v5QKpXcV1fT2tqKhoYG6HQ6NDY2QqfToa6ujgtSbW0tqqurbToTkslk3Ibm+g3O6NGjb9qL1b2MhaufmpqacOXKFVRVVaGqqgo1NTU231+9etWuZyQ3NzcuaFKpFHK5HN7e3pBIJJDJZFw31lKpFMC1rufc3d253/f09LTp2q2zs9OmmzaLxQK9Xg/gWqcy7e3taGlpQVtbG9ra2tDa2gqj0QiTycSFqaury6ZGiUSCgIAAhIaGIjQ0FCEhITbfh4WFDenzI0dg4XKAjo4Obm+g0+mg1Wq5ldpkMkGv18NoNKKtrQ1GoxGtra1cEIBrF2Ku7xOxra2NO/wCrvXqdGP3aAqFAgKBgAuir68vvLy8IJFIuDBLpVKbvalKpYJKpYJSqeSCzQwcFi6GcZB792yTYRyMhYthHISFi2EcRARgK99FMMxQ9P8B1kQ55+HEEyEAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vad_model = malaya_speech.vad.webrtc()\n", "p_vad = Pipeline()\n", "pipeline = (\n", " p_vad.map(lambda x: float_to_int(x, divide_max_abs=False))\n", " .map(vad_model)\n", ")\n", "p_vad.visualize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Starting malaya-speech 1.4.0, streaming always returned a float32 array between -1 and +1 values." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load ASR model" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "model = malaya_speech.stt.transducer.pt_transformer(model = 'mesolitica/conformer-medium')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "_ = model.eval()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ASR Pipeline\n", "\n", "Feel free to add speech enhancement or any function, but in this example, I just keep it simple." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_asr = Pipeline()\n", "pipeline_asr = (\n", " p_asr.map(lambda x: model.beam_decoder([x])[0], name = 'speech-to-text')\n", ")\n", "p_asr.visualize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**You need to make sure the last output should named as `speech-to-text` or else the streaming interface will throw an error**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Diarization Pipeline" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "speaker_v = malaya_speech.speaker_vector.nemo(model = 'huseinzol05/nemo-titanet_large')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "_ = speaker_v.eval()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "from malaya_speech.diarization import streaming\n", "from malaya_speech.model.clustering import StreamingSpeakerSimilarity\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "streaming_model = StreamingSpeakerSimilarity(similarity_threshold = 0.7)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_classification = Pipeline()\n", "to_float = p_classification\n", "to_float.map(lambda x: speaker_v([x])[0]) \\\n", ".map(lambda x: streaming(x, streaming_model), name = 'classification')\n", "\n", "p_classification.visualize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Straight forward, predict each frames, if similar at least 70%, returned existing speaker, else append new speaker." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Postfilter Pipeline\n", "\n", "The problem with multispeaker audio, sometime there are frames got speaker overlapped each other, so I want to reject those frames." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2023-05-16 14:35:12.211557: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n", "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", "2023-05-16 14:35:12.217160: E tensorflow/stream_executor/cuda/cuda_driver.cc:271] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected\n", "2023-05-16 14:35:12.217180: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: husein-MS-7D31\n", "2023-05-16 14:35:12.217183: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: husein-MS-7D31\n", "2023-05-16 14:35:12.217221: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: 470.182.3\n", "2023-05-16 14:35:12.217234: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 470.182.3\n", "2023-05-16 14:35:12.217236: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:310] kernel version seems to match DSO: 470.182.3\n", "/home/husein/dev/malaya-speech/malaya_speech/utils/featurization.py:38: FutureWarning: Pass sr=16000, n_fft=512 as keyword args. From version 0.10 passing these as positional arguments will result in an error\n", " self.mel_basis = librosa.filters.mel(\n" ] } ], "source": [ "speaker_overlap = malaya_speech.speaker_overlap.deep_model(model = 'vggvox-v2')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": true }, "outputs": [], "source": [ "is_clean = malaya_speech.is_clean.nemo(model = 'huseinzol05/nemo-is-clean-speakernet')" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "_ = is_clean.eval()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4UAAAJBCAIAAAB+vIfhAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd1xT9/4/8JMEwgwJe28ZggzFAYoTtLZCVVqpVouts7/b1nVtta1Xe7Wt2nFbetvbuuq9erW2dmhR+1VxogwHCMieYUMYmUDI+v3x+ZpvioqowAnwev6Rx8nJyTnvA8knr/M5i6HRaCgAAAAAAJow6S4AAAAAAIY15FEAAAAAoBPyKAAAAADQyYDuAgAABqvOzk6pVCoWi0UikVqtFgqF2iPyJRKJUqkkwwYGBhwOhwwzGAwej8dkMrlcroWFhbm5ubGxMT3VAwDoDeRRAIAHaG1t5fP5tbW1AoGgsbGxqalJIBAIBIKGhgaxWCwUCnUT59MgaZXH41lYWDg4ONja2tra2trZ2dnb29va2jo7O7u7u1tZWT39ggAA9BYD59cDwHCmVqsrKysLCgoKCwv5fH5lZWVlZSWfzxeLxWQCMzMzbTq0tbV1cHDgcrk8Ho/D4ZiZmZmbm5OeThaLxeFwDAz+dyPf1NTUyMiIDMvl8vb2djKsVColEolKpSK9qjKZTCqVSiQSoVAoEokaGhpI6iUJWCaTkXdxOBwPDw93d3cPDw8PDw9/f39/f38PDw8WizWwfy0AgH6BPAoAw0ttbe2tW7eys7Pz8/OLiooKCws7OzspinJ0dPTy8iKxT8vNzc3U1JSuUtvb26urq/l8PgnK5LGioqKuro6iKGNjYz8/P39//5EjR4aGho4dO9bZ2ZmuUgEAngbyKAAMcUKhMDU19dY99fX1DAbD29s7ICBg5MiR/v7+AQEBfn5+XC6X7kp7SywWFxYW5ufnFxYWFhQU5Ofnl5WVaTQaR0fHsWPHhoWFjR07duLEiZaWlnRXCgDQK8ijADAESSSSjIyM5OTka9eu3bhxQ6FQODo6ht0zceJEa2trumvsSxKJJDs7+/Y9BQUFDAbD398/MjIyOjp6xowZQ2x9AWCIQR4FgKEjKyvr999/T0pKysrKoihq1KhR06ZNmzZt2uTJk21sbOiubuA0NzenpKRcvnz5ypUrubm5FEWNHj06NjY2NjZ29OjRDAaD7gIBAP4EeRQABjeVSnXx4sUTJ04kJSVVV1c7OzvHxsbOmjVrypQp6BSkKKq1tTUlJeXs2bNJSUk1NTWurq4xMTHz5s2LiorC6VAAoCeQRwFgsMrPz//pp5/+/e9/8/n8gICA2NjYmJiYSZMmof/vYfLy8k6dOpWUlJSammplZfXCCy+88sorkZGRdNcFAMMd8igADDIymezf//73/v3779y54+np+corryxZssTHx4fuugaTsrKyw4cPHz58uLy8PDg4eOXKla+++qq5uTnddQHAMIU8CgCDRl1d3ddff71nz57Ozs5FixYtXbo0MjISvaFPTKPRXL9+/dChQ0eOHDEyMlq1atVbb72Fi0YBwMBDHgWAQaC2tnbbtm2HDx+2srJ64403Xn/99WF1flJ/a2lp2bNnz9dff93S0rJ48eK///3vrq6udBcFAMMI8igA6DWxWLx79+4vv/zSzs7ub3/72+LFi7X3PYK+JZfLjx49umPHjoaGhnXr1m3atGkQXZMVAAY15FEA0F8//PDDunXrlErle++99+abbyKJDgC5XP7NN9989NFHTCbziy++WLJkCd0VAcDQx6S7AACAB2hra1u0aNHixYvj4+NLS0v/+te/IowODCMjow0bNpSWli5cuDAhISE+Pr6lpYXuogBgiEP/KADonbS0tAULFlAUdfDgwZkzZ9JdzvCVnJz82muvqVSqn376CZeFAoD+g/5RANAvZ86ciY6OHj16dE5OTp+HUXNzc8afMZlMW1vbefPm3bx5s2+X1c1nn31Gluji4tKvC+pD0dHRubm548ePnzVrVlJSEt3lAMCQhTwKAHrk6NGj8+bNW7Ro0W+//WZlZdXn85dKpeRWonPnztVoNBqNpq2tbe/evWlpaZMmTUpOTtZO5uPjExMT04eL3rhxo0ajCQkJ6VZPny+ob/F4vF9++eWVV16Ji4s7fPgw3eUAwNBkQHcBAAD/KyMj47XXXlu7du0nn3wyYFcV5XK58+fPb29vX7Jkybp16+7evUtRlEajUavVarW6v5c+YAt6GiwWa8+ePZaWlsuXL/f29p44cSLdFQHAUIM8CgB6obW1deHChdHR0bt37x74S9xPnz6doqi8vDyhUMjj8TgcTllZ2QAsd8AW9PR27txZUlLywgsvZGZmOjo60l0OAAwp2F8PAHphzZo1Go3m8OHDTCYN7ZL2zE7c7elhGAzGgQMHTE1N169fT3ctADDUII8CAP0KCgp++OGHzz77rD+OGe2Ny5cvUxQVGBjI5XJPnDih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\n", "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_postfilter = Pipeline()\n", "p_frames = p_postfilter.map(malaya_speech.utils.generator.frames, frame_duration_ms = 100, \n", " append_ending_trail = False)\n", "p_speaker_overlap = p_frames.foreach_map(speaker_overlap) \\\n", ".map(lambda x: np.mean(x) <= 0.1)\n", "is_clean_overlap = p_frames.foreach_map(is_clean) \\\n", ".map(lambda x: np.mean(x) >= 0.1)\n", "p_speaker_overlap.zip(is_clean_overlap).map(lambda x: np.mean(x) == 1, name = 'postfilter')\n", "p_postfilter.visualize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pipeline is simple, a long frame splitted into 100 ms frames, \n", "1. predict speaker overlapped, if those 100 ms frames are less than 10% speaker overlapped.\n", "2. predict speeches are clean at least 10%.\n", "3. if (1) and (2) are correct, we accept the frame.\n", "\n", "**postfilter pipeline must returned True to accept a frame**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**You need to make sure the last output should named as `postfilter` or else the streaming interface will throw an error**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Start streaming" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dua ribu dua puluh satu (speaker 0) berbanding dengan suku suku sebelumnya (speaker 0) trend pemulihan yang berterusan ini adalah bukti jelas (speaker 0) bahawa dasar dasar kerajaan telah membuahkan hasil (speaker 0) walaupun dalam keadaan yang amat mencabar (speaker 0) perkembangan ini (speaker 0) disokong oleh belanjawan dua ribu dua puluh satu (speaker 0) serta pakej pakej rangsangan dan bantuan kerajaan (speaker 0) pasaran kewangan (speaker 0) dan juga modal kita menunjukkan daya tahan yang baik (speaker 0) pada suku kedua (speaker 0) dua ribu dua puluh satu (speaker 0) melangkah ke hadapan (speaker 0) dengan pelaksanaan pelan pemulihan negara (speaker 0) dan peningkatan program imunisasi kobis babas kebangsaan (speaker 0) ekonomi malaysia dijangka akan beransur pulih (speaker 0) sasaran lima puluh peratus populasi dewasa negara (speaker 0) divaksinasi sepenuhnya pada akhir ogos (speaker 0) akan membolehkan kita membuka semula kegiatan ekonomi (speaker 0) dan sosial (speaker 0) secara lebih meluas untuk memacu pemulihan ekonomi negara (speaker 0) astrolibilife (speaker 0) where will here this nation together (speaker 0) and bring back it s clorry (speaker 0) namun saya berasa agak sedih (speaker 0) dan dukacita (speaker 0) dengan perkembangan politik yang sedang berlaku mutakhir ini (speaker 0) hari ini di hadapan saudara dan saudari semua (speaker 0) saya ingin bercakap secara jujur (speaker 0) sebagai seorang manusia (speaker 0) saya tentunya tidak terhindar daripada kelemahan (speaker 0) dan kekurangan (speaker 0) apa lagi dalam keadaan saya sebagai perdana menteri (speaker 0) yang memikul suatu tanggungjawab berat (speaker 0) untuk mengurus pandemik yang luar biasa ini (speaker 0) sejak lebih setahun yang lalu (speaker 0) pastinya saya memerlukan sokongan (speaker 0) dan juga saya memerlukan dokongan daripada rakan rakan saya dalam kabinet (speaker 0) pimpinan kerajaan (speaker 0) negeri (speaker 0) pegawai pegawai kerajaan fran liners (speaker 0) dan rakyat seluruhnya untuk membolehkan saya melaksanakan tanggungjawab (speaker 0) membawa negara ini keluar daripada krisis (speaker 0) tidak kurang pentingnya ialah sokongan (speaker 0) rakan rakan ahli parlimen (speaker 0) dalam kerajaan perikatan nasional yang mana (speaker 0) dengan sokongan merekalah (speaker 0) saya berada di sini pada hari ini (speaker 0) keabsahan saya sebagai perdana menteri (speaker 0) ditentukan oleh sokongan majoriti ahli ahli parlimen (speaker 0) namun malangnya (speaker 0) dalam keadaan saya dan rakan rakan dalam kabinet berhempas pulas (speaker 0) kepada saya (speaker 0) ini (speaker 1) tentang keabsahan saya sebagai perdana menteri (speaker 0) dalam keadaan ini saya mempunyai dua pilihan (speaker 0) menurut (speaker 0) perlembagaan persekutuan (speaker 0) berkenaan kebawah duli yang maha mulia (speaker 0) seri paduka baginda yang di pertuan agong untuk membubarkan parlimen (speaker 0) dan mengadakan pilihanraya (speaker 0) atau meletak jawatan (speaker 0) pilihan saya yang paling mudah ialah meletak jawatan (speaker 0) jika saya mengambil keputusan ini maka selesailah urusan saya (speaker 0) dan terserahlah (speaker 0) kepada kebijaksanaan ke bawah duli yang maha mulia seri paduka baginda yang di pertuan agong (speaker 0) menurut perkara empat pertiga dua perlembagaan persekutuan (speaker 0) kebawah duli yang maha mulia tuanku boleh melantik seorang perdana menteri (speaker 0) dari kalangan ahli dewan rakyat (speaker 0) yang pada hematnya mungkin mendapat kepercayaan majoriti (speaker 0) ahli dewan rakyat (speaker 0) saya patuh pada perlembagaan (speaker 0) dan akan mengambil jalan (speaker 0) yang terhormat (speaker 0) untuk menyelesaikan kemelut politik yang sedang berlaku ini (speaker 0) namun (speaker 0) saya ulangi sehingga saat ini tiada seorang pun (speaker 0) ahli dewan rakyat lain (speaker 0) yang dapat membuktikan dia mendapat sokongan majoriti (speaker 0) untuk membolehkan kebawah duli yang maha mulia seri paduka baginda yang tuan agong melantik (speaker 0) perdana menteri yang baru (speaker 0) jika saya meletak jawatan pada masa ini saudara saudari sekelian (speaker 0) bukan saya seorang saja yang berhenti (speaker 0) untuk menjadi perdana menteri (speaker 0) menurut perlembagaan persekutuan saya hendaklah meletak jawatan seluruh (speaker 0) ini bermakna kerajaan perikatan nasional yang mentadbir negara (speaker 0) pada masa itu akan jatuh (speaker 0) saya memikirkan dalam keadaan tiada seorang pun (speaker 0) ahli dewan rakyat lain yang mendapat sokongan majoriti pada masa ini (speaker 0) perdana menteri yang baru tidak boleh dilantik menurut perlembagaan (speaker 0) jadi apabila perdana menteri tidak boleh dilantik maka kabinet pun tidak boleh dilantik (speaker 0) dan kerajaan baru tidak dapat (speaker 0) apa akan jadi kepada negara kita (speaker 0) sekiranya krisis politik ini berlarutan (speaker 0) dan kerajaan baru tidak dapat dibentuk dalam kadar yang segera (speaker 0) kerajaan mana yang akan memastikan (speaker 0) sebagai contoh program vaksinasi (speaker 0) berjalan lancar (speaker 0) mengikut jadual (speaker 0) sedangkan tempoh dua bulan akan datang adalah amat genting (speaker 0) jika semua perancangan kerajaan dapat dilaksanakan seperti yang dijadualkan (speaker 0) kita akan mencapai imuniti kelompok (speaker 0) pada bulan oktober insyaallah (speaker 0) sekiranya terganggu (speaker 0) dengan kamera politik yang tidak berkesudahan (speaker 0) dan kerajaan yang sah (speaker 0) maka sasaran imuniti kelompok tidak akan dapat dicapai (speaker 0) dan nyawa rakyat (speaker 0) akan terus berada (speaker 0) dalam bahaya (speaker 0) justeru saya telah pun meruni (speaker 0) rakan rakan saya di dalam kabinet dan pimpinan parti parti (speaker 0) " ] } ], "source": [ "samples = malaya_speech.streaming.torchaudio.stream(filename,\n", " vad_model = p_vad, \n", " asr_model = p_asr,\n", " classification_model = p_classification,\n", " postfilter_model = p_postfilter,\n", " segment_length = 320,\n", " realtime_print = True,\n", " streaming_max_length = 360)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "import IPython.display as ipd" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "112" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(samples)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'wav_data': array([ 0. , 0. , 0. , ..., -0.00017348,\n", " -0.00051391, -0.00028344], dtype=float32),\n", " 'start': 0.0,\n", " 'asr_model': 'dua ribu dua puluh satu',\n", " 'classification_model': 'speaker 0',\n", " 'end': 1.88}" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "samples[0]" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ipd.Audio(samples[0]['wav_data'], rate = 16000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Save to SRT\n", "\n", "You can load SRT file using VLC or something like that, `malaya_speech.utils.io.write_srt` required list of dictionary with `{start, end, text}` keys." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'start': 0.0, 'end': 1.88, 'text': 'dua ribu dua puluh satu (speaker 0)'},\n", " {'start': 2.64,\n", " 'end': 5.48,\n", " 'text': 'berbanding dengan suku suku sebelumnya (speaker 0)'}]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "transcript = []\n", "for s in samples:\n", " transcript.append({\n", " 'start': s['start'],\n", " 'end': s['end'],\n", " 'text': f\"{s['asr_model']} ({s['classification_model']})\"\n", " })\n", " \n", "transcript[:2]" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "from malaya_speech.utils.io import write_srt\n", "\n", "with open('muhyiddin-perutusan.srt', 'w') as fopen:\n", " write_srt(transcript, fopen)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can download the srt file at [malaya-speech/example/youtube-asr-diarization-torchaudio-srt/muhyiddin-perutusan.srt](https://github.com/huseinzol05/malaya-speech/blob/master/example/muhyiddin-perutusan.srt)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "!mv muhyiddin-perutusan.srt example/youtube-asr-diarization-torchaudio-srt" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 4 }