Skip to content

Commit

Permalink
Add docker
Browse files Browse the repository at this point in the history
  • Loading branch information
synesthesiam committed Dec 4, 2023
1 parent c49f5e9 commit 07bebb8
Show file tree
Hide file tree
Showing 8 changed files with 105 additions and 8 deletions.
8 changes: 8 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
*
!requirements.txt
!MANIFEST.in
!setup.py
!script/setup
!script/run
!wyoming_satellite/*.py
!docker/run
22 changes: 22 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
FROM python:3.11-slim-bookworm

ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
apt-get install --yes --no-install-recommends avahi-utils

WORKDIR /app

COPY script/setup ./script/
COPY setup.py requirements.txt MANIFEST.in ./
COPY wyoming_satellite/ ./wyoming_satellite/

RUN script/setup

COPY script/run ./script/
COPY docker/run ./

EXPOSE 10700

ENTRYPOINT ["/app/run"]
38 changes: 38 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
version: "3.8"
services:
microphone:
image: "rhasspy/wyoming-mic-external"
ports:
- "10600:10600"
devices:
- /dev/snd:/dev/snd
group_add:
- audio
command:
- "--device"
- "sysdefault"
- "--debug"
playback:
image: "rhasspy/wyoming-snd-external"
ports:
- "10601:10601"
devices:
- /dev/snd:/dev/snd
group_add:
- audio
command:
- "--device"
- "sysdefault"
- "--debug"
satellite:
image: "rhasspy/wyoming-satellite"
ports:
- "10700:10700"
command:
- "--name"
- "my satellite"
- "--mic-uri"
- "tcp://microphone:10600"
- "--snd-uri"
- "tcp://playback:10601"
- "--debug"
3 changes: 3 additions & 0 deletions docker/run
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
/app/script/run \
--uri tcp://0.0.0.0:10700 "$@"
3 changes: 3 additions & 0 deletions script/build_docker
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
docker buildx build . \
-t 'rhasspy/wyoming-satellite' "$@"
6 changes: 6 additions & 0 deletions script/run_docker
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env bash
docker run \
-it \
-p 10700:10700 \
--device /dev/snd \
'rhasspy/wyoming-satellite' "$@"
7 changes: 3 additions & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from setuptools import setup

this_dir = Path(__file__).parent
module_dir = this_dir / "wyoming_handle_external"

requirements = []
requirements_path = this_dir / "requirements.txt"
Expand All @@ -19,8 +18,8 @@
setup(
name="wyoming_handle_external",
version="1.0.0",
description="Wyoming server for external intent handling",
url="http://github.com/rhasspy/wyoming-handle-external",
description="Wyoming server for remote voice satellite",
url="http://github.com/rhasspy/wyoming-satellite",
author="Michael Hansen",
author_email="[email protected]",
packages=setuptools.find_packages(),
Expand All @@ -35,5 +34,5 @@
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
],
keywords="rhasspy wyoming intent handle",
keywords="rhasspy wyoming satellite",
)
26 changes: 22 additions & 4 deletions wyoming_satellite/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
import asyncio
import logging
import time
import uuid
from enum import Enum
from functools import partial
from pathlib import Path
from typing import Optional

from wyoming.asr import Transcript
from wyoming.asr import Transcript, Transcribe
from wyoming.audio import AudioChunk, AudioStart, AudioStop
from wyoming.client import AsyncClient
from wyoming.event import Event
Expand Down Expand Up @@ -59,7 +60,7 @@ async def main() -> None:
)
parser.add_argument(
"--zeroconf-name",
help="Name used for zeroconf discovery (default: satellite name)",
help="Name used for zeroconf discovery (default: MAC from uuid.getnode)",
)
#
parser.add_argument("--debug", action="store_true", help="Log DEBUG messages")
Expand All @@ -86,13 +87,16 @@ async def main() -> None:
if (not args.no_zeroconf) and isinstance(server, AsyncTcpServer):
from wyoming.zeroconf import register_server

if not args.zeroconf_name:
args.zeroconf_name = get_mac_address()

tcp_server: AsyncTcpServer = server
await register_server(
name=args.zeroconf_name or args.name,
name=args.zeroconf_name,
port=tcp_server.port,
host=tcp_server.host,
)
_LOGGER.debug("Zeroconf discovery enabled")
_LOGGER.debug("Zeroconf discovery enabled (name=%s)", args.zeroconf_name)

try:
await server.run(partial(SatelliteEventHandler, wyoming_info, args))
Expand Down Expand Up @@ -195,13 +199,15 @@ async def handle_event(self, event: Event) -> bool:
elif (
Detect.is_type(event.type)
or Detection.is_type(event.type)
or Transcribe.is_type(event.type)
or VoiceStarted.is_type(event.type)
or VoiceStopped.is_type(event.type)
or Synthesize.is_type(event.type)
):
# Other client events:
# - Detect for start of wake word detection
# - Detection for when wake word is detected
# - Transcribe for when STT starts
# - VoiceStarted/VoiceStopped for when user starts/stops speaking
# - Synthesize for TTS text
await self.forward_event(event)
Expand Down Expand Up @@ -322,6 +328,18 @@ async def disconnect(self) -> None:
self.is_running = False


# -----------------------------------------------------------------------------


def get_mac_address() -> str:
"""Return MAC address formatted as hex with no colons."""
return "".join(
["{:02x}".format((uuid.getnode() >> ele) & 0xFF) for ele in range(0, 8 * 6, 8)][
::-1
]
)


# -----------------------------------------------------------------------------

if __name__ == "__main__":
Expand Down

0 comments on commit 07bebb8

Please sign in to comment.