{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Long Audio Classification\n", "\n", "Let say you want to classify long audio 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/long-audio-classification-torchaudio](https://github.com/huseinzol05/malaya-speech/tree/master/example/long-audio-classification-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": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "\n", "os.environ['CUDA_VISIBLE_DEVICES'] = ''" ] }, { "cell_type": "code", "execution_count": 2, "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": 3, "metadata": { "scrolled": true }, "outputs": [], "source": [ "vad_model = malaya_speech.vad.webrtc()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "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": [ "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": [ "### Streaming interface\n", "\n", "```python\n", "def stream(\n", " src,\n", " vad_model=None,\n", " asr_model=None,\n", " classification_model=None,\n", " format=None,\n", " option=None,\n", " buffer_size: int = 4096,\n", " sample_rate: int = 16000,\n", " segment_length: int = 2560,\n", " num_padding_frames: int = 20,\n", " ratio: float = 0.75,\n", " min_length: float = 0.1,\n", " max_length: float = 10.0,\n", " realtime_print: bool = True,\n", " **kwargs,\n", "):\n", " \"\"\"\n", " Stream an audio using torchaudio library.\n", "\n", " Parameters\n", " ----------\n", " vad_model: object, optional (default=None)\n", " vad model / pipeline.\n", " asr_model: object, optional (default=None)\n", " ASR model / pipeline, will transcribe each subsamples realtime.\n", " classification_model: object, optional (default=None)\n", " classification pipeline, will classify each subsamples realtime.\n", " format: str, optional (default=None)\n", " Supported `format` for `torchaudio.io.StreamReader`,\n", " https://pytorch.org/audio/stable/generated/torchaudio.io.StreamReader.html#torchaudio.io.StreamReader\n", " option: dict, optional (default=None)\n", " Supported `option` for `torchaudio.io.StreamReader`,\n", " https://pytorch.org/audio/stable/generated/torchaudio.io.StreamReader.html#torchaudio.io.StreamReader\n", " buffer_size: int, optional (default=4096)\n", " Supported `buffer_size` for `torchaudio.io.StreamReader`, buffer size in byte. Used only when src is file-like object,\n", " https://pytorch.org/audio/stable/generated/torchaudio.io.StreamReader.html#torchaudio.io.StreamReader\n", " sample_rate: int, optional (default = 16000)\n", " output sample rate.\n", " segment_length: int, optional (default=2560)\n", " usually derived from asr_model.segment_length * asr_model.hop_length,\n", " size of audio chunks, actual size in term of second is `segment_length` / `sample_rate`.\n", " num_padding_frames: int, optional (default=20)\n", " size of acceptable padding frames for queue.\n", " ratio: float, optional (default = 0.75)\n", " if 75% of the queue is positive, assumed it is a voice activity.\n", " min_length: float, optional (default=0.1)\n", " minimum length (second) to accept a subsample.\n", " max_length: float, optional (default=10.0)\n", " maximum length (second) to accept a subsample.\n", " realtime_print: bool, optional (default=True)\n", " Will print results for ASR.\n", " **kwargs: vector argument\n", " vector argument pass to malaya_speech.streaming.pyaudio.Audio interface.\n", "\n", " Returns\n", " -------\n", " result : List[dict]\n", " \"\"\"\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load ASR model" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Size (MB)malay-malayamalay-fleur102Languagesinglish
mesolitica/conformer-tiny38.5{'WER': 0.17341180814, 'CER': 0.05957485024}{'WER': 0.19524478979, 'CER': 0.0830808938}[malay]NaN
mesolitica/conformer-base121{'WER': 0.122076123261, 'CER': 0.03879606324}{'WER': 0.1326737206665, 'CER': 0.05032914857}[malay]NaN
mesolitica/conformer-medium243{'WER': 0.11723275992, 'CER': 0.03398158434893}{'WER': 0.12977366262, 'CER': 0.048497925111}[malay]NaN
mesolitica/emformer-base162{'WER': 0.175762423786, 'CER': 0.06233919000537}{'WER': 0.18303839134, 'CER': 0.0773853362}[malay]NaN
mesolitica/conformer-singlish121NaNNaN[singlish]{'WER': 0.08535878149, 'CER': 0.0452357273822,...
mesolitica/conformer-medium-mixed243{'WER': 0.122076123261, 'CER': 0.03879606324}{'WER': 0.1326737206665, 'CER': 0.05032914857}[malay, singlish]{'WER': 0.08535878149, 'CER': 0.0452357273822,...
\n", "
" ], "text/plain": [ " Size (MB) \\\n", "mesolitica/conformer-tiny 38.5 \n", "mesolitica/conformer-base 121 \n", "mesolitica/conformer-medium 243 \n", "mesolitica/emformer-base 162 \n", "mesolitica/conformer-singlish 121 \n", "mesolitica/conformer-medium-mixed 243 \n", "\n", " malay-malaya \\\n", "mesolitica/conformer-tiny {'WER': 0.17341180814, 'CER': 0.05957485024} \n", "mesolitica/conformer-base {'WER': 0.122076123261, 'CER': 0.03879606324} \n", "mesolitica/conformer-medium {'WER': 0.11723275992, 'CER': 0.03398158434893} \n", "mesolitica/emformer-base {'WER': 0.175762423786, 'CER': 0.06233919000537} \n", "mesolitica/conformer-singlish NaN \n", "mesolitica/conformer-medium-mixed {'WER': 0.122076123261, 'CER': 0.03879606324} \n", "\n", " malay-fleur102 \\\n", "mesolitica/conformer-tiny {'WER': 0.19524478979, 'CER': 0.0830808938} \n", "mesolitica/conformer-base {'WER': 0.1326737206665, 'CER': 0.05032914857} \n", "mesolitica/conformer-medium {'WER': 0.12977366262, 'CER': 0.048497925111} \n", "mesolitica/emformer-base {'WER': 0.18303839134, 'CER': 0.0773853362} \n", "mesolitica/conformer-singlish NaN \n", "mesolitica/conformer-medium-mixed {'WER': 0.1326737206665, 'CER': 0.05032914857} \n", "\n", " Language \\\n", "mesolitica/conformer-tiny [malay] \n", "mesolitica/conformer-base [malay] \n", "mesolitica/conformer-medium [malay] \n", "mesolitica/emformer-base [malay] \n", "mesolitica/conformer-singlish [singlish] \n", "mesolitica/conformer-medium-mixed [malay, singlish] \n", "\n", " singlish \n", "mesolitica/conformer-tiny NaN \n", "mesolitica/conformer-base NaN \n", "mesolitica/conformer-medium NaN \n", "mesolitica/emformer-base NaN \n", "mesolitica/conformer-singlish {'WER': 0.08535878149, 'CER': 0.0452357273822,... \n", "mesolitica/conformer-medium-mixed {'WER': 0.08535878149, 'CER': 0.0452357273822,... " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "malaya_speech.stt.transducer.available_pt_transformer()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [], "source": [ "model = malaya_speech.stt.transducer.pt_transformer(model = 'mesolitica/conformer-base')" ] }, { "cell_type": "code", "execution_count": 7, "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": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 8, "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": [ "### Load Classification models\n", "\n", "In this example, I am going to use 3 different modules, gender detection, language detection and age detection." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "gender_model = malaya_speech.gender.deep_model(model = 'vggvox-v2')\n", "language_detection_model = malaya_speech.language_detection.deep_model(model = 'vggvox-v2')\n", "age_model = malaya_speech.age_detection.deep_model(model = 'vggvox-v2')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Classification Pipeline\n", "\n", "In this example, I just keep it simple. **And needs to end with `classification` map or else the streaming interface will throw an error**." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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gbNA4gEAcGoajWbVqlVLly594IEHLl269MUXX4SGhnJdlFNLTU39+eefT5061draGh8fv23bNrvdznVRwD2M4wEAcF779u179dVXfXx8Pv744/T0dK7LmWQGBgb+8Y9/vP76635+fp999llKSgrXFQGX0McDAOCM7Hb7k08++cwzz2zZsuXSpUuIO2Pg5ub2xz/+saKiYsaMGWlpaXv27OG6IuAS+ngAAJyORqNZsWJFTU3NgQMHMjMzuS5n0mMY5p133vnrX/+6YcOGTz75RCgUcl0RcACJBwDAubS2tv7mN7/h8/nff/99REQE1+W4juzs7LVr186bN+/bb7/FTSruQTiqBQDgRIxGY2Zm5sDAQF5e3njEnYaGhieffDIkJMTd3Z1309tvv33XV+SEMjMzT5069eOPP65du7a/v5/rcmCiIfEAADgLhmHWrFnT2dn5448/jsctP/V6/Zw5c86dO5eVlWU0GhmGKSkpuetrcWYPPfTQ0aNHjx8/vn37dq5rgYmGxAMA4Cz27duXl5eXlZU1TrdK+PTTT3U63a5du+bMmSORSMa2EJlMNuxJT7dqdzbz58/fsWPHm2++ee7cOa5rgQmFxAMA4BT0ev2rr776yiuvJCYmjtMq6OX4YmJixmn5k8XWrVvnzJnz7LPPcl0ITCgkHgAAp7B//34+n//GG2+M3ypsNhshRC6Xj98qJgU3N7cPPvjgzJkzp0+f5roWmDhIPAAATuHzzz/fuHGjWCwej4UfPXqUx+N9//33hBCxWMzj8YY9AtXX13fw4MGFCxf6+/uLxeKYmJjdu3cPDAzQV3fu3Mnj8axWa1FRER3yTM94ulU7pdfrt27dOm3aNHd3d19f35UrV164cMGxKur69ev0lqje3t5Lliy5evXqePwcWAkJCbNmzdq3b9+4rgWcCwMAAFyrqqoihPzyyy/jupZly5YRQrq7u9kWOnL5rbfeok+PHTtGCNm+fXtnZ6der9+zZ4+bm9srr7ziuBCpVJqcnDx04cO2azSaqVOn+vn5nThxwmw2X758ee7cuSKRqLi4eFBVy5YtKy4utlgsOTk5YrE4ISHhrm32LezcudPX13e81wLOA308AADcq6iocHNzmzlzJteFkHnz5v35z3/29PT08fF54YUX1q1bt3v37q6urrEt7c9//nNDQ8MHH3ywaNEimUwWFRX1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\n", "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_classification = Pipeline()\n", "to_float = p_classification\n", "gender = to_float.map(gender_model)\n", "language_detection = to_float.map(language_detection_model)\n", "age_detection = to_float.map(age_model)\n", "combined = gender.zip(language_detection).zip(age_detection).flatten()\n", "combined.map(lambda x: x, name = 'classification')\n", "\n", "p_classification.visualize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Start streaming" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "luangkan waktu untuk ikutilah drama tikus ini apabila pangkat menjadi taruhan berapa jabatan pun bermula siapa antara mereka yang (['female', 'malay', 'teens']) berjaya dan siapa pula yang tak ke mana mana dua kali sebagai amanah dalam dua kali (['female', 'malay', 'teens']) episod lepas rashid (['female', 'malay', 'twenties']) jalan seperti botol yang berlubang kita tanya sebab aku banyak kebaikan dan pengetahuannya kita tua dia akan berlalu dengan sia sia (['female', 'others', 'fifties']) tak boleh macam ni (['female', 'malay', 'teens']) ini simple sangat kalau boleh aku nak nampak gempak depan datuk arif tak boleh buat macam ni masuk (['male', 'malay', 'teens']) (['male', 'others', 'fifties']) (['male', 'malay', 'teens']) aku nak tanya ni kau buat apa ni taip kenapa simpan sangat (['male', 'malay', 'teens']) aku macam ni simpati padat ini kerja orang pemalas ambil kau aku nak kau tak balik ke ya aku nak proposal (['male', 'malay', 'teens']) nampak gempak gempak bogel ada bas eh apa bendalah aku ada bas (['female', 'malay', 'teens']) kau tahu tak dia nak gempa macam mana lagi jangan nampak macam mana tempat lagi kau tanya aku itu kerja engkau tu kerja kau pergi (['female', 'malay', 'teens']) nak nombor ni tak ada apalah (['female', 'malay', 'teens']) weh kau telefon lama lagi ke macam biasalah ni sebab apa pula dia kata pun pasal aku tak nampak simple sangat macam tujuh malas selama jah tu kau akulah macam tu (['male', 'others', 'teens']) (['male', 'others', 'fifties']) siapa tu kena tukar dengan kau dulu kita orang satu beg tapi bezanya aku tak pandai kipas macam dia tu sama sekarang ni semua nak kipas tahu pun (['male', 'malay', 'teens']) assalamualaikum tu asyik ada apa saya tahu pejabat kan (['female', 'malay', 'teens']) ya betul saya dah tak sini sebab nak tolong datuk tolong apa ni saya sampai pagi macam ni mesti datuk tengah fikir nak pakai stokin apa dia kata apa kata (['male', 'malay', 'teens']) mana tahu kadang kadang saya tak tahu nak pakai topi mana satu dengan kasut yang mana kita tahu satu (['male', 'malay', 'twenties']) atuk tak payahlah terkejut tak tahu nak tahu saya ni memang pakar kalau buat tolong orang bagus tak macam tu tahun ni saya tolong saya tak tahulah cakap apa (['male', 'malay', 'teens']) (['female', 'manglish', 'not an age']) awak ni betul betul ada kagum rashid (['male', 'not a language', 'twenties']) banyak sudah tua saya akan tolong datuk buat keputusan tempat okey stokin warna kelabu ni kata kita sesuai dengan tu sebab warna kelabu (['female', 'malay', 'teens']) mempengaruhimu seorang kalau dah tu nak tahu warna kelabu ni dikaitkan dengan kemerdekaan sesuai dengan stoking warna merah tu (['male', 'malay', 'teens']) lampau benda tu saya rasa tak sesuai dengan perwatakan datuk hamba dan lupa kalau awak saya macam macam (['male', 'malay', 'twenties']) ya good question pokemon ni sesuai ini melambangkannya jatuh ni seorang yang ada tak sama okey (['male', 'malay', 'teens']) " ] } ], "source": [ "samples = malaya_speech.streaming.torchaudio.stream('speech/podcast/2x5%20Ep%2010.wav',\n", " vad_model = p_vad, \n", " asr_model = p_asr,\n", " classification_model = p_classification,\n", " segment_length = 320)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "26" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(samples)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "import IPython.display as ipd\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'wav_data': array([0.01577759, 0.01583862, 0.01895142, ..., 0.01202393, 0.01086426,\n", " 0.0057373 ], dtype=float32),\n", " 'timestamp': datetime.datetime(2023, 2, 17, 1, 32, 19, 765981),\n", " 'asr_model': 'tak boleh macam ni',\n", " 'classification_model': ['female', 'malay', 'teens']}" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "samples[4]" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ipd.Audio(samples[4]['wav_data'], rate = 16000)" ] }, { "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" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }