Because the DeepSpeech project is not supporting Python bindings for Python 3.8 and later for 64 bit arm systems (aarch64), e.g. used on the Raspberry Pi 4 running Ubuntu server 20.04, DeepSpeech and DeepSpeech-TFLite must be compiled manually.
You have to install Bazel 3.1.0 first:
wget https://github.com/bazelbuild/bazel/releases/download/3.7.2/bazel-3.7.2-linux-arm64 chmod 755 bazel-3.7.2-linux-arm64 mv bazel-3.7.2-linux-arm64 /usr/local/bin/bazel cd "/usr/local/lib/bazel/bin" && curl -fLO https://releases.bazel.build/3.1.0/release/bazel-3.1.0-linux-x86_64 && chmod +x bazel-3.1.0-linux-x86_64
Install Python 3.8 locally and set it as default (this should be default on Ubuntu 20.04 and can be skipped):
git clone https://github.com/pyenv/pyenv.git ~/.pyenv # Follow instructions on https://github.com/pyenv/pyenv sudo apt-get install libbz2-dev libssl-dev libreadline-dev libsqlite3-dev pyenv install 3.8.10 pyenv local 3.8.10
git clone https://github.com/mozilla/DeepSpeech.git git checkout v0.9.3 git submodule sync tensorflow/ git submodule update --init tensorflow/ cd tensorflow
Configure:
When configuring TensorFlow use "-march=armv8-a+crc -Wno-sign-compare" when you are asked:
./configure
Compile:
NOTE: This is targeting TFLite, but in the comments also the compilation for standard DeepSpeech is given.
# Use tmux to keep the process running, when logged in over ssh, if doing this locally, you can skip it tmux bazel clean # For non TFLite version: #bazel --host_jvm_args=-Xmx6000m build --workspace_status_command="bash native_client/bazel_workspace_status_cmd.sh" --local_cpu_resources=1 -c opt --copt=-O3 --copt="-D_GLIBCXX_USE_CXX11_ABI=0" --config=monolithic --config=nogcp --config=nohdfs --config=nonccl --copt=-fvisibility=hidden --config=noaws --copt=-ftree-vectorize --copt=-funsafe-math-optimizations --copt=-ftree-loop-vectorize --copt=-fomit-frame-pointer //native_client:libdeepspeech.so # For TFLite version bazel --host_jvm_args=-Xmx6000m build --workspace_status_command="bash native_client/bazel_workspace_status_cmd.sh" --local_cpu_resources=1 -c opt --copt=-O3 --copt="-D_GLIBCXX_USE_CXX11_ABI=0" --define=runtime=tflite --config=monolithic --config=nogcp --config=nohdfs --config=nonccl --copt=-fvisibility=hidden --config=noaws --copt=-ftree-vectorize --copt=-funsafe-math-optimizations --copt=-ftree-loop-vectorize --copt=-fomit-frame-pointer //native_client:libdeepspeech.so //native_client:tflite cd ../native_client sudo apt-get install -y libsox-dev libpng-dev libgsm1-dev libmagic-dev libltdl-dev liblzma-dev libbz2-dev swig make deepspeech # Do not execute `PREFIX=/usr/local sudo make install` like instructed in the manual, otherwise the libdeepspeech.so will not be included in the Python wheel
Apply this patch to use the correct naming for the Python wheel:
diff --cc native_client/definitions.mk
index a3af0970,72c12e3a..00000000
--- a/native_client/definitions.mk
+++ b/native_client/definitions.mk
@@@ -51,7 -52,11 +52,11 @@@ SOX_LDFLAGS := `pkg-config --libs s
endif # OS others
PYTHON_PACKAGES := numpy${NUMPY_BUILD_VERSION}
ifeq ($(OS),Linux)
+ ifeq ($(PROCESSOR),x86_64)
-PYTHON_PLATFORM_NAME := --plat-name manylinux1_x86_64
+PYTHON_PLATFORM_NAME ?= --plat-name manylinux1_x86_64
+ else
-PYTHON_PLATFORM_NAME := --plat-name linux_${PROCESSOR}
++PYTHON_PLATFORM_NAME ?= --plat-name linux_${PROCESSOR}
+ endif
endif
endif
NOTE: This is targeting TFLite, but in the comments also the compilation for standard DeepSpeech is given.
cd python # For non TFLite version # make bindings # For TFLite version make SETUP_FLAGS="--project_name deepspeech_tflite" bindings pip install dist/deepspeech*.whl