{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Youtube ASR + Diarization\n", "\n", "Let say you want to transcribe long audio from youtube and detect speakers using TorchAudio, 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](https://github.com/huseinzol05/malaya-speech/tree/master/example/youtube-asr-diarization-torchaudio).\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++GEqKCjo93TuuGu16upqeu6558jLy4sCAgLo5ZdfpuLi4judHMPwrqamht566y0aMWIEubm50YoV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\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',\n", " local_files_only=True)" ] }, { "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', \n", " local_files_only=True)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "_ = speaker_v.eval()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "from malaya_speech.diarization import streaming_speaker_similarity\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "speakers = {}\n", "\n", "p_classification = Pipeline()\n", "to_float = p_classification\n", "to_float.map(lambda x: speaker_v([x])[0]) \\\n", ".map(lambda x: streaming_speaker_similarity(x, speakers = speakers, similarity_threshold = 0.7), \n", " 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": 12, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2023-02-19 19:25:30.227196: 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-02-19 19:25:30.238872: 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-02-19 19:25:30.238897: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: husein-MS-7D31\n", "2023-02-19 19:25:30.238901: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: husein-MS-7D31\n", "2023-02-19 19:25:30.238965: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: 470.161.3\n", "2023-02-19 19:25:30.238981: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 470.161.3\n", "2023-02-19 19:25:30.238983: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:310] kernel version seems to match DSO: 470.161.3\n" ] } ], "source": [ "speaker_overlap = malaya_speech.speaker_overlap.deep_model(model = 'vggvox-v2',\n", " local_files_only=True)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_speaker_overlap = Pipeline()\n", "p_speaker_overlap.map(malaya_speech.utils.generator.frames, frame_duration_ms = 100, \n", " append_ending_trail = False) \\\n", ".foreach_map(speaker_overlap) \\\n", ".map(lambda x: np.mean(x) <= 0.1, name = 'postfilter')\n", "p_speaker_overlap.visualize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pipeline is simple, a long frame splitted into 100 ms frames, predict speaker overlapped, if those 100 ms frames are less than 10% speaker overlapped, 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": 14, "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 mambas 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) " ] } ], "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_speaker_overlap,\n", " segment_length = 320,\n", " realtime_print = True,\n", " streaming_max_length = 60.0)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "import IPython.display as ipd" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'wav_data': array([ 6.5902516e-04, 1.7812924e-03, 1.5515345e-03, ...,\n", " -5.6166272e-04, 1.8323759e-04, -1.5971382e-06], dtype=float32),\n", " 'timestamp': datetime.datetime(2023, 2, 19, 19, 25, 45, 416815),\n", " 'asr_model': 'akan membolehkan kita membuka semula kegiatan ekonomi',\n", " 'classification_model': 'speaker 0'}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "samples[-1]" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ipd.Audio(samples[-1]['wav_data'], rate = 16000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Another example\n", "\n", "Originally from https://www.youtube.com/watch?v=_FXlFtCIFYk&ab_channel=ScorpiusEntertainment" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "speakers = {}" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "amalan what (speaker 0) dia tak ada work life balance you cari word life balance lupakan tak ada (speaker 0) (speaker 0) know if youtube youtube (speaker 0) (speaker 1) macamlah sial semua aku buat pun (speaker 0) time sikitlah tu okey dan kita buat dia dulu (speaker 0) kita dah ramai (speaker 0) orang yang kita nak sihat (speaker 0) yalah kejap (speaker 0) dengan awak show (speaker 0) " ] } ], "source": [ "samples2 = malaya_speech.streaming.torchaudio.stream('speech/podcast/toodia.mp3',\n", " vad_model = p_vad, \n", " asr_model = p_asr,\n", " classification_model = p_classification,\n", " postfilter_model = p_speaker_overlap,\n", " segment_length = 320,\n", " realtime_print = True,\n", " streaming_max_length = 60.0)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'wav_data': array([-0.00064125, -0.00097178, -0.00146456, ..., 0.00172934,\n", " 0.0026679 , 0.00241392], dtype=float32),\n", " 'timestamp': datetime.datetime(2023, 2, 19, 19, 25, 49, 158479),\n", " 'asr_model': 'macamlah sial semua aku buat pun',\n", " 'classification_model': 'speaker 0'}" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "samples2[5]" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ipd.Audio(samples2[5]['wav_data'], rate = 16000)" ] } ], "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 }