{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Realtime Alignment\n", "\n", "Let say you want to align realtime recording / input, 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/realtime-alignment](https://github.com/huseinzol05/malaya-speech/tree/master/example/realtime-alignment).\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": [ { "name": "stderr", "output_type": "stream", "text": [ "Cannot import beam_search_ops from Tensorflow Addons, ['malaya.jawi_rumi.deep_model', 'malaya.phoneme.deep_model', 'malaya.rumi_jawi.deep_model', 'malaya.stem.deep_model'] will not available to use, make sure Tensorflow Addons version >= 0.12.0\n", "check compatible Tensorflow version with Tensorflow Addons at https://github.com/tensorflow/addons/releases\n", "/Users/huseinzolkepli/.pyenv/versions/3.9.4/lib/python3.9/site-packages/tqdm/auto.py:22: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n", "torchaudio.io.StreamReader exception: FFmpeg libraries are not found. Please install FFmpeg.\n", "`torchaudio.io.StreamReader` is not available, `malaya_speech.streaming.torchaudio.stream` is not able to use.\n", "`openai-whisper` is not available, native whisper processor is not available, will use huggingface processor instead.\n", "`torchaudio.io.StreamReader` is not available, `malaya_speech.streaming.torchaudio` 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": 2, "metadata": { "scrolled": true }, "outputs": [], "source": [ "vad_model = malaya_speech.vad.webrtc()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 3, "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", " vad_model=None,\n", " asr_model=None,\n", " classification_model=None,\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 pyaudio 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", " device: None, optional (default=None)\n", " `device` parameter for pyaudio, check available devices from `sounddevice.query_devices()`.\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", " 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": [ "### Check available devices" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "> 0 MacBook Air Microphone, Core Audio (1 in, 0 out)\n", "< 1 MacBook Air Speakers, Core Audio (0 in, 2 out)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import sounddevice\n", "\n", "sounddevice.query_devices()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default it will use `0` index." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load ASR model" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "model = malaya_speech.stt.transducer.transformer(model = 'conformer')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Force Alignment Pipeline\n", "\n", "Feel free to add speech enhancement or any function, but in this example, I just keep it simple.\n", "\n", "Right now only transducer Tensorflow model supported `force_alignment` method." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_asr = Pipeline()\n", "pipeline_asr = (\n", " p_asr.map(lambda x: model.predict_alignment(x), 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 realtime engine will throw an error**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Start Recording" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Again, once you start to run the code below, it will straight away recording your voice**. \n", "\n", "If you run in jupyter notebook, press button stop up there to stop recording, if in terminal, press `CTRL + c`." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{'text': 'helo', 'start': 0.040000003, 'end': 0.1300000047683716}] [{'text': 'nama', 'start': 0.080000006, 'end': 0.21000000298023225}, {'text': 'saya', 'start': 0.28, 'end': 0.49000001907348634}] [] [{'text': 'hari', 'start': 0.040000003, 'end': 0.2500000095367432}, {'text': 'ini', 'start': 0.28, 'end': 0.2900000011920929}, {'text': 'saya', 'start': 0.52000004, 'end': 0.65000004529953}, {'text': 'nak', 'start': 0.76000005, 'end': 0.7700000500679016}, {'text': 'cakap', 'start': 1.0, 'end': 1.2100000476837158}, {'text': 'tentang', 'start': 1.24, 'end': 1.610000023841858}] [{'text': 'ini', 'start': 0.080000006, 'end': 0.09000000566244125}, {'text': 'saya', 'start': 0.32000002, 'end': 0.5700000023841858}] [{'text': 'saya', 'start': 0.24000001, 'end': 0.37000001430511475}, {'text': 'macam', 'start': 0.44000003, 'end': 0.65000004529953}, {'text': 'tu', 'start': 1.08, 'end': 1.0900000429153442}] [{'text': 'dan', 'start': 0.120000005, 'end': 0.1300000047683716}, {'text': 'saya', 'start': 0.4, 'end': 0.49000001907348634}, {'text': 'tak', 'start': 0.56, 'end': 0.5700000023841858}, {'text': 'suka', 'start': 0.76000005, 'end': 0.9300000166893005}, {'text': 'mandi', 'start': 1.0, 'end': 1.1700000858306885}] [{'text': 'terima', 'start': 0.040000003, 'end': 0.09000000566244125}, {'text': 'kasih', 'start': 0.24000001, 'end': 0.49000001907348634}] " ] } ], "source": [ "samples = malaya_speech.streaming.pyaudio.stream(vad_model = p_vad, asr_model = p_asr,\n", " segment_length = 320)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Actually it is pretty nice. As you can see, it able to transcribe realtime, you can try it by yourself." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "import IPython.display as ipd\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'wav_data': array([-0.00130833, -0.00126185, -0.00101168, ..., 0.00048238,\n", " 0.00061575, 0.00031507], dtype=float32),\n", " 'timestamp': datetime.datetime(2023, 2, 17, 1, 42, 21, 411091),\n", " 'asr_model': [{'text': 'dan',\n", " 'start': 0.120000005,\n", " 'end': 0.1300000047683716},\n", " {'text': 'saya', 'start': 0.4, 'end': 0.49000001907348634},\n", " {'text': 'tak', 'start': 0.56, 'end': 0.5700000023841858},\n", " {'text': 'suka', 'start': 0.76000005, 'end': 0.9300000166893005},\n", " {'text': 'mandi', 'start': 1.0, 'end': 1.1700000858306885}]}" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "samples[-2]" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ipd.Audio(samples[-2]['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.9.4" }, "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 }