{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"2022-01-03-asr.ipynb","provenance":[{"file_id":"https://github.com/recohut/nbs/blob/main/raw/3e4f7482-f98c-4da9-9881-d672d3593be9.ipynb","timestamp":1644426823870}],"collapsed_sections":[],"toc_visible":true,"authorship_tag":"ABX9TyPC88O3N7FLUeOQERyzB3KK"},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"cells":[{"cell_type":"markdown","source":["# Automatic Speech Recognition"],"metadata":{"id":"XYagIcaoeUGQ"}},{"cell_type":"markdown","metadata":{"id":"qniRUjlo7GOi"},"source":["### Loading Libraries"]},{"cell_type":"code","metadata":{"id":"FMeQoLFi32xL"},"source":["import os\n","import sys\n","from os.path import exists, join, basename, splitext\n","from IPython.display import YouTubeVideo"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"eNlh7bZJ-3BY"},"source":["!pip install -q youtube-dl librosa python_speech_features sentencepiece\n","!pip install jiwer\n","import jiwer"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"2a2EdR8z86JQ"},"source":["### Loading Data"]},{"cell_type":"code","metadata":{"id":"xUNTuB-U4nfT","outputId":"a826573e-a53d-437a-dd1a-eec1d0fead65","executionInfo":{"status":"ok","timestamp":1587648176572,"user_tz":-330,"elapsed":20969,"user":{"displayName":"Sparsh Agarwal","photoUrl":"","userId":"13037694610922482904"}},"colab":{"base_uri":"https://localhost:8080/","height":321}},"source":["# Get the YouTube Video\n","YOUTUBE_ID = 'mi8N5gDVpeg'\n","YouTubeVideo(YOUTUBE_ID)"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["\n"," \n"," "],"text/plain":[""],"image/jpeg":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBAcICgkICAgICQkJCQgICQkICAgIBwgICQgICAgJCAgIChAOCAgPCQgIDhUODhERExMTCA4WGBYSGBASExIBBQUFCAcIDwkJDxIODw0SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEv/AABEIAWgB4AMBIgACEQEDEQH/xAAdAAABBAMBAQAAAAAAAAAAAAAAAgMGBwQFCAEJ/8QAaBAAAgECAwQGBAgHBwwPBgcBAQIDAAQFERIGEyExBxQiQVFhCDJxkRUjQlKBodHwVGJykrHB0iQzgpXU1eEJFhc0RFNWc3STlNMYJSY1NkNGY3WForK1xfFkg4SjpLRVZZals8PERf/EABsBAQACAwEBAAAAAAAAAAAAAAABAgMEBQYH/8QAOBEAAgEDAgQDBQcDBAMAAAAAAAECAwQRITEFEkFRE3GBIjJhkdEGFCNCocHwM1KxFXLh8RZigv/aAAwDAQACEQMRAD8A4yooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAooooAop7cN5ff6KNy3l9/ooBminty3l9/oo3LeX3+igGaKe3LeX3+ivDEfKgG8qMqNNe6aE4Z5lRlXumjTQYYmilhKcW2by+v7KDAxRWR1VvL6/sr3qbeX1/ZQgxqKyxZP4r9f2V6MPfxX6/soDDorNGGv4r9f2V78GSeKe8/s0Bg0Vn/BcninvP7NKGEy/Oj95/ZoDXUVshg8vzo/e37NenBpfnR+9v2aA1udFZMlow7x9f2UjcN5ff6KjKLqnLsM0U/1dvL6/so6s3iPr+ynMifCn2GKM6yOqt4j6/srLtMGll9VkH5Rb9S0yg6UlujV0VI02Quz8uD86T/V0obGXfz7f8+T/AFdW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\n"},"metadata":{"tags":[]},"execution_count":3}]},{"cell_type":"code","metadata":{"id":"IBRMsz3m5L6G","outputId":"429dc338-4b0c-40de-da41-1cee821d2ec2","executionInfo":{"status":"ok","timestamp":1587648193981,"user_tz":-330,"elapsed":38355,"user":{"displayName":"Sparsh Agarwal","photoUrl":"","userId":"13037694610922482904"}},"colab":{"base_uri":"https://localhost:8080/","height":102}},"source":["# Download, extract audio and convert to wav\n","!rm -rf *.wav\n","!youtube-dl --extract-audio --audio-format wav --output \"test.%(ext)s\" https://www.youtube.com/watch\\?v\\={YOUTUBE_ID}"],"execution_count":null,"outputs":[{"output_type":"stream","text":["[youtube] mi8N5gDVpeg: Downloading webpage\n","[download] Destination: test.webm\n","\u001b[K[download] 100% of 4.68MiB in 00:00\n","[ffmpeg] Destination: test.wav\n","Deleting original file test.webm (pass -k to keep)\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"SGBqamRPD5GT","outputId":"f9cf9c84-4bbd-4007-b08d-dea6c1285730","executionInfo":{"status":"ok","timestamp":1587648198667,"user_tz":-330,"elapsed":43008,"user":{"displayName":"Sparsh Agarwal","photoUrl":"","userId":"13037694610922482904"}},"colab":{"base_uri":"https://localhost:8080/","height":496}},"source":["!ffmpeg -i test.wav -ss 00:00:11 -to 00:01:11 -c copy test2.wav"],"execution_count":null,"outputs":[{"output_type":"stream","text":["ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers\n"," built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)\n"," configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared\n"," libavutil 55. 78.100 / 55. 78.100\n"," libavcodec 57.107.100 / 57.107.100\n"," libavformat 57. 83.100 / 57. 83.100\n"," libavdevice 57. 10.100 / 57. 10.100\n"," libavfilter 6.107.100 / 6.107.100\n"," libavresample 3. 7. 0 / 3. 7. 0\n"," libswscale 4. 8.100 / 4. 8.100\n"," libswresample 2. 9.100 / 2. 9.100\n"," libpostproc 54. 7.100 / 54. 7.100\n","\u001b[0;33mGuessed Channel Layout for Input Stream #0.0 : stereo\n","\u001b[0mInput #0, wav, from 'test.wav':\n"," Metadata:\n"," encoder : Lavf57.83.100\n"," Duration: 00:05:03.03, bitrate: 1536 kb/s\n"," Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s\n","Output #0, wav, to 'test2.wav':\n"," Metadata:\n"," ISFT : Lavf57.83.100\n"," Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s\n","Stream mapping:\n"," Stream #0:0 -> #0:0 (copy)\n","Press [q] to stop, [?] for help\n","size= 11252kB time=00:00:59.99 bitrate=1536.4kbits/s speed=2.84e+03x \n","video:0kB audio:11252kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000677%\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"X4btkrmIEKRx","colab":{"base_uri":"https://localhost:8080/","height":75},"outputId":"041875c2-b397-4b78-8776-ce74eae330cf","executionInfo":{"status":"ok","timestamp":1587648254305,"user_tz":-330,"elapsed":98629,"user":{"displayName":"Sparsh Agarwal","photoUrl":"","userId":"13037694610922482904"}}},"source":["import IPython\n","IPython.display.Audio(\"test2.wav\")"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["\n"," \n"," "],"text/plain":[""]},"metadata":{"tags":[]},"execution_count":6}]},{"cell_type":"code","metadata":{"id":"Vyv8G0cg_Vm_"},"source":["ground_truth = '''we didn't start with much money or many endorsements. \n","our campaign was not hatched in the halls of washington.\n","it began in the backyards of des moines.\n","and the living rooms of concord and the front porches of charleston.\n","it was built by working men and women who dug into what little savings they had\n","to give five dollars and ten dollars and twenty dollars to the cause.\n","it grew strength from the young people who rejected the myth of their generations' \n","apathy. who left their homes and their families for jobs that offered little pay\n","and less sleep. it drew strength from the not so young people who braved the bitter\n","cold and scorching heat to knock on doors of perfect strangers. and from the\n","millions of americans who volunteered and organized and proved that more than \n","two centuries later a government of the people by the people and for the people\n","has not perished from the earth.'''"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"3o51RO419EDS"},"source":["### DeepSpeech"]},{"cell_type":"code","metadata":{"id":"x8obp0wD4iIT"},"source":["# Install DeepSpeech\n","if not exists('deepspeech-0.6.1-models'):\n"," !apt-get install -qq sox\n"," !pip install -q deepspeech-gpu==0.6.1 youtube-dl\n"," !wget https://github.com/mozilla/DeepSpeech/releases/download/v0.6.1/deepspeech-0.6.1-models.tar.gz\n"," !tar xvfz deepspeech-0.6.1-models.tar.gz"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"lMBdIXIs5cJM","outputId":"94dc9249-0aea-4c19-aa9a-4961d52a47bd","executionInfo":{"status":"ok","timestamp":1587646360465,"user_tz":-330,"elapsed":31290,"user":{"displayName":"Sparsh Agarwal","photoUrl":"","userId":"13037694610922482904"}},"colab":{"base_uri":"https://localhost:8080/","height":513}},"source":["!deepspeech --model deepspeech-0.6.1-models/output_graph.pbmm --lm deepspeech-0.6.1-models/lm.binary --trie deepspeech-0.6.1-models/trie --audio test2.wav"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Loading model from file deepspeech-0.6.1-models/output_graph.pbmm\n","TensorFlow: v1.14.0-21-ge77504a\n","DeepSpeech: v0.6.1-0-g3df20fe\n","2020-04-23 12:52:17.666078: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 AVX512F FMA\n","2020-04-23 12:52:17.670574: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcuda.so.1\n","2020-04-23 12:52:17.705373: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n","2020-04-23 12:52:17.705965: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties: \n","name: Tesla T4 major: 7 minor: 5 memoryClockRate(GHz): 1.59\n","pciBusID: 0000:00:04.0\n","2020-04-23 12:52:17.705984: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.\n","2020-04-23 12:52:17.706033: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n","2020-04-23 12:52:17.706529: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n","2020-04-23 12:52:17.707017: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0\n","2020-04-23 12:52:18.069651: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1181] Device interconnect StreamExecutor with strength 1 edge matrix:\n","2020-04-23 12:52:18.069691: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1187] 0 \n","2020-04-23 12:52:18.069700: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 0: N \n","2020-04-23 12:52:18.069860: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n","2020-04-23 12:52:18.070397: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n","2020-04-23 12:52:18.070929: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n","2020-04-23 12:52:18.071437: W tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:40] Overriding allow_growth setting because the TF_FORCE_GPU_ALLOW_GROWTH environment variable is set. Original config value was 0.\n","2020-04-23 12:52:18.071478: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14192 MB memory) -> physical GPU (device: 0, name: Tesla T4, pci bus id: 0000:00:04.0, compute capability: 7.5)\n","Loaded model in 0.416s.\n","Loading language model from files deepspeech-0.6.1-models/lm.binary deepspeech-0.6.1-models/trie\n","Loaded language model in 0.000291s.\n","Warning: original sample rate (48000) is different than 16000hz. Resampling might produce erratic speech recognition.\n","Running inference.\n","we don't say but much money or many norse our campaign was not had in the hall at washington and began in the back yards of the boy the livin rooms have continent porch is of charles i was bellamy wortman and women who dug and to what little savings had to give five dollars ten dollars and twenty dollars sadako it grew strained from the young people over jeered at their generation at the letter home and their families for jobs that offer little pay and less play iteratum the nut so young people who breathe better cold and scorching heat on not on door the furbishing and from the millions of americans a volunteer and organize and from bear than two centuries later a government of the people by the people and for the people had not paris from \n","Inference took 13.224s for 180.032s audio file.\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"dQAbsiV4ACPa"},"source":["transcription_deepspeech = '''we don't say but much money or many norse our \n","campaign was not had in the hall at washington and began in the back yards of \n","the boy the livin rooms have continent porch is of charles i was bellamy \n","wortman and women who dug and to what little savings had to give five dollars \n","ten dollars and twenty dollars sadako it grew strained from the young people \n","over jeered at their generation at the letter home and their families for jobs \n","that offer little pay and less play iteratum the nut so young people who breathe \n","better cold and scorching heat on not on door the furbishing and from the millions \n","of americans a volunteer and organize and from bear than two centuries later a \n","government of the people by the people and for the people had not paris from '''"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"Ky6CV3mMA8Uv","colab":{"base_uri":"https://localhost:8080/","height":68},"outputId":"d581eecc-f63d-4bab-a4e3-459f0318d903","executionInfo":{"status":"ok","timestamp":1587646501601,"user_tz":-330,"elapsed":970,"user":{"displayName":"Sparsh Agarwal","photoUrl":"","userId":"13037694610922482904"}}},"source":["measures = jiwer.compute_measures(ground_truth, transcription_deepspeech)\n","print(measures['wer'])\n","print(measures['mer'])\n","print(measures['wil'])"],"execution_count":null,"outputs":[{"output_type":"stream","text":["35.0\n","0.9929078014184397\n","0.99822695035461\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"Ba7ppx7n9xwI"},"source":["### Wave2Letter+"]},{"cell_type":"code","metadata":{"id":"APbDUwPC5tkg","outputId":"b3c93e50-244a-4612-e314-e008ba95fbb5","executionInfo":{"status":"ok","timestamp":1587647136363,"user_tz":-330,"elapsed":4821,"user":{"displayName":"Sparsh Agarwal","photoUrl":"","userId":"13037694610922482904"}},"colab":{"base_uri":"https://localhost:8080/","height":34}},"source":["# Install Wave2Letter+\n","%tensorflow_version 1.x\n","git_repo_url = 'https://github.com/NVIDIA/OpenSeq2Seq.git'\n","project_name = splitext(basename(git_repo_url))[0]\n","if not exists(project_name):\n"," # clone and install dependencies\n"," !git clone -q --depth 1 {git_repo_url}\n"," !git checkout e958b7d\n"," !pip uninstall -y -q pymc3\n"," !pip install --upgrade joblib\n"," #!cd {project_name} && pip install -q -r requirements.txt\n"," !pip install -q youtube-dl librosa python_speech_features sentencepiece\n"," \n"," # create eval config\n"," !cp {project_name}/example_configs/speech2text/w2lplus_large_8gpus_mp.py {project_name}/conf.py\n"," !sed -i -e 's/data\\/librispeech\\/librivox-test-clean/test/' {project_name}/conf.py\n"," !sed -i -e 's/# \"use_lang/\"use_lang/' {project_name}/conf.py\n"," !echo 'backend = \"librosa\"' >> {project_name}/conf.py \n"," #!cat {project_name}/conf.py\n"," !echo \"wav_filename, wav_filesize, transcript\" > {project_name}/test.csv\n"," !echo \"test.wav, UNUSED, UNUSED\" >> {project_name}/test.csv\n","\n","sys.path.append(project_name)\n","\n","# Download pre-trained weights\n","def download_from_google_drive(file_id, file_name):\n"," # download a file from the Google Drive link\n"," !rm -f ./cookie\n"," !curl -c ./cookie -s -L \"https://drive.google.com/uc?export=download&id={file_id}\" > /dev/null\n"," confirm_text = !awk '/download/ {print $NF}' ./cookie\n"," confirm_text = confirm_text[0]\n"," !curl -Lb ./cookie \"https://drive.google.com/uc?export=download&confirm={confirm_text}&id={file_id}\" -o {file_name}\n"," \n","if not exists(join(project_name, 'w2l_log_folder')):\n"," download_from_google_drive('10EYe040qVW6cfygSZz6HwGQDylahQNSa', 'w2l_plus_large.tar')\n"," !tar xf w2l_plus_large.tar\n"," !mv w2l_plus_large {project_name}/w2l_log_folder"],"execution_count":null,"outputs":[{"output_type":"stream","text":["TensorFlow 1.x selected.\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"0Ls-M0Ge5cHi"},"source":["# !ffmpeg -loglevel panic -y -i downloaded.wav -acodec pcm_s16le -ac 1 -ar 16000 $project_name/test.wav\n","!ffmpeg -i test2.wav -ar 16000 $project_name/test.wav\n","!cd {project_name} && python run.py --config_file conf.py --mode=infer --infer_output_file=output.txt --use_horovod=False --num_gpus=1 --batch_size_per_gpu 1"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"gCEgHbEgMM96","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"6a2f8a55-1184-4c45-fd8d-714a0a380a14","executionInfo":{"status":"ok","timestamp":1587647988265,"user_tz":-330,"elapsed":5790,"user":{"displayName":"Sparsh Agarwal","photoUrl":"","userId":"13037694610922482904"}}},"source":["!tail -n1 {project_name}/output.txt"],"execution_count":null,"outputs":[{"output_type":"stream","text":["tail: cannot open 'OpenSeq2Seq/output.txt' for reading: No such file or directory\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"gNNhhHgQMsfy"},"source":["### Jasper"]},{"cell_type":"code","metadata":{"id":"uhesD_m-6Hgc"},"source":["# Installing Jasper\n","%tensorflow_version 1.x\n","git_repo_url = 'https://github.com/NVIDIA/OpenSeq2Seq.git'\n","project_name = splitext(basename(git_repo_url))[0]\n","if not exists(project_name):\n"," # clone and install dependencies\n"," !git clone -q --depth 1 {git_repo_url}\n"," !git checkout e958b7d\n"," !pip uninstall -y -q pymc3\n"," !pip install --upgrade joblib\n"," #!cd {project_name} && pip install -q -r requirements.txt\n"," !pip install -q youtube-dl librosa python_speech_features sentencepiece\n"," \n"," # create eval config\n"," !cp {project_name}/example_configs/speech2text/jasper10x5_LibriSpeech_nvgrad.py {project_name}/conf.py\n"," !sed -i -e 's/\\/data\\/librispeech\\/librivox-test-clean/test/' {project_name}/conf.py\n"," #!sed -i -e 's/# \"use_lang/\"use_lang/' {project_name}/conf.py\n"," !echo 'backend = \"librosa\"' >> {project_name}/conf.py \n"," #!cat {project_name}/conf.py\n"," !echo \"wav_filename, wav_filesize, transcript\" > {project_name}/test.csv\n"," !echo \"test.wav, UNUSED, UNUSED\" >> {project_name}/test.csv\n","\n","# Download pretrained weights\n","def download_from_google_drive(file_id, file_name):\n"," # download a file from the Google Drive link\n"," !rm -f ./cookie\n"," !curl -c ./cookie -s -L \"https://drive.google.com/uc?export=download&id={file_id}\" > /dev/null\n"," confirm_text = !awk '/download/ {print $NF}' ./cookie\n"," confirm_text = confirm_text[0]\n"," !curl -Lb ./cookie \"https://drive.google.com/uc?export=download&confirm={confirm_text}&id={file_id}\" -o {file_name}\n"," \n","if not exists(join(project_name, 'w2l_log_folder')):\n"," download_from_google_drive('1gzGT8HoVNKY1i5HNQTKaSoCu7JHV4siR', 'jasper_10x5_dr_sp_nvgrad.zip')\n"," !unzip jasper_10x5_dr_sp_nvgrad.zip\n"," !mv checkpoint {project_name}/jasper_log_folder"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"kg_b6Q8BOQrs"},"source":["#!ffmpeg -loglevel panic -y -i downloaded.wav -acodec pcm_s16le -ac 1 -ar 16000 {project_name}/test.wav\n","!ffmpeg -i test2.wav -ar 16000 $project_name/test.wav\n","!cd {project_name} && python run.py --config_file conf.py --mode=infer --infer_output_file=output.txt --use_horovod=False --num_gpus=1 --batch_size_per_gpu 1"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"ba3fGtOqNKSh","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"a17cc98b-2f8d-42f3-8856-ed6db2a8f8c3","executionInfo":{"status":"ok","timestamp":1587648597425,"user_tz":-330,"elapsed":69198,"user":{"displayName":"Sparsh Agarwal","photoUrl":"","userId":"13037694610922482904"}}},"source":["!tail -n1 {project_name}/output.txt"],"execution_count":null,"outputs":[{"output_type":"stream","text":["tail: cannot open 'OpenSeq2Seq/output.txt' for reading: No such file or directory\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"jlsbGs7qOc-1"},"source":["### QuartzNet"]},{"cell_type":"code","metadata":{"id":"Ql37_kXg6S-Y"},"source":["# Installing QuartzNet\n","!pip -q install wget youtube-dl wget tensorboardX kaldi-io marshmallow num2words ruamel.yaml soundfile sox torch-stft unidecode\n","!pip install -q nemo-toolkit==0.9.0 nemo-asr==0.9.0 #--no-deps\n","\n","# we need also Apex\n","if not exists('apex'):\n"," !git clone -q --depth 1 https://github.com/NVIDIA/apex\n"," !cd apex && pip install -q --no-cache-dir ./\n","\n","# Download pre-trained weights\n","if not exists('quartznet15x5_multidataset'):\n"," # download the pretrained weights\n"," !wget -nc -q --show-progress -O quartznet15x5.zip https://api.ngc.nvidia.com/v2/models/nvidia/multidataset_quartznet15x5/versions/1/zip\n"," !unzip quartznet15x5.zip && mkdir quartznet15x5_multidataset && mv Jasper* quartznet15x5.yaml quartznet15x5_multidataset\n","\n","\n","# Install\n","import json\n","from ruamel.yaml import YAML\n","import nemo\n","import nemo_asr\n","\n","WORK_DIR = \"/content/quartznet15x5_multidataset\"\n","MODEL_YAML = \"/content/quartznet15x5_multidataset/quartznet15x5.yaml\"\n","CHECKPOINT_ENCODER = \"/content/quartznet15x5_multidataset/JasperEncoder-STEP-243800.pt\"\n","CHECKPOINT_DECODER = \"/content/quartznet15x5_multidataset/JasperDecoderForCTC-STEP-243800.pt\"\n","# Set this to True to enable beam search decoder\n","ENABLE_NGRAM = False\n","# This is only necessary if ENABLE_NGRAM = True. Otherwise, set to empty string\n","LM_PATH = \"\"\n","\n","# Read model YAML\n","yaml = YAML(typ=\"safe\")\n","with open(MODEL_YAML) as f:\n"," jasper_model_definition = yaml.load(f)\n","labels = jasper_model_definition['labels']\n","\n","# Instantiate necessary Neural Modules\n","# Note that data layer is missing from here\n","neural_factory = nemo.core.NeuralModuleFactory(\n"," placement=nemo.core.DeviceType.GPU,\n"," backend=nemo.core.Backend.PyTorch)\n","data_preprocessor = nemo_asr.AudioToMelSpectrogramPreprocessor(factory=neural_factory)\n","jasper_encoder = nemo_asr.JasperEncoder(\n"," jasper=jasper_model_definition['JasperEncoder']['jasper'],\n"," activation=jasper_model_definition['JasperEncoder']['activation'],\n"," feat_in=jasper_model_definition['AudioToMelSpectrogramPreprocessor']['features'])\n","jasper_encoder.restore_from(CHECKPOINT_ENCODER, local_rank=0)\n","jasper_decoder = nemo_asr.JasperDecoderForCTC(\n"," feat_in=1024,\n"," num_classes=len(labels))\n","jasper_decoder.restore_from(CHECKPOINT_DECODER, local_rank=0)\n","greedy_decoder = nemo_asr.GreedyCTCDecoder()\n","\n","def wav_to_text(manifest, greedy=True):\n"," from ruamel.yaml import YAML\n"," yaml = YAML(typ=\"safe\")\n"," with open(MODEL_YAML) as f:\n"," jasper_model_definition = yaml.load(f)\n"," labels = jasper_model_definition['labels']\n","\n"," # Instantiate necessary neural modules\n"," data_layer = nemo_asr.AudioToTextDataLayer(\n"," shuffle=False,\n"," manifest_filepath=manifest,\n"," labels=labels, batch_size=1)\n","\n"," # Define inference DAG\n"," audio_signal, audio_signal_len, _, _ = data_layer()\n"," processed_signal, processed_signal_len = data_preprocessor(\n"," input_signal=audio_signal,\n"," length=audio_signal_len)\n"," encoded, encoded_len = jasper_encoder(audio_signal=processed_signal,\n"," length=processed_signal_len)\n"," log_probs = jasper_decoder(encoder_output=encoded)\n"," predictions = greedy_decoder(log_probs=log_probs)\n","\n"," if ENABLE_NGRAM:\n"," print('Running with beam search')\n"," beam_predictions = beam_search_with_lm(\n"," log_probs=log_probs, log_probs_length=encoded_len)\n"," eval_tensors = [beam_predictions]\n","\n"," if greedy:\n"," eval_tensors = [predictions]\n","\n"," tensors = neural_factory.infer(tensors=eval_tensors)\n"," if greedy:\n"," from nemo_asr.helpers import post_process_predictions\n"," prediction = post_process_predictions(tensors[0], labels)\n"," else:\n"," prediction = tensors[0][0][0][0][1]\n"," return prediction\n","\n","def create_manifest(file_path):\n"," # create manifest\n"," manifest = dict()\n"," manifest['audio_filepath'] = file_path\n"," manifest['duration'] = 18000\n"," manifest['text'] = 'todo'\n"," with open(file_path+\".json\", 'w') as fout:\n"," fout.write(json.dumps(manifest))\n"," return file_path+\".json\""],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"mF3WpWWy5cGx"},"source":["!ffmpeg -loglevel panic -y -i downloaded.wav -acodec pcm_s16le -ac 1 -ar 16000 test.wav\n","\n","transcription = wav_to_text(create_manifest('test.wav'))\n","\n","print('\\n\\n')\n","print(transcription)"],"execution_count":null,"outputs":[]}]}