diff --git a/simple-nerd-dictation-installer.sh b/simple-nerd-dictation-installer.sh new file mode 100644 index 0000000..da2ffc7 --- /dev/null +++ b/simple-nerd-dictation-installer.sh @@ -0,0 +1,130 @@ +#!/bin/bash +# +# Install nerd-dictation offline speech2text tool script using VOSK backend/model. +# +# Follow the installer repo at: +# - https://forge.switnet.net/Ark74/simple-nerd-dictation-installer +# +# Nerd Dictation repo at: +# - https://github.com/ideasman42/nerd-dictation + +set -e + +if [ "$(id -u)" = 0 ]; then + echo "Please don't use with root privileges, sudo will be used only when necessary!" + exit 0 +fi +if dpkg-architecture -e amd64 ;then + echo "Supported architecture." +else + echo "Warning: Only run this script on amd64 arch." + exit +fi + +ENGLISH_VOSK_MODEL="https://alphacephei.com/vosk/models/vosk-model-en-us-0.22-lgraph.zip" +SPANISH_VOSK_MODEL="https://alphacephei.com/vosk/models/vosk-model-small-es-0.42.zip" +FRENCH_VOSK_MODEL="https://alphacephei.com/vosk/models/vosk-model-small-fr-0.22.zip" +GERMAN_VOSK_MODEL="https://alphacephei.com/vosk/models/vosk-model-small-de-0.15.zip" +CHINESE_VOSK_MODEL="https://alphacephei.com/vosk/models/vosk-model-small-cn-0.22.zip" +NERD_DIC_GIT_REPO="https://github.com/ideasman42/nerd-dictation.git" +OPT_VOSK="/opt/vosk-python" + +# Select language. +printf "\n> Vosk Model Language selection.\n" +PS3='Select one of the available language models to use on nerd-dictation: ' +options=("English" "Spanish" "French" "German" "Chinese" "Exit") +select opt in "${options[@]}" +do + case $opt in + "English") + printf "\n > Selecting English model.\n" + VOSK_MODEL="$ENGLISH_VOSK_MODEL" + break + ;; + "Spanish") + printf "\n > Selecting Spanish model.\n" + VOSK_MODEL="$SPANISH_VOSK_MODEL" + break + ;; + "French") + printf "\n > Selecting French model.\n" + VOSK_MODEL="$FRENCH_VOSK_MODEL" + break + ;; + "German") + printf "\n > Selecting German model.\n" + VOSK_MODEL="$GERMAN_VOSK_MODEL" + break + ;; + "Chinese") + printf "\n > Selecting Chinese model.\n" + VOSK_MODEL="$CHINESE_VOSK_MODEL" + break + ;; + "Exit") + printf "\n > Exit installer.\n" + exit 0 + break + ;; + *) echo "Invalid option $REPLY, choose one number of the above.";; + esac +done +VOSK_FOLDER="$(basename $VOSK_MODEL|sed 's|.zip||')" + +# Install dependencies +sudo apt install -y git ssh python3-setuptools pulseaudio-utils xdotool + +# Install vosk python3 module. +[ -d "$OPT_VOSK" ] && sudo rm -rf "$OPT_VOSK" +sudo mkdir "$OPT_VOSK" +cat << EOF | sudo tee "$OPT_VOSK"/setup.py +from setuptools import setup + +setup( + install_requires=['vosk'], + dependency_links=[ + 'https://files.pythonhosted.org/packages/fc/ca/83398cfcd557360a3d7b2d732aee1c5f6999f68618d1645f38d53e14c9ff/vosk-0.3.45-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl', + ], +) +EOF +cd "$OPT_VOSK" +sudo python3 "$OPT_VOSK"/setup.py install +if [ $? = 0 ]; then + sudo rm "$OPT_VOSK"/setup.py +else + echo "something went wrong, please check setup.py file" + exit +fi + +# Cleaning existing local directories and binary link. +rm -rf "$HOME"/.local/nerd-dictation +rm -f "$HOME"/.local/bin/nerd-dictation +rm -rf "$HOME"/.config/nerd-dictation + +# Set repo as local package. +cd "$HOME"/.local +git clone "$NERD_DIC_GIT_REPO" +cd nerd-dictation + +# Setup language model +wget "$VOSK_MODEL" +unzip "$(basename $VOSK_MODEL)" +if [ $? = 0 ]; then + rm "$(basename $VOSK_MODEL)" +else + echo "something went wrong, please check $(basename $VOSK_MODEL) file" + exit +fi +mv "$VOSK_FOLDER" model +mkdir "$HOME"/.config/nerd-dictation +mv model "$HOME"/.config/nerd-dictation/ + +# Setup local bin for nerd-dictation +[ ! -d "$HOME"/.local/bin ] && mkdir "$HOME"/.local/bin +ln -s "$HOME"/.local/nerd-dictation/nerd-dictation "$HOME"/.local/bin + +if [ $? = 0 ]; then + echo "Completed script!\nPlease exit and login for nerd-dictation to be used on the terminal." +else + echo "Something went wrong please check." +fi