Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0c37c88e61 | |||
| 50f05506a2 | |||
| b62068da69 | |||
| f69d7484ba | |||
| e478765b4e | |||
| 8bf673c412 | |||
| 8854f26dc1 | |||
| cf8f2319b8 | |||
| 782721fab3 | |||
| 43dc7a07c9 | |||
| be42447620 | |||
| 3a884888c4 | |||
| 3133666390 | |||
| ff0aea4177 | |||
| fa418d3129 | |||
| d4314a85d9 | |||
| 3d42551bfc | |||
| 6411924cf2 | |||
| 77d2196f00 | |||
| 3c53cd0236 | |||
| 46a75ec83e | |||
| 3e9c4bef68 | |||
| 465d1e61e0 | |||
| 563fcfcd49 | |||
| 0ff965a965 | |||
| 998eff8708 | |||
| 1dcf984669 | |||
| 21c2b2ef9d | |||
| 958c12cfb4 | |||
| 6dbc8dc35e |
+7
-6
@@ -37,19 +37,20 @@ ENV RHASSPY_VENV ${RHASSPY_APP}/.venv
|
||||
|
||||
WORKDIR /
|
||||
|
||||
COPY --from=build ${RHASSPY_VENV} ${RHASSPY_VENV}
|
||||
COPY --from=build ${RHASSPY_APP}/opt/kaldi/ ${RHASSPY_APP}/opt/kaldi/
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install --no-install-recommends --yes \
|
||||
python3 python3-dev \
|
||||
python3 python3-dev python3-setuptools python3-pip python3-venv \
|
||||
bash jq unzip curl perl \
|
||||
libportaudio2 libatlas3-base \
|
||||
libgfortran4 ca-certificates \
|
||||
sox espeak flite libttspico-utils alsa-utils lame \
|
||||
libasound2-plugins \
|
||||
libfreetype6-dev libpng-dev pkg-config libffi-dev libssl-dev \
|
||||
gstreamer1.0-tools gstreamer1.0-plugins-good
|
||||
|
||||
COPY --from=build ${RHASSPY_VENV} ${RHASSPY_VENV}
|
||||
COPY --from=build ${RHASSPY_APP}/opt/kaldi/ ${RHASSPY_APP}/opt/kaldi/
|
||||
gstreamer1.0-tools gstreamer1.0-plugins-good \
|
||||
mosquitto-clients
|
||||
|
||||
# Web interface
|
||||
ADD download/rhasspy-web-dist.tar.gz ${RHASSPY_APP}/
|
||||
@@ -76,4 +77,4 @@ COPY VERSION ${RHASSPY_APP}/
|
||||
ENV CONFIG_PATH /data/options.json
|
||||
ENV KALDI_PREFIX ${RHASSPY_APP}/opt
|
||||
|
||||
ENTRYPOINT ["/run.sh"]
|
||||
ENTRYPOINT ["/run.sh"]
|
||||
|
||||
@@ -3,6 +3,8 @@ SHELL := bash
|
||||
|
||||
DOCKER_PLATFORMS = linux/amd64,linux/arm64,linux/arm/v7
|
||||
|
||||
all: docker
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Docker
|
||||
# -----------------------------------------------------------------------------
|
||||
@@ -10,7 +12,7 @@ DOCKER_PLATFORMS = linux/amd64,linux/arm64,linux/arm/v7
|
||||
docker: web-dist
|
||||
docker buildx build . \
|
||||
--platform $(DOCKER_PLATFORMS) \
|
||||
--tag rhasspy/rhasspy-server:latest \
|
||||
--tag synesthesiam/rhasspy-server:latest \
|
||||
--push
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||

|
||||
# Rhasspy has [moved and improved!](https://github.com/rhasspy/rhasspy)
|
||||
|
||||
This repository contains code for an older version of Rhasspy (2.4).
|
||||
|
||||
---
|
||||
|
||||
Rhasspy (pronounced RAH-SPEE) is an offline voice assistant toolkit inspired by [Jasper](https://jasperproject.github.io/) that [supports many languages](#supported-languages). It works well with [Home Assistant](https://www.home-assistant.io/), [Hass.io](https://www.home-assistant.io/hassio/), and [Node-RED](https://nodered.org).
|
||||
|
||||
* [Documentation](https://rhasspy.readthedocs.io/)
|
||||
**A newer version of Rhasspy (2.5) is available at [https://github.com/rhasspy/rhasspy](https://github.com/rhasspy/rhasspy)**
|
||||
|
||||
* [Documentation](https://rhasspy.readthedocs.io/en/v2.4.20/)
|
||||
* [Discussion](https://community.rhasspy.org)
|
||||
* [Video Introduction](https://www.youtube.com/watch?v=ijKTR_GqWwA)
|
||||
* [Hass.IO Add-On Repository](https://github.com/synesthesiam/hassio-addons)
|
||||
|
||||
+12
-12
@@ -13,7 +13,7 @@ DEFINE_boolean 'system' true 'Install system dependencies'
|
||||
DEFINE_boolean 'flair' false 'Install flair'
|
||||
DEFINE_boolean 'precise' true 'Install Mycroft Precise'
|
||||
DEFINE_boolean 'adapt' true 'Install Mycroft Adapt'
|
||||
DEFINE_boolean 'google' false 'Install Google Text to Speech'
|
||||
DEFINE_boolean 'google' true 'Install Google Text to Speech'
|
||||
DEFINE_boolean 'kaldi' true 'Install Kaldi'
|
||||
DEFINE_boolean 'tools' true 'Install Rhasspy tools'
|
||||
DEFINE_boolean 'web' true 'Install web UI'
|
||||
@@ -170,7 +170,7 @@ case "${CPU_ARCH}" in
|
||||
FRIENDLY_ARCH=armhf
|
||||
;;
|
||||
|
||||
arm64v8)
|
||||
aarch64|arm64v8)
|
||||
FRIENDLY_ARCH=aarch64
|
||||
;;
|
||||
|
||||
@@ -234,11 +234,11 @@ export LD_LIBRARY_PATH="${venv}/lib:${LD_LIBRARY_PATH}"
|
||||
source "${venv}/bin/activate"
|
||||
|
||||
echo "Upgrading pip"
|
||||
"${PYTHON}" -m pip install --upgrade pip
|
||||
python3 -m pip install --upgrade pip
|
||||
|
||||
echo "Installing Python requirements"
|
||||
"${PYTHON}" -m pip install wheel setuptools
|
||||
"${PYTHON}" -m pip install requests
|
||||
python3 -m pip install wheel setuptools
|
||||
python3 -m pip install requests
|
||||
|
||||
# pytorch is not available on ARM
|
||||
case "${CPU_ARCH}" in
|
||||
@@ -275,18 +275,18 @@ sed -i '/^openfst/d' "${requirements_file}"
|
||||
python3 -m pip install -r "${requirements_file}"
|
||||
|
||||
# Install Python openfst wrapper
|
||||
"${PYTHON}" -m pip install \
|
||||
--global-option=build_ext \
|
||||
--global-option="-I${venv}/include" \
|
||||
--global-option="-L${venv}/lib" \
|
||||
-r <(grep '^openfst' "${this_dir}/requirements.txt")
|
||||
python3 -m pip install \
|
||||
--global-option=build_ext \
|
||||
--global-option="-I${venv}/include" \
|
||||
--global-option="-L${venv}/lib" \
|
||||
-r <(grep '^openfst' "${this_dir}/requirements.txt")
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Pocketsphinx for Python
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
pocketsphinx_file="${download_dir}/pocketsphinx-python.tar.gz"
|
||||
"${PYTHON}" -m pip install "${pocketsphinx_file}"
|
||||
python3 -m pip install "${pocketsphinx_file}"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Snowboy
|
||||
@@ -295,7 +295,7 @@ pocketsphinx_file="${download_dir}/pocketsphinx-python.tar.gz"
|
||||
case "${CPU_ARCH}" in
|
||||
x86_64|armv7l)
|
||||
snowboy_file="${download_dir}/snowboy-1.3.0.tar.gz"
|
||||
"${PYTHON}" -m pip install "${snowboy_file}"
|
||||
python3 -m pip install "${snowboy_file}"
|
||||
;;
|
||||
|
||||
*)
|
||||
|
||||
+18
-5
@@ -1,5 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
this_dir="$( cd "$( dirname "$0" )" && pwd )"
|
||||
|
||||
# Try to detemine where Rhasspy is located
|
||||
if [[ -z "${RHASSPY_APP}" ]]; then
|
||||
@@ -16,7 +15,21 @@ if [[ -f "${CONFIG_PATH}" ]]; then
|
||||
# Hass.IO configuration
|
||||
profile_name="$(jq --raw-output '.profile_name' "${CONFIG_PATH}")"
|
||||
profile_dir="$(jq --raw-output '.profile_dir' "${CONFIG_PATH}")"
|
||||
RHASSPY_ARGS="--profile \"${profile_name}\" --user-profiles \"${profile_dir}\""
|
||||
RHASSPY_ARGS=('--profile' "${profile_name}" '--user-profiles' "${profile_dir}")
|
||||
|
||||
# Copy user-defined asoundrc to root
|
||||
asoundrc="$(jq --raw-output '.asoundrc' "${CONFIG_PATH}")"
|
||||
if [[ ! -z "${asoundrc}" ]]; then
|
||||
echo "${asoundrc}" > /root/.asoundrc
|
||||
fi
|
||||
|
||||
# Add SSL settings
|
||||
ssl="$(jq --raw-output '.ssl' "${CONFIG_PATH}")"
|
||||
if [[ "${ssl}" == 'true' ]]; then
|
||||
certfile="$(jq --raw-output '.certfile' "${CONFIG_PATH}")"
|
||||
keyfile="$(jq --raw-output '.keyfile' "${CONFIG_PATH}")"
|
||||
RHASSPY_ARGS+=('--ssl' "/ssl/${certfile}" "/ssl/${keyfile}")
|
||||
fi
|
||||
fi
|
||||
|
||||
RHASSPY_VENV="${RHASSPY_APP}/.venv"
|
||||
@@ -27,10 +40,10 @@ if [[ -d "${RHASSPY_VENV}" ]]; then
|
||||
export LD_LIBRARY_PATH="${RHASSPY_VENV}/lib:${LD_LIBRARY_PATH}"
|
||||
fi
|
||||
|
||||
cd "${RHASSPY_APP}"
|
||||
cd "${RHASSPY_APP}" || exit 1
|
||||
|
||||
if [[ -z "${RHASSPY_ARGS}" ]]; then
|
||||
if [[ -z "${RHASSPY_ARGS[*]}" ]]; then
|
||||
python3 app.py "$@"
|
||||
else
|
||||
python3 app.py "${RHASSPY_ARGS}" "$@"
|
||||
python3 app.py "${RHASSPY_ARGS[@]}" "$@"
|
||||
fi
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
ARG BUILD_FROM
|
||||
FROM $BUILD_FROM
|
||||
LABEL maintainer="Michael Hansen <hansen.mike@gmail.com>"
|
||||
|
||||
ARG BUILD_ARCH
|
||||
ARG CPU_ARCH
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
ARG MAKE_THREADS=4
|
||||
|
||||
WORKDIR /
|
||||
|
||||
QEMU
|
||||
|
||||
SYSTEM_DEPENDENCIES
|
||||
|
||||
RHASSPY_TOOLS
|
||||
|
||||
PYTHON_REQUIREMENTS
|
||||
|
||||
PYTHON_POCKETSPHINX
|
||||
|
||||
SNOWBOY
|
||||
|
||||
TTS
|
||||
|
||||
KALDI
|
||||
|
||||
RUN ldconfig
|
||||
|
||||
# Copy bw and mllr_solve to /usr/bin
|
||||
RUN find / -name bw -exec cp '{}' /usr/bin/ \;
|
||||
RUN find / -name mllr_solve -exec cp '{}' /usr/bin/ \;
|
||||
|
||||
GSTREAMER
|
||||
|
||||
PULSEAUDIO
|
||||
|
||||
# Copy script to run
|
||||
COPY docker/run.sh /run.sh
|
||||
RUN chmod +x /run.sh
|
||||
|
||||
RHASSPY_USER
|
||||
|
||||
PROFILES
|
||||
|
||||
RHASSPY_CODE
|
||||
|
||||
ENV CONFIG_PATH /data/options.json
|
||||
ENV KALDI_PREFIX /opt
|
||||
|
||||
ENTRYPOINT ["/run.sh"]
|
||||
@@ -1 +0,0 @@
|
||||
COPY profiles/ ${RHASSPY_APP}/profiles/
|
||||
@@ -1 +0,0 @@
|
||||
ENV RHASSPY_APP /usr/share/rhasspy
|
||||
@@ -1,207 +0,0 @@
|
||||
ARG BUILD_FROM
|
||||
FROM $BUILD_FROM
|
||||
LABEL maintainer="Michael Hansen <hansen.mike@gmail.com>"
|
||||
|
||||
ARG BUILD_ARCH
|
||||
ARG CPU_ARCH
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
ARG MAKE_THREADS=4
|
||||
|
||||
WORKDIR /
|
||||
|
||||
COPY etc/qemu-arm-static /usr/bin/
|
||||
COPY etc/qemu-aarch64-static /usr/bin/
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install --no-install-recommends --yes \
|
||||
bash jq unzip \
|
||||
python3 python3-pip python3-dev \
|
||||
build-essential portaudio19-dev swig \
|
||||
libatlas-base-dev \
|
||||
sox espeak flite alsa-utils \
|
||||
git curl \
|
||||
autoconf libtool automake bison \
|
||||
sphinxbase-utils sphinxtrain
|
||||
|
||||
COPY download/openfst-1.6.2-1_${BUILD_ARCH}.deb /
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then \
|
||||
apt-get install --no-install-recommends --yes libfst-dev libfst-tools; \
|
||||
else \
|
||||
dpkg -i /openfst-1.6.2-1_${BUILD_ARCH}.deb; \
|
||||
rm /openfst*.deb; \
|
||||
fi
|
||||
|
||||
RHASSPY_TOOLS
|
||||
|
||||
# Install Python dependencies
|
||||
RUN python3 -m pip install --no-cache-dir setuptools wheel
|
||||
|
||||
RUN apt-get install -y libfreetype6-dev libpng-dev pkg-config libffi-dev libssl-dev
|
||||
COPY requirements.txt /requirements.txt
|
||||
RUN if [ "$BUILD_ARCH" != "amd64" ]; then \
|
||||
grep -v flair /requirements.txt > /requirements-noflair.txt; \
|
||||
mv /requirements-noflair.txt /requirements.txt; \
|
||||
fi
|
||||
RUN python3 -m pip install --no-cache-dir -r /requirements.txt
|
||||
|
||||
# Install Pocketsphinx Python module with no sound
|
||||
COPY download/pocketsphinx-python.tar.gz /
|
||||
RUN python3 -m pip install --no-cache-dir /pocketsphinx-python.tar.gz && \
|
||||
rm -rf /pocketsphinx-python*
|
||||
|
||||
# Install snowboy
|
||||
COPY download/snowboy-1.3.0.tar.gz /
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then pip3 install --no-cache-dir /snowboy-1.3.0.tar.gz; fi
|
||||
|
||||
RUN apt-get install --no-install-recommends --yes flite libttspico-utils
|
||||
|
||||
COPY download/kaldi_${BUILD_ARCH}.tar.gz /kaldi.tar.gz
|
||||
RUN mkdir -p /opt && \
|
||||
tar -C /opt -xzf /kaldi.tar.gz && \
|
||||
rm /kaldi.tar.gz
|
||||
|
||||
RUN ldconfig
|
||||
|
||||
# Copy bw and mllr_solve to /usr/bin
|
||||
RUN find / -name bw -exec cp '{}' /usr/bin/ \;
|
||||
RUN find / -name mllr_solve -exec cp '{}' /usr/bin/ \;
|
||||
|
||||
# Install gstreamer and plugins
|
||||
RUN apt-get install --no-install-recommends --yes gstreamer1.0-tools gstreamer1.0-plugins-good
|
||||
|
||||
ENV RHASSPY_APP /usr/share/rhasspy
|
||||
|
||||
# Copy script to run
|
||||
COPY docker/run.sh /run.sh
|
||||
RUN chmod +x /run.sh
|
||||
|
||||
|
||||
|
||||
COPY profiles/zh/profile.json \
|
||||
profiles/zh/custom_words.txt \
|
||||
profiles/zh/espeak_phonemes.txt \
|
||||
profiles/zh/phoneme_examples.txt \
|
||||
profiles/zh/frequent_words.txt \
|
||||
profiles/zh/sentences.ini \
|
||||
profiles/zh/stop_words.txt ${RHASSPY_APP}/profiles/zh/
|
||||
|
||||
COPY profiles/hi/ \
|
||||
profiles/hi/profile.json \
|
||||
profiles/hi/custom_words.txt \
|
||||
profiles/hi/espeak_phonemes.txt \
|
||||
profiles/hi/phoneme_examples.txt \
|
||||
profiles/hi/frequent_words.txt \
|
||||
profiles/hi/sentences.ini \
|
||||
profiles/hi/stop_words.txt ${RHASSPY_APP}/profiles/hi/
|
||||
|
||||
COPY profiles/el/profile.json \
|
||||
profiles/el/custom_words.txt \
|
||||
profiles/el/espeak_phonemes.txt \
|
||||
profiles/el/phoneme_examples.txt \
|
||||
profiles/el/frequent_words.txt \
|
||||
profiles/el/sentences.ini \
|
||||
profiles/el/stop_words.txt ${RHASSPY_APP}/profiles/el/
|
||||
|
||||
COPY profiles/de/profile.json \
|
||||
profiles/de/custom_words.txt \
|
||||
profiles/de/espeak_phonemes.txt \
|
||||
profiles/de/phoneme_examples.txt \
|
||||
profiles/de/frequent_words.txt \
|
||||
profiles/de/sentences.ini \
|
||||
profiles/de/stop_words.txt ${RHASSPY_APP}/profiles/de/
|
||||
|
||||
COPY profiles/it/profile.json \
|
||||
profiles/it/custom_words.txt \
|
||||
profiles/it/espeak_phonemes.txt \
|
||||
profiles/it/phoneme_examples.txt \
|
||||
profiles/it/frequent_words.txt \
|
||||
profiles/it/sentences.ini \
|
||||
profiles/it/stop_words.txt ${RHASSPY_APP}/profiles/it/
|
||||
|
||||
COPY profiles/es/profile.json \
|
||||
profiles/es/custom_words.txt \
|
||||
profiles/es/espeak_phonemes.txt \
|
||||
profiles/es/phoneme_examples.txt \
|
||||
profiles/es/frequent_words.txt \
|
||||
profiles/es/sentences.ini \
|
||||
profiles/es/stop_words.txt ${RHASSPY_APP}/profiles/es/
|
||||
|
||||
COPY profiles/fr/profile.json \
|
||||
profiles/fr/custom_words.txt \
|
||||
profiles/fr/espeak_phonemes.txt \
|
||||
profiles/fr/phoneme_examples.txt \
|
||||
profiles/fr/frequent_words.txt \
|
||||
profiles/fr/sentences.ini \
|
||||
profiles/fr/stop_words.txt ${RHASSPY_APP}/profiles/fr/
|
||||
|
||||
COPY profiles/ru/profile.json \
|
||||
profiles/ru/custom_words.txt \
|
||||
profiles/ru/espeak_phonemes.txt \
|
||||
profiles/ru/phoneme_examples.txt \
|
||||
profiles/ru/frequent_words.txt \
|
||||
profiles/ru/sentences.ini \
|
||||
profiles/ru/stop_words.txt ${RHASSPY_APP}/profiles/ru/
|
||||
|
||||
COPY profiles/nl/profile.json \
|
||||
profiles/nl/custom_words.txt \
|
||||
profiles/nl/espeak_phonemes.txt \
|
||||
profiles/nl/phoneme_examples.txt \
|
||||
profiles/nl/frequent_words.txt \
|
||||
profiles/nl/sentences.ini \
|
||||
profiles/nl/stop_words.txt ${RHASSPY_APP}/profiles/nl/
|
||||
|
||||
COPY profiles/vi/profile.json \
|
||||
profiles/vi/custom_words.txt \
|
||||
profiles/vi/espeak_phonemes.txt \
|
||||
profiles/vi/phoneme_examples.txt \
|
||||
profiles/vi/frequent_words.txt \
|
||||
profiles/vi/sentences.ini \
|
||||
profiles/vi/stop_words.txt ${RHASSPY_APP}/profiles/vi/
|
||||
|
||||
COPY profiles/pt/profile.json \
|
||||
profiles/pt/custom_words.txt \
|
||||
profiles/pt/espeak_phonemes.txt \
|
||||
profiles/pt/phoneme_examples.txt \
|
||||
profiles/pt/frequent_words.txt \
|
||||
profiles/pt/sentences.ini \
|
||||
profiles/pt/stop_words.txt ${RHASSPY_APP}/profiles/pt/
|
||||
|
||||
COPY profiles/sv/profile.json \
|
||||
profiles/sv/custom_words.txt \
|
||||
profiles/sv/espeak_phonemes.txt \
|
||||
profiles/sv/phoneme_examples.txt \
|
||||
profiles/sv/frequent_words.txt \
|
||||
profiles/sv/sentences.ini \
|
||||
profiles/sv/stop_words.txt ${RHASSPY_APP}/profiles/sv/
|
||||
|
||||
COPY profiles/ca/profile.json \
|
||||
profiles/ca/custom_words.txt \
|
||||
profiles/ca/espeak_phonemes.txt \
|
||||
profiles/ca/phoneme_examples.txt \
|
||||
profiles/ca/frequent_words.txt \
|
||||
profiles/ca/sentences.ini \
|
||||
profiles/ca/stop_words.txt ${RHASSPY_APP}/profiles/ca/
|
||||
|
||||
COPY profiles/en/profile.json \
|
||||
profiles/en/custom_words.txt \
|
||||
profiles/en/espeak_phonemes.txt \
|
||||
profiles/en/phoneme_examples.txt \
|
||||
profiles/en/frequent_words.txt \
|
||||
profiles/en/sentences.ini \
|
||||
profiles/en/stop_words.txt ${RHASSPY_APP}/profiles/en/
|
||||
|
||||
COPY profiles/defaults.json ${RHASSPY_APP}/profiles/
|
||||
COPY docker/rhasspy ${RHASSPY_APP}/bin/
|
||||
COPY dist/ ${RHASSPY_APP}/dist/
|
||||
COPY etc/wav/* ${RHASSPY_APP}/etc/wav/
|
||||
COPY rhasspy/profile_schema.json ${RHASSPY_APP}/rhasspy/
|
||||
COPY rhasspy/train/jsgf2fst/*.py ${RHASSPY_APP}/rhasspy/train/jsgf2fst/
|
||||
COPY rhasspy/train/*.py ${RHASSPY_APP}/rhasspy/train/
|
||||
COPY *.py ${RHASSPY_APP}/
|
||||
COPY rhasspy/*.py ${RHASSPY_APP}/rhasspy/
|
||||
|
||||
ENV CONFIG_PATH /data/options.json
|
||||
ENV KALDI_PREFIX /opt
|
||||
|
||||
ENTRYPOINT ["/run.sh"]
|
||||
@@ -1,96 +0,0 @@
|
||||
ARG BUILD_FROM
|
||||
FROM $BUILD_FROM
|
||||
LABEL maintainer="Michael Hansen <hansen.mike@gmail.com>"
|
||||
|
||||
ARG BUILD_ARCH
|
||||
ARG CPU_ARCH
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
ARG MAKE_THREADS=4
|
||||
|
||||
WORKDIR /
|
||||
|
||||
COPY etc/qemu-arm-static /usr/bin/
|
||||
COPY etc/qemu-aarch64-static /usr/bin/
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install --no-install-recommends --yes \
|
||||
bash jq unzip \
|
||||
python3 python3-pip python3-dev \
|
||||
build-essential portaudio19-dev swig \
|
||||
libatlas-base-dev \
|
||||
sox espeak flite alsa-utils \
|
||||
git curl \
|
||||
autoconf libtool automake bison \
|
||||
sphinxbase-utils sphinxtrain
|
||||
|
||||
COPY download/openfst-1.6.2-1_${BUILD_ARCH}.deb /
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then \
|
||||
apt-get install --no-install-recommends --yes libfst-dev libfst-tools; \
|
||||
else \
|
||||
dpkg -i /openfst-1.6.2-1_${BUILD_ARCH}.deb; \
|
||||
rm /openfst*.deb; \
|
||||
fi
|
||||
|
||||
RHASSPY_TOOLS
|
||||
|
||||
# Install Python dependencies
|
||||
RUN python3 -m pip install --no-cache-dir setuptools wheel
|
||||
|
||||
RUN apt-get install -y libfreetype6-dev libpng-dev pkg-config libffi-dev libssl-dev
|
||||
COPY requirements.txt /requirements.txt
|
||||
RUN if [ "$BUILD_ARCH" != "amd64" ]; then \
|
||||
grep -v flair /requirements.txt > /requirements-noflair.txt; \
|
||||
mv /requirements-noflair.txt /requirements.txt; \
|
||||
fi
|
||||
RUN python3 -m pip install --no-cache-dir -r /requirements.txt
|
||||
|
||||
# Install Pocketsphinx Python module with no sound
|
||||
COPY download/pocketsphinx-python.tar.gz /
|
||||
RUN python3 -m pip install --no-cache-dir /pocketsphinx-python.tar.gz && \
|
||||
rm -rf /pocketsphinx-python*
|
||||
|
||||
# Install snowboy
|
||||
COPY download/snowboy-1.3.0.tar.gz /
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then pip3 install --no-cache-dir /snowboy-1.3.0.tar.gz; fi
|
||||
|
||||
RUN apt-get install --no-install-recommends --yes flite libttspico-utils
|
||||
|
||||
COPY download/kaldi_${BUILD_ARCH}.tar.gz /kaldi.tar.gz
|
||||
RUN mkdir -p /opt && \
|
||||
tar -C /opt -xzf /kaldi.tar.gz && \
|
||||
rm /kaldi.tar.gz
|
||||
|
||||
RUN ldconfig
|
||||
|
||||
# Copy bw and mllr_solve to /usr/bin
|
||||
RUN find / -name bw -exec cp '{}' /usr/bin/ \;
|
||||
RUN find / -name mllr_solve -exec cp '{}' /usr/bin/ \;
|
||||
|
||||
# Install gstreamer and plugins
|
||||
RUN apt-get install --no-install-recommends --yes gstreamer1.0-tools gstreamer1.0-plugins-good
|
||||
|
||||
ENV RHASSPY_APP /usr/share/rhasspy
|
||||
|
||||
# Copy script to run
|
||||
COPY docker/run.sh /run.sh
|
||||
RUN chmod +x /run.sh
|
||||
|
||||
|
||||
|
||||
COPY profiles/en/ ${RHASSPY_APP}/profiles/en/
|
||||
|
||||
COPY profiles/defaults.json ${RHASSPY_APP}/profiles/
|
||||
COPY docker/rhasspy ${RHASSPY_APP}/bin/
|
||||
COPY dist/ ${RHASSPY_APP}/dist/
|
||||
COPY etc/wav/* ${RHASSPY_APP}/etc/wav/
|
||||
COPY rhasspy/profile_schema.json ${RHASSPY_APP}/rhasspy/
|
||||
COPY rhasspy/train/jsgf2fst/*.py ${RHASSPY_APP}/rhasspy/train/jsgf2fst/
|
||||
COPY rhasspy/train/*.py ${RHASSPY_APP}/rhasspy/train/
|
||||
COPY *.py ${RHASSPY_APP}/
|
||||
COPY rhasspy/*.py ${RHASSPY_APP}/rhasspy/
|
||||
|
||||
ENV CONFIG_PATH /data/options.json
|
||||
ENV KALDI_PREFIX /opt
|
||||
|
||||
ENTRYPOINT ["/run.sh"]
|
||||
@@ -1,113 +0,0 @@
|
||||
ARG BUILD_FROM
|
||||
FROM $BUILD_FROM
|
||||
LABEL maintainer="Michael Hansen <hansen.mike@gmail.com>"
|
||||
|
||||
ARG BUILD_ARCH
|
||||
ARG CPU_ARCH
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
ARG MAKE_THREADS=4
|
||||
|
||||
WORKDIR /
|
||||
|
||||
COPY etc/qemu-arm-static /usr/bin/
|
||||
COPY etc/qemu-aarch64-static /usr/bin/
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install --no-install-recommends --yes \
|
||||
bash jq unzip \
|
||||
python3 python3-pip python3-dev \
|
||||
build-essential portaudio19-dev swig \
|
||||
libatlas-base-dev \
|
||||
sox espeak flite alsa-utils \
|
||||
git curl \
|
||||
autoconf libtool automake bison \
|
||||
sphinxbase-utils sphinxtrain
|
||||
|
||||
COPY download/openfst-1.6.2-1_${BUILD_ARCH}.deb /
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then \
|
||||
apt-get install --no-install-recommends --yes libfst-dev libfst-tools; \
|
||||
else \
|
||||
dpkg -i /openfst-1.6.2-1_${BUILD_ARCH}.deb; \
|
||||
rm /openfst*.deb; \
|
||||
fi
|
||||
|
||||
RHASSPY_TOOLS
|
||||
|
||||
# Install Python dependencies
|
||||
RUN python3 -m pip install --no-cache-dir setuptools wheel
|
||||
|
||||
RUN apt-get install -y libfreetype6-dev libpng-dev pkg-config libffi-dev libssl-dev
|
||||
COPY requirements.txt /requirements.txt
|
||||
RUN if [ "$BUILD_ARCH" != "amd64" ]; then \
|
||||
grep -v flair /requirements.txt > /requirements-noflair.txt; \
|
||||
mv /requirements-noflair.txt /requirements.txt; \
|
||||
fi
|
||||
RUN python3 -m pip install --no-cache-dir -r /requirements.txt
|
||||
|
||||
# Install Pocketsphinx Python module with no sound
|
||||
COPY download/pocketsphinx-python.tar.gz /
|
||||
RUN python3 -m pip install --no-cache-dir /pocketsphinx-python.tar.gz && \
|
||||
rm -rf /pocketsphinx-python*
|
||||
|
||||
# Install snowboy
|
||||
COPY download/snowboy-1.3.0.tar.gz /
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then pip3 install --no-cache-dir /snowboy-1.3.0.tar.gz; fi
|
||||
|
||||
RUN apt-get install --no-install-recommends --yes flite libttspico-utils
|
||||
|
||||
COPY download/kaldi_${BUILD_ARCH}.tar.gz /kaldi.tar.gz
|
||||
RUN mkdir -p /opt && \
|
||||
tar -C /opt -xzf /kaldi.tar.gz && \
|
||||
rm /kaldi.tar.gz
|
||||
|
||||
RUN ldconfig
|
||||
|
||||
# Copy bw and mllr_solve to /usr/bin
|
||||
RUN find / -name bw -exec cp '{}' /usr/bin/ \;
|
||||
RUN find / -name mllr_solve -exec cp '{}' /usr/bin/ \;
|
||||
|
||||
# Install gstreamer and plugins
|
||||
RUN apt-get install --no-install-recommends --yes gstreamer1.0-tools gstreamer1.0-plugins-good
|
||||
|
||||
RUN apt-get install -y pulseaudio
|
||||
COPY etc/pulseaudio.client.conf /etc/pulse/client.conf
|
||||
|
||||
# Create new user
|
||||
ENV UNAME=rhasspy
|
||||
RUN export UNAME=$UNAME UID=1000 GID=1000 && \
|
||||
mkdir -p "/home/${UNAME}" && \
|
||||
echo "${UNAME}:x:${UID}:${GID}:${UNAME} User,,,:/home/${UNAME}:/bin/bash" >> /etc/passwd && \
|
||||
echo "${UNAME}:x:${UID}:" >> /etc/group && \
|
||||
mkdir -p /etc/sudoers.d && \
|
||||
echo "${UNAME} ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/${UNAME} && \
|
||||
chmod 0440 /etc/sudoers.d/${UNAME} && \
|
||||
chown ${UID}:${GID} -R /home/${UNAME} && \
|
||||
gpasswd -a ${UNAME} audio
|
||||
|
||||
ENV RHASSPY_APP /home/${UNAME}
|
||||
|
||||
# Copy script to run
|
||||
COPY docker/run.sh /run.sh
|
||||
RUN chmod +x /run.sh
|
||||
|
||||
# Switch to new user
|
||||
USER $UNAME
|
||||
ENV HOME /home/${UNAME}
|
||||
|
||||
COPY profiles/en/ ${RHASSPY_APP}/profiles/en/
|
||||
|
||||
COPY profiles/defaults.json ${RHASSPY_APP}/profiles/
|
||||
COPY docker/rhasspy ${RHASSPY_APP}/bin/
|
||||
COPY dist/ ${RHASSPY_APP}/dist/
|
||||
COPY etc/wav/* ${RHASSPY_APP}/etc/wav/
|
||||
COPY rhasspy/profile_schema.json ${RHASSPY_APP}/rhasspy/
|
||||
COPY rhasspy/train/jsgf2fst/*.py ${RHASSPY_APP}/rhasspy/train/jsgf2fst/
|
||||
COPY rhasspy/train/*.py ${RHASSPY_APP}/rhasspy/train/
|
||||
COPY *.py ${RHASSPY_APP}/
|
||||
COPY rhasspy/*.py ${RHASSPY_APP}/rhasspy/
|
||||
|
||||
ENV CONFIG_PATH /data/options.json
|
||||
ENV KALDI_PREFIX /opt
|
||||
|
||||
ENTRYPOINT ["/run.sh"]
|
||||
@@ -1,91 +0,0 @@
|
||||
ARG BUILD_FROM
|
||||
FROM $BUILD_FROM
|
||||
LABEL maintainer="Michael Hansen <hansen.mike@gmail.com>"
|
||||
|
||||
ARG BUILD_ARCH
|
||||
ARG CPU_ARCH
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
ARG MAKE_THREADS=4
|
||||
|
||||
WORKDIR /
|
||||
|
||||
COPY etc/qemu-arm-static /usr/bin/
|
||||
COPY etc/qemu-aarch64-static /usr/bin/
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install --no-install-recommends --yes \
|
||||
bash jq unzip \
|
||||
python3 python3-pip python3-dev \
|
||||
build-essential portaudio19-dev swig \
|
||||
libatlas-base-dev \
|
||||
sox espeak flite alsa-utils \
|
||||
git curl \
|
||||
autoconf libtool automake bison \
|
||||
sphinxbase-utils sphinxtrain
|
||||
|
||||
COPY download/rhasspy-tools_${BUILD_ARCH}.tar.gz /
|
||||
RUN tar -C /usr -xvf /rhasspy-tools_${BUILD_ARCH}.tar.gz && \
|
||||
rm -f /rhasspy-tools_${BUILD_ARCH}.tar.gz
|
||||
|
||||
# Install Python dependencies
|
||||
RUN python3 -m pip install --no-cache-dir setuptools wheel
|
||||
|
||||
RUN apt-get install -y libfreetype6-dev libpng-dev pkg-config libffi-dev libssl-dev
|
||||
COPY requirements.txt /requirements.txt
|
||||
RUN if [ "$BUILD_ARCH" != "amd64" ]; then \
|
||||
grep -v flair /requirements.txt > /requirements-noflair.txt; \
|
||||
mv /requirements-noflair.txt /requirements.txt; \
|
||||
fi
|
||||
RUN python3 -m pip install --no-cache-dir -r /requirements.txt
|
||||
|
||||
# Install Pocketsphinx Python module with no sound
|
||||
COPY download/pocketsphinx-python.tar.gz /
|
||||
RUN python3 -m pip install --no-cache-dir /pocketsphinx-python.tar.gz && \
|
||||
rm -rf /pocketsphinx-python*
|
||||
|
||||
# Install snowboy
|
||||
COPY download/snowboy-1.3.0.tar.gz /
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then pip3 install --no-cache-dir /snowboy-1.3.0.tar.gz; fi
|
||||
|
||||
RUN apt-get install --no-install-recommends --yes flite libttspico-utils lame
|
||||
|
||||
COPY download/kaldi_${BUILD_ARCH}.tar.gz /kaldi.tar.gz
|
||||
RUN mkdir -p /opt && \
|
||||
tar -C /opt -xzf /kaldi.tar.gz && \
|
||||
rm /kaldi.tar.gz
|
||||
|
||||
RUN ldconfig
|
||||
|
||||
# Copy bw and mllr_solve to /usr/bin
|
||||
RUN find / -name bw -exec cp '{}' /usr/bin/ \;
|
||||
RUN find / -name mllr_solve -exec cp '{}' /usr/bin/ \;
|
||||
|
||||
# Install gstreamer and plugins
|
||||
RUN apt-get install --no-install-recommends --yes gstreamer1.0-tools gstreamer1.0-plugins-good
|
||||
|
||||
ENV RHASSPY_APP /usr/share/rhasspy
|
||||
|
||||
# Copy script to run
|
||||
COPY docker/run.sh /run.sh
|
||||
RUN chmod +x /run.sh
|
||||
|
||||
|
||||
|
||||
COPY profiles/ ${RHASSPY_APP}/profiles/
|
||||
|
||||
COPY profiles/defaults.json ${RHASSPY_APP}/profiles/
|
||||
COPY docker/rhasspy ${RHASSPY_APP}/bin/
|
||||
COPY dist/ ${RHASSPY_APP}/dist/
|
||||
COPY etc/wav/* ${RHASSPY_APP}/etc/wav/
|
||||
COPY rhasspy/profile_schema.json ${RHASSPY_APP}/rhasspy/
|
||||
COPY rhasspy/train/jsgf2fst/*.py ${RHASSPY_APP}/rhasspy/train/jsgf2fst/
|
||||
COPY rhasspy/train/*.py ${RHASSPY_APP}/rhasspy/train/
|
||||
COPY *.py ${RHASSPY_APP}/
|
||||
COPY rhasspy/*.py ${RHASSPY_APP}/rhasspy/
|
||||
COPY VERSION ${RHASSPY_APP}/
|
||||
|
||||
ENV CONFIG_PATH /data/options.json
|
||||
ENV KALDI_PREFIX /opt
|
||||
|
||||
ENTRYPOINT ["/run.sh"]
|
||||
@@ -1,91 +0,0 @@
|
||||
ARG BUILD_FROM
|
||||
FROM $BUILD_FROM
|
||||
LABEL maintainer="Michael Hansen <hansen.mike@gmail.com>"
|
||||
|
||||
ARG BUILD_ARCH
|
||||
ARG CPU_ARCH
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
ARG MAKE_THREADS=4
|
||||
|
||||
WORKDIR /
|
||||
|
||||
COPY etc/qemu-arm-static /usr/bin/
|
||||
COPY etc/qemu-aarch64-static /usr/bin/
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install --no-install-recommends --yes \
|
||||
bash jq unzip \
|
||||
python3 python3-pip python3-dev \
|
||||
build-essential portaudio19-dev swig \
|
||||
libfst-dev libfst-tools \
|
||||
libatlas-base-dev \
|
||||
sox espeak flite alsa-utils \
|
||||
git curl \
|
||||
autoconf libtool automake bison \
|
||||
sphinxbase-utils sphinxtrain
|
||||
|
||||
COPY download/rhasspy-tools_${BUILD_ARCH}.tar.gz /
|
||||
RUN tar -C /usr -xvf /rhasspy-tools_${BUILD_ARCH}.tar.gz && \
|
||||
rm -f /rhasspy-tools_${BUILD_ARCH}.tar.gz
|
||||
|
||||
# Install Python dependencies
|
||||
RUN python3 -m pip install --no-cache-dir setuptools wheel
|
||||
|
||||
RUN apt-get install -y libfreetype6-dev libpng-dev pkg-config libffi-dev libssl-dev
|
||||
COPY requirements.txt /requirements.txt
|
||||
RUN if [ "$BUILD_ARCH" != "amd64" ]; then \
|
||||
grep -v flair /requirements.txt > /requirements-noflair.txt; \
|
||||
mv /requirements-noflair.txt /requirements.txt; \
|
||||
fi
|
||||
RUN python3 -m pip install --no-cache-dir -r /requirements.txt
|
||||
|
||||
# Install Pocketsphinx Python module with no sound
|
||||
COPY download/pocketsphinx-python.tar.gz /
|
||||
RUN python3 -m pip install --no-cache-dir /pocketsphinx-python.tar.gz && \
|
||||
rm -rf /pocketsphinx-python*
|
||||
|
||||
# Install snowboy
|
||||
COPY download/snowboy-1.3.0.tar.gz /
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then pip3 install --no-cache-dir /snowboy-1.3.0.tar.gz; fi
|
||||
|
||||
RUN apt-get install --no-install-recommends --yes flite libttspico-utils
|
||||
|
||||
COPY download/kaldi_${BUILD_ARCH}.tar.gz /kaldi.tar.gz
|
||||
RUN mkdir -p /opt && \
|
||||
tar -C /opt -xzf /kaldi.tar.gz && \
|
||||
rm /kaldi.tar.gz
|
||||
|
||||
RUN ldconfig
|
||||
|
||||
# Copy bw and mllr_solve to /usr/bin
|
||||
RUN find / -name bw -exec cp '{}' /usr/bin/ \;
|
||||
RUN find / -name mllr_solve -exec cp '{}' /usr/bin/ \;
|
||||
|
||||
# Install gstreamer and plugins
|
||||
RUN apt-get install --no-install-recommends --yes gstreamer1.0-tools gstreamer1.0-plugins-good
|
||||
|
||||
ENV RHASSPY_APP /usr/share/rhasspy
|
||||
|
||||
# Copy script to run
|
||||
COPY docker/run.sh /run.sh
|
||||
RUN chmod +x /run.sh
|
||||
|
||||
|
||||
|
||||
COPY profiles/en/ ${RHASSPY_APP}/profiles/en/
|
||||
|
||||
COPY profiles/defaults.json ${RHASSPY_APP}/profiles/
|
||||
COPY docker/rhasspy ${RHASSPY_APP}/bin/
|
||||
COPY dist/ ${RHASSPY_APP}/dist/
|
||||
COPY etc/wav/* ${RHASSPY_APP}/etc/wav/
|
||||
COPY rhasspy/profile_schema.json ${RHASSPY_APP}/rhasspy/
|
||||
COPY rhasspy/train/jsgf2fst/*.py ${RHASSPY_APP}/rhasspy/train/jsgf2fst/
|
||||
COPY rhasspy/train/*.py ${RHASSPY_APP}/rhasspy/train/
|
||||
COPY *.py ${RHASSPY_APP}/
|
||||
COPY rhasspy/*.py ${RHASSPY_APP}/rhasspy/
|
||||
|
||||
ENV CONFIG_PATH /data/options.json
|
||||
ENV KALDI_PREFIX /opt
|
||||
|
||||
ENTRYPOINT ["/run.sh"]
|
||||
@@ -1,108 +0,0 @@
|
||||
ARG BUILD_FROM
|
||||
FROM $BUILD_FROM
|
||||
LABEL maintainer="Michael Hansen <hansen.mike@gmail.com>"
|
||||
|
||||
ARG BUILD_ARCH
|
||||
ARG CPU_ARCH
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
ARG MAKE_THREADS=4
|
||||
|
||||
WORKDIR /
|
||||
|
||||
COPY etc/qemu-arm-static /usr/bin/
|
||||
COPY etc/qemu-aarch64-static /usr/bin/
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install --no-install-recommends --yes \
|
||||
bash jq unzip \
|
||||
python3 python3-pip python3-dev \
|
||||
build-essential portaudio19-dev swig \
|
||||
libfst-dev libfst-tools \
|
||||
libatlas-base-dev \
|
||||
sox espeak flite alsa-utils \
|
||||
git curl \
|
||||
autoconf libtool automake bison \
|
||||
sphinxbase-utils sphinxtrain
|
||||
|
||||
COPY download/rhasspy-tools_${BUILD_ARCH}.tar.gz /
|
||||
RUN tar -C /usr -xvf /rhasspy-tools_${BUILD_ARCH}.tar.gz && \
|
||||
rm -f /rhasspy-tools_${BUILD_ARCH}.tar.gz
|
||||
|
||||
# Install Python dependencies
|
||||
RUN python3 -m pip install --no-cache-dir setuptools wheel
|
||||
|
||||
RUN apt-get install -y libfreetype6-dev libpng-dev pkg-config libffi-dev libssl-dev
|
||||
COPY requirements.txt /requirements.txt
|
||||
RUN if [ "$BUILD_ARCH" != "amd64" ]; then \
|
||||
grep -v flair /requirements.txt > /requirements-noflair.txt; \
|
||||
mv /requirements-noflair.txt /requirements.txt; \
|
||||
fi
|
||||
RUN python3 -m pip install --no-cache-dir -r /requirements.txt
|
||||
|
||||
# Install Pocketsphinx Python module with no sound
|
||||
COPY download/pocketsphinx-python.tar.gz /
|
||||
RUN python3 -m pip install --no-cache-dir /pocketsphinx-python.tar.gz && \
|
||||
rm -rf /pocketsphinx-python*
|
||||
|
||||
# Install snowboy
|
||||
COPY download/snowboy-1.3.0.tar.gz /
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then pip3 install --no-cache-dir /snowboy-1.3.0.tar.gz; fi
|
||||
|
||||
RUN apt-get install --no-install-recommends --yes flite libttspico-utils
|
||||
|
||||
COPY download/kaldi_${BUILD_ARCH}.tar.gz /kaldi.tar.gz
|
||||
RUN mkdir -p /opt && \
|
||||
tar -C /opt -xzf /kaldi.tar.gz && \
|
||||
rm /kaldi.tar.gz
|
||||
|
||||
RUN ldconfig
|
||||
|
||||
# Copy bw and mllr_solve to /usr/bin
|
||||
RUN find / -name bw -exec cp '{}' /usr/bin/ \;
|
||||
RUN find / -name mllr_solve -exec cp '{}' /usr/bin/ \;
|
||||
|
||||
# Install gstreamer and plugins
|
||||
RUN apt-get install --no-install-recommends --yes gstreamer1.0-tools gstreamer1.0-plugins-good
|
||||
|
||||
RUN apt-get install -y pulseaudio
|
||||
COPY etc/pulseaudio.client.conf /etc/pulse/client.conf
|
||||
|
||||
# Create new user
|
||||
ENV UNAME=rhasspy
|
||||
RUN export UNAME=$UNAME UID=1000 GID=1000 && \
|
||||
mkdir -p "/home/${UNAME}" && \
|
||||
echo "${UNAME}:x:${UID}:${GID}:${UNAME} User,,,:/home/${UNAME}:/bin/bash" >> /etc/passwd && \
|
||||
echo "${UNAME}:x:${UID}:" >> /etc/group && \
|
||||
mkdir -p /etc/sudoers.d && \
|
||||
echo "${UNAME} ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/${UNAME} && \
|
||||
chmod 0440 /etc/sudoers.d/${UNAME} && \
|
||||
chown ${UID}:${GID} -R /home/${UNAME} && \
|
||||
gpasswd -a ${UNAME} audio
|
||||
|
||||
ENV RHASSPY_APP /home/${UNAME}
|
||||
|
||||
# Copy script to run
|
||||
COPY docker/run.sh /run.sh
|
||||
RUN chmod +x /run.sh
|
||||
|
||||
# Switch to new user
|
||||
USER $UNAME
|
||||
ENV HOME /home/${UNAME}
|
||||
|
||||
COPY profiles/en/ ${RHASSPY_APP}/profiles/en/
|
||||
|
||||
COPY profiles/defaults.json ${RHASSPY_APP}/profiles/
|
||||
COPY docker/rhasspy ${RHASSPY_APP}/bin/
|
||||
COPY dist/ ${RHASSPY_APP}/dist/
|
||||
COPY etc/wav/* ${RHASSPY_APP}/etc/wav/
|
||||
COPY rhasspy/profile_schema.json ${RHASSPY_APP}/rhasspy/
|
||||
COPY rhasspy/train/jsgf2fst/*.py ${RHASSPY_APP}/rhasspy/train/jsgf2fst/
|
||||
COPY rhasspy/train/*.py ${RHASSPY_APP}/rhasspy/train/
|
||||
COPY *.py ${RHASSPY_APP}/
|
||||
COPY rhasspy/*.py ${RHASSPY_APP}/rhasspy/
|
||||
|
||||
ENV CONFIG_PATH /data/options.json
|
||||
ENV KALDI_PREFIX /opt
|
||||
|
||||
ENTRYPOINT ["/run.sh"]
|
||||
@@ -1 +0,0 @@
|
||||
COPY profiles/en/ ${RHASSPY_APP}/profiles/en/
|
||||
@@ -1,7 +0,0 @@
|
||||
COPY download/phonetisaurus-2019.tar.gz /phonetisaurus.tar.gz
|
||||
RUN cd / && tar -xf phonetisaurus.tar.gz
|
||||
RUN cd /phonetisaurus && \
|
||||
./configure && \
|
||||
make -j $MAKE_THREADS && \
|
||||
make install && \
|
||||
rm -rf /phonetisaurus*
|
||||
@@ -1,18 +0,0 @@
|
||||
RUN apt-get update && \
|
||||
apt-get install --no-install-recommends --yes \
|
||||
bash jq unzip \
|
||||
python3 python3-pip python3-dev \
|
||||
build-essential portaudio19-dev swig \
|
||||
libatlas-base-dev \
|
||||
sox espeak flite alsa-utils \
|
||||
git curl \
|
||||
autoconf libtool automake bison \
|
||||
sphinxbase-utils sphinxtrain
|
||||
|
||||
COPY download/openfst-1.6.2-1_${BUILD_ARCH}.deb /
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then \
|
||||
apt-get install --no-install-recommends --yes libfst-dev libfst-tools; \
|
||||
else \
|
||||
dpkg -i /openfst-1.6.2-1_${BUILD_ARCH}.deb; \
|
||||
rm /openfst*.deb; \
|
||||
fi
|
||||
@@ -1,67 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Directory of *this* script
|
||||
DIR="$( cd "$( dirname "$0" )" && pwd )"
|
||||
template="$DIR/Dockerfile.template"
|
||||
out="$DIR/dockerfiles"
|
||||
mkdir -p "$out"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# Uppercases an input string
|
||||
function upper {
|
||||
tr '[[:lower:]]' '[[:upper:]]'
|
||||
}
|
||||
|
||||
# Creates m4 "define" statements from text files in one or more directories.
|
||||
# The contents of dir/file.txt will be the value of variable FILE.
|
||||
function set_variables {
|
||||
echo "divert(-1)"
|
||||
while [[ ! -z "$1" ]]; do
|
||||
if [[ -d "$1" ]]; then
|
||||
for var_file in $(find "$1" -type f -name "*.txt"); do
|
||||
var_name=$(basename "$var_file" .txt | upper)
|
||||
echo "define(\`$var_name', \`$(cat $var_file)')"
|
||||
done
|
||||
elif [[ -f "$1" ]]; then
|
||||
var_file="$1"
|
||||
var_name=$(basename "$var_file" .txt | upper)
|
||||
echo "define(\`$var_name', \`$(cat $var_file)')"
|
||||
fi
|
||||
|
||||
shift
|
||||
done
|
||||
echo "divert(0)dnl"
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
#------------
|
||||
# From source
|
||||
#------------
|
||||
# set_variables "$DIR/shared/" "$DIR/from-source/" \
|
||||
# "$DIR/alsa/" "$DIR/en_profile/" \
|
||||
# | cat - "$template" | m4 > "$out/Dockerfile.from-source.alsa.en"
|
||||
|
||||
# set_variables "$DIR/shared/" "$DIR/from-source/" \
|
||||
# "$DIR/pulseaudio/" "$DIR/en_profile/" \
|
||||
# | cat - "$template" | m4 > "$out/Dockerfile.from-source.pulseaudio.en"
|
||||
|
||||
# set_variables "$DIR/shared/" "$DIR/from-source/" \
|
||||
# "$DIR/alsa/" "$DIR/all_profiles/" \
|
||||
# | cat - "$template" | m4 > "$out/Dockerfile.from-source.alsa.all"
|
||||
|
||||
#-----------
|
||||
# Pre-built
|
||||
#-----------
|
||||
# set_variables "$DIR/shared/" "$DIR/prebuilt/" \
|
||||
# "$DIR/alsa/" "$DIR/en_profile/" \
|
||||
# | cat - "$template" | m4 > "$out/Dockerfile.prebuilt.alsa.en"
|
||||
|
||||
# set_variables "$DIR/shared/" "$DIR/prebuilt/" \
|
||||
# "$DIR/pulseaudio/" "$DIR/en_profile/" \
|
||||
# | cat - "$template" | m4 > "$out/Dockerfile.prebuilt.pulseaudio.en"
|
||||
|
||||
set_variables "$DIR/shared/" "$DIR/prebuilt/" \
|
||||
"$DIR/alsa/" "$DIR/all_profiles/" \
|
||||
| cat - "$template" | m4 > "$out/Dockerfile.prebuilt.alsa.all"
|
||||
@@ -1,3 +0,0 @@
|
||||
COPY download/phonetisaurus-2019_${BUILD_ARCH}.deb /phonetisaurus.deb
|
||||
RUN dpkg -i /phonetisaurus.deb && \
|
||||
rm /phonetisaurus.deb
|
||||
@@ -1,3 +0,0 @@
|
||||
COPY download/rhasspy-tools_${BUILD_ARCH}.tar.gz /
|
||||
RUN tar -C /usr -xvf /rhasspy-tools_${BUILD_ARCH}.tar.gz && \
|
||||
rm -f /rhasspy-tools_${BUILD_ARCH}.tar.gz
|
||||
@@ -1,10 +0,0 @@
|
||||
RUN apt-get update && \
|
||||
apt-get install --no-install-recommends --yes \
|
||||
bash jq unzip \
|
||||
python3 python3-pip python3-dev \
|
||||
build-essential portaudio19-dev swig \
|
||||
libatlas-base-dev \
|
||||
sox espeak flite alsa-utils \
|
||||
git curl \
|
||||
autoconf libtool automake bison \
|
||||
sphinxbase-utils sphinxtrain
|
||||
@@ -1,16 +0,0 @@
|
||||
RUN apt-get install -y pulseaudio
|
||||
COPY etc/pulseaudio.client.conf /etc/pulse/client.conf
|
||||
|
||||
# Create new user
|
||||
ENV UNAME=rhasspy
|
||||
RUN export UNAME=$UNAME UID=1000 GID=1000 && \
|
||||
mkdir -p "/home/${UNAME}" && \
|
||||
echo "${UNAME}:x:${UID}:${GID}:${UNAME} User,,,:/home/${UNAME}:/bin/bash" >> /etc/passwd && \
|
||||
echo "${UNAME}:x:${UID}:" >> /etc/group && \
|
||||
mkdir -p /etc/sudoers.d && \
|
||||
echo "${UNAME} ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/${UNAME} && \
|
||||
chmod 0440 /etc/sudoers.d/${UNAME} && \
|
||||
chown ${UID}:${GID} -R /home/${UNAME} && \
|
||||
gpasswd -a ${UNAME} audio
|
||||
|
||||
ENV RHASSPY_APP /home/${UNAME}
|
||||
@@ -1,3 +0,0 @@
|
||||
# Switch to new user
|
||||
USER $UNAME
|
||||
ENV HOME /home/${UNAME}
|
||||
@@ -1,2 +0,0 @@
|
||||
# Install gstreamer and plugins
|
||||
RUN apt-get install --no-install-recommends --yes gstreamer1.0-tools gstreamer1.0-plugins-good
|
||||
@@ -1,4 +0,0 @@
|
||||
COPY download/kaldi_${BUILD_ARCH}.tar.gz /kaldi.tar.gz
|
||||
RUN mkdir -p /opt && \
|
||||
tar -C /opt -xzf /kaldi.tar.gz && \
|
||||
rm /kaldi.tar.gz
|
||||
@@ -1,9 +0,0 @@
|
||||
# Install mitlm
|
||||
RUN apt-get install --no-install-recommends --yes gfortran
|
||||
COPY download/mitlm-0.4.2.tar.xz /
|
||||
RUN cd / && tar -xf mitlm-0.4.2.tar.xz && cd mitlm-0.4.2/ && \
|
||||
./configure && \
|
||||
make -j $MAKE_THREADS && \
|
||||
make install && \
|
||||
rm -rf /mitlm-0.4.2*
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
# Install Mycroft Precise
|
||||
COPY download/precise-engine_0.3.0_${CPU_ARCH}.tar.gz /precise-engine.tar.gz
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then \
|
||||
cd / && tar -xzf /precise-engine.tar.gz && \
|
||||
ln -s /precise-engine/precise-engine /usr/bin/precise-engine && \
|
||||
rm /precise-engine.tar.gz; \
|
||||
fi
|
||||
@@ -1,9 +0,0 @@
|
||||
# Install Opengrm
|
||||
COPY download/opengrm-ngram-1.3.3.tar.gz /
|
||||
RUN cd / && tar -xf opengrm-ngram-1.3.3.tar.gz && \
|
||||
cd opengrm-ngram-1.3.3 && \
|
||||
./configure && \
|
||||
make -j $MAKE_THREADS && \
|
||||
make install && \
|
||||
ldconfig && \
|
||||
rm -rf /opengrm*
|
||||
@@ -1,4 +0,0 @@
|
||||
# Install Pocketsphinx Python module with no sound
|
||||
COPY download/pocketsphinx-python.tar.gz /
|
||||
RUN python3 -m pip install --no-cache-dir /pocketsphinx-python.tar.gz && \
|
||||
rm -rf /pocketsphinx-python*
|
||||
@@ -1,10 +0,0 @@
|
||||
# Install Python dependencies
|
||||
RUN python3 -m pip install --no-cache-dir setuptools wheel
|
||||
|
||||
RUN apt-get install -y libfreetype6-dev libpng-dev pkg-config libffi-dev libssl-dev
|
||||
COPY requirements.txt /requirements.txt
|
||||
RUN if [ "$BUILD_ARCH" != "amd64" ]; then \
|
||||
grep -v flair /requirements.txt > /requirements-noflair.txt; \
|
||||
mv /requirements-noflair.txt /requirements.txt; \
|
||||
fi
|
||||
RUN python3 -m pip install --no-cache-dir -r /requirements.txt
|
||||
@@ -1,2 +0,0 @@
|
||||
COPY etc/qemu-arm-static /usr/bin/
|
||||
COPY etc/qemu-aarch64-static /usr/bin/
|
||||
@@ -1,10 +0,0 @@
|
||||
COPY profiles/defaults.json ${RHASSPY_APP}/profiles/
|
||||
COPY docker/rhasspy ${RHASSPY_APP}/bin/
|
||||
COPY dist/ ${RHASSPY_APP}/dist/
|
||||
COPY etc/wav/* ${RHASSPY_APP}/etc/wav/
|
||||
COPY rhasspy/profile_schema.json ${RHASSPY_APP}/rhasspy/
|
||||
COPY rhasspy/train/jsgf2fst/*.py ${RHASSPY_APP}/rhasspy/train/jsgf2fst/
|
||||
COPY rhasspy/train/*.py ${RHASSPY_APP}/rhasspy/train/
|
||||
COPY *.py ${RHASSPY_APP}/
|
||||
COPY rhasspy/*.py ${RHASSPY_APP}/rhasspy/
|
||||
COPY VERSION ${RHASSPY_APP}/
|
||||
@@ -1,3 +0,0 @@
|
||||
# Install snowboy
|
||||
COPY download/snowboy-1.3.0.tar.gz /
|
||||
RUN if [ "$BUILD_ARCH" != "aarch64" ]; then pip3 install --no-cache-dir /snowboy-1.3.0.tar.gz; fi
|
||||
@@ -1 +0,0 @@
|
||||
RUN apt-get install --no-install-recommends --yes flite libttspico-utils lame
|
||||
@@ -55,7 +55,7 @@ See `rhasspy.intent.FuzzyWuzzyRecognizer` for details.
|
||||
|
||||
## Mycroft Adapt
|
||||
|
||||
Recognizes intents using [Mycroft Adapt](https://github.com/MycroftAI/adapt). Works best when you have a medium number of sentences (hundreds to thousands) and need to be able to recognize sentences not seen during training (no new words, though).
|
||||
Recognizes intents using [Mycroft Adapt](https://github.com/MycroftAI/adapt). Works best when you have a medium number of sentences (hundreds to thousands) and need to be able to recognize sentences not seen during training (no new words, though). This recognizer does not support converters, i.e. numbers are not converted back to integers.
|
||||
|
||||
Add to your [profile](profiles.md):
|
||||
|
||||
|
||||
@@ -70,6 +70,7 @@ declare -A CPU_TO_FRIENDLY
|
||||
CPU_TO_FRIENDLY["x86_64"]="amd64"
|
||||
CPU_TO_FRIENDLY["armv7l"]="armhf"
|
||||
CPU_TO_FRIENDLY["arm64v8"]="aarch64"
|
||||
CPU_TO_FRIENDLY["aarch64"]="aarch64"
|
||||
CPU_TO_FRIENDLY["armv6l"]="armv6l"
|
||||
|
||||
declare -A FRIENDLY_TO_DOCKER
|
||||
|
||||
+5
-2
@@ -5,6 +5,7 @@ import logging
|
||||
import os
|
||||
import platform
|
||||
import shutil
|
||||
import ssl
|
||||
import tempfile
|
||||
from collections import defaultdict
|
||||
from pathlib import Path
|
||||
@@ -86,6 +87,8 @@ class RhasspyCore:
|
||||
self.defaults = Profile.load_defaults(system_profiles_dir)
|
||||
|
||||
self.loop = asyncio.get_event_loop()
|
||||
|
||||
self.ssl_context = ssl.SSLContext()
|
||||
self._session: Optional[aiohttp.ClientSession] = aiohttp.ClientSession()
|
||||
self.dialogue_manager: Optional[RhasspyActor] = None
|
||||
|
||||
@@ -523,7 +526,7 @@ class RhasspyCore:
|
||||
self._logger.debug(status)
|
||||
os.makedirs(os.path.dirname(filename), exist_ok=True)
|
||||
|
||||
async with self.session.get(url) as response:
|
||||
async with self.session.get(url, ssl=self.ssl_context) as response:
|
||||
with open(filename, "wb") as out_file:
|
||||
async for chunk in response.content.iter_chunked(chunk_size):
|
||||
out_file.write(chunk)
|
||||
@@ -581,7 +584,7 @@ class RhasspyCore:
|
||||
src_path = dest_path
|
||||
|
||||
# Check if file is already in cache
|
||||
if os.path.exists(src_path) and (os.path.getsize(src_path) > 0):
|
||||
if not delete and os.path.exists(src_path) and (os.path.getsize(src_path) > 0):
|
||||
self._logger.debug(
|
||||
"Using cached %s for %s", src_path, dest_name
|
||||
)
|
||||
|
||||
@@ -77,10 +77,12 @@ class HomeAssistantIntentHandler(RhasspyActor):
|
||||
self.event_type_format = ""
|
||||
self.pem_file = ""
|
||||
self.handle_type: HomeAssistantHandleType = HomeAssistantHandleType.EVENT
|
||||
self.speech_actor: Optional[RhasspyActor] = None
|
||||
|
||||
def to_started(self, from_state: str) -> None:
|
||||
"""Transition to started state."""
|
||||
self.hass_config = self.profile.get("home_assistant", {})
|
||||
self.speech_actor = self.config.get("speech")
|
||||
|
||||
# Python format string for generating event type name
|
||||
self.event_type_format = self.hass_config.get(
|
||||
@@ -170,6 +172,15 @@ class HomeAssistantIntentHandler(RhasspyActor):
|
||||
kwargs["verify"] = self.pem_file
|
||||
|
||||
response = requests.post(post_url, **kwargs)
|
||||
response.raise_for_status()
|
||||
|
||||
intent = response.json()
|
||||
self._logger.debug(intent)
|
||||
|
||||
# Check for speech
|
||||
speech_text = intent.get("speech", {}).get("plain", {}).get("speech", "")
|
||||
if speech_text and self.speech_actor:
|
||||
self.send(self.speech_actor, SpeakSentence(speech_text))
|
||||
else:
|
||||
# Send event
|
||||
post_url = urljoin(self.hass_config["url"], "api/events/" + event_type)
|
||||
@@ -184,7 +195,7 @@ class HomeAssistantIntentHandler(RhasspyActor):
|
||||
response = requests.post(post_url, **kwargs)
|
||||
self._logger.debug("POSTed intent to %s", post_url)
|
||||
|
||||
response.raise_for_status()
|
||||
response.raise_for_status()
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user