{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Realtime VAD\n", "\n", "Let say you want to cut your realtime recording audio by using VAD, 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-vad](https://github.com/huseinzol05/malaya-speech/tree/master/example/realtime-vad).\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "This module is language independent, so it save to use on different languages. Pretrained models trained on multilanguages.\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 malaya_speech\n", "from malaya_speech import Pipeline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load VAD model\n", "\n", "Fastest and common model people use, is webrtc. Read more about VAD at https://malaya-speech.readthedocs.io/en/latest/load-vad.html" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "webrtc = malaya_speech.vad.webrtc()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Recording interface\n", "\n", "So, to start recording audio including realtime VAD, we need to use `malaya_speech.streaming.record`. We use `pyaudio` library as the backend.\n", "\n", "```python\n", "def record(\n", " vad,\n", " asr_model = None,\n", " classification_model = None,\n", " device = None,\n", " input_rate: int = 16000,\n", " sample_rate: int = 16000,\n", " blocks_per_second: int = 50,\n", " padding_ms: int = 300,\n", " ratio: float = 0.75,\n", " min_length: float = 0.1,\n", " filename: str = None,\n", " spinner: bool = False,\n", "):\n", " \"\"\"\n", " Record an audio using pyaudio library. This record interface required a VAD model.\n", "\n", " Parameters\n", " ----------\n", " vad: object\n", " vad model / pipeline.\n", " asr_model: object\n", " ASR model / pipeline, will transcribe each subsamples realtime.\n", " classification_model: object\n", " classification pipeline, will classify each subsamples realtime.\n", " device: None\n", " `device` parameter for pyaudio, check available devices from `sounddevice.query_devices()`.\n", " input_rate: int, optional (default = 16000)\n", " sample rate from input device, this will auto resampling.\n", " sample_rate: int, optional (default = 16000)\n", " output sample rate.\n", " blocks_per_second: int, optional (default = 50)\n", " size of frame returned from pyaudio, frame size = sample rate / (blocks_per_second / 2).\n", " 50 is good for WebRTC, 30 or less is good for Malaya Speech VAD.\n", " padding_ms: int, optional (default = 300)\n", " size of queue to store frames, size = padding_ms // (1000 * blocks_per_second // 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 (s) to accept a subsample.\n", " filename: str, optional (default=None)\n", " if None, will auto generate name based on timestamp.\n", " spinner: bool, optional (default=False)\n", " if True, will use spinner object from halo library.\n", "\n", "\n", " Returns\n", " -------\n", " result : [filename, samples]\n", " \"\"\"\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Once you start to run the code below, it will straight away recording your voice**. Right now I am using built-in microphone.\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": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "saved audio to savewav_2020-11-26_22-36-06_294832.wav (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ... Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ... Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ... Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...\n", "\r" ] }, { "data": { "text/plain": [ "'savewav_2020-11-26_22-36-06_294832.wav'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "\r" ] } ], "source": [ "file, samples = malaya_speech.streaming.record(webrtc)\n", "file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "get the audio at [malaya-speech/speech/record](https://github.com/huseinzol05/malaya-speech/tree/master/speech/record)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, it will automatically save to a file, and you can check the length of samples." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "\r" ] } ], "source": [ "len(samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "means, we got 4 subsamples!" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "\r" ] } ], "source": [ "import IPython.display as ipd\n", "ipd.Audio(file)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "\r" ] } ], "source": [ "ipd.Audio(malaya_speech.astype.to_ndarray(samples[0][0]), rate = 16000)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "\r" ] } ], "source": [ "ipd.Audio(malaya_speech.astype.to_ndarray(samples[1][0]), rate = 16000)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "\r" ] } ], "source": [ "ipd.Audio(malaya_speech.astype.to_ndarray(samples[2][0]), rate = 16000)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "\r" ] } ], "source": [ "ipd.Audio(malaya_speech.astype.to_ndarray(samples[3][0]), rate = 16000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Use pipeline\n", "\n", "We know, webrtc does not work really good in noisy environment, so to improve that, we can use VAD deep model from malaya-speech." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING:root:Load quantized model will cause accuracy drop.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /Users/huseinzolkepli/Documents/malaya-speech/malaya_speech/utils/__init__.py:66: The name tf.gfile.GFile is deprecated. Please use tf.io.gfile.GFile instead.\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /Users/huseinzolkepli/Documents/malaya-speech/malaya_speech/utils/__init__.py:66: The name tf.gfile.GFile is deprecated. Please use tf.io.gfile.GFile instead.\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /Users/huseinzolkepli/Documents/malaya-speech/malaya_speech/utils/__init__.py:68: The name tf.GraphDef is deprecated. Please use tf.compat.v1.GraphDef instead.\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /Users/huseinzolkepli/Documents/malaya-speech/malaya_speech/utils/__init__.py:68: The name tf.GraphDef is deprecated. Please use tf.compat.v1.GraphDef instead.\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /Users/huseinzolkepli/Documents/malaya-speech/malaya_speech/utils/__init__.py:61: The name tf.InteractiveSession is deprecated. Please use tf.compat.v1.InteractiveSession instead.\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:tensorflow:From /Users/huseinzolkepli/Documents/malaya-speech/malaya_speech/utils/__init__.py:61: The name tf.InteractiveSession is deprecated. Please use tf.compat.v1.InteractiveSession instead.\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r" ] } ], "source": [ "vad_model = malaya_speech.vad.deep_model(model = 'vggvox-v2', quantized = True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**pyaudio will returned int16 bytes, so we need to change to numpy array, normalize it to -1 and +1 floating point**." ] }, { "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" }, { "name": "stdout", "output_type": "stream", "text": [ "\r" ] } ], "source": [ "p = Pipeline()\n", "pipeline = (\n", " p.map(malaya_speech.astype.to_ndarray)\n", " .map(malaya_speech.astype.int_to_float)\n", " .map(vad_model)\n", ")\n", "p.visualize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Once you start to run the code below, it will straight away recording your voice**. Right now I am using built-in microphone.\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": 14, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/librosa/core/spectrum.py:224: UserWarning: n_fft=512 is too small for input signal of length=320\n", " n_fft, y.shape[-1]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "saved audio to savewav_2020-11-26_22-40-56_929661.wav (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ... Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ... Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ... Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...| Listening (ctrl-C to stop recording) .../ Listening (ctrl-C to stop recording) ...- Listening (ctrl-C to stop recording) ...\\ Listening (ctrl-C to stop recording) ...\n", "\r" ] }, { "data": { "text/plain": [ "'savewav_2020-11-26_22-40-56_929661.wav'" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [] } ], "source": [ "file, samples = malaya_speech.streaming.record(p)\n", "file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "get the audio at [malaya-speech/speech/record](https://github.com/huseinzol05/malaya-speech/tree/master/speech/record)." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [] } ], "source": [ "len(samples)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [] } ], "source": [ "ipd.Audio(file)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [] } ], "source": [ "ipd.Audio(malaya_speech.astype.to_ndarray(samples[0]), rate = 16000)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [] } ], "source": [ "ipd.Audio(malaya_speech.astype.to_ndarray(samples[1]), rate = 16000)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [] } ], "source": [ "ipd.Audio(malaya_speech.astype.to_ndarray(samples[2]), rate = 16000)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [] } ], "source": [ "ipd.Audio(malaya_speech.astype.to_ndarray(samples[3]), rate = 16000)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.7" } }, "nbformat": 4, "nbformat_minor": 4 }