diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..9fab0dc --- /dev/null +++ b/install.sh @@ -0,0 +1,75 @@ +#!/bin/bash +set -e + +echo "[install] HeadMic — Vixy's Ears" +echo "[install] Setting up on $(hostname)" + +# System packages +echo "[install] Installing system packages..." +sudo apt install -y -qq python3-pip python3-venv python3-dev sox alsa-utils \ + libportaudio2 portaudio19-dev libgl1 2>/dev/null + +# Native libs (Edge TPU + flatbuffers) +ARCH=$(dpkg --print-architecture) +LIB_DIR="$(dirname "$0")/lib/$ARCH" +if [ -d "$LIB_DIR" ]; then + echo "[install] Installing native libs from $LIB_DIR" + sudo cp "$LIB_DIR"/libedgetpu.so.* /usr/lib/aarch64-linux-gnu/ 2>/dev/null || true + sudo cp "$LIB_DIR"/libflatbuffers.so.* /usr/lib/aarch64-linux-gnu/ 2>/dev/null || true + sudo ln -sf libedgetpu.so.1.0 /usr/lib/aarch64-linux-gnu/libedgetpu.so.1 2>/dev/null || true + sudo ln -sf libflatbuffers.so.24.3.25 /usr/lib/aarch64-linux-gnu/libflatbuffers.so 2>/dev/null || true + sudo ldconfig +fi + +# udev rules +echo "[install] Setting up udev rules..." +echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="2886", ATTR{idProduct}=="001a", MODE="0666"' | sudo tee /etc/udev/rules.d/99-xvf3800.rules > /dev/null +echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="1a6e", MODE="0666"' | sudo tee /etc/udev/rules.d/99-coral.rules > /dev/null +echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666"' | sudo tee -a /etc/udev/rules.d/99-coral.rules > /dev/null +sudo udevadm control --reload-rules && sudo udevadm trigger + +# User groups +sudo usermod -a -G dialout,audio "$(whoami)" 2>/dev/null || true + +# Python venv +echo "[install] Creating venv and installing dependencies..." +cd "$(dirname "$0")" +python3 -m venv .venv +.venv/bin/pip install -q 'setuptools<70' +.venv/bin/pip install -q -r requirements.txt +.venv/bin/pip install -q ai-edge-litert resemblyzer + +# Systemd service +echo "[install] Installing systemd service..." +cat > /tmp/headmic.service << 'EOF' +[Unit] +Description=HeadMic - Vixy's Ears +After=network.target sound.target + +[Service] +Type=simple +User=alex +WorkingDirectory=/home/alex/Projects/headmic +ExecStart=/home/alex/Projects/headmic/.venv/bin/python -m uvicorn headmic:app --host 0.0.0.0 --port 8446 +Restart=always +RestartSec=5 +Environment=PYTHONUNBUFFERED=1 +Environment=ALSA_SPEAKER=plughw:Array,0 +Environment=ALSA_SPEAKER_AEC=plughw:Array_1,0 + +[Install] +WantedBy=multi-user.target +EOF +sudo mv /tmp/headmic.service /etc/systemd/system/ +sudo systemctl daemon-reload +sudo systemctl enable headmic + +# Config directory +mkdir -p ~/.vixy + +echo "[install] Done!" +echo "" +echo " Learn ears: .venv/bin/python xvf3800.py --learn" +echo " Test LEDs: .venv/bin/python xvf3800.py --test-leds" +echo " Start: sudo systemctl start headmic" +echo " Logs: journalctl -u headmic -f" diff --git a/lib/aarch64/libedgetpu.so.1.0 b/lib/aarch64/libedgetpu.so.1.0 new file mode 100755 index 0000000..7265041 Binary files /dev/null and b/lib/aarch64/libedgetpu.so.1.0 differ diff --git a/lib/aarch64/libflatbuffers.so.24.3.25 b/lib/aarch64/libflatbuffers.so.24.3.25 new file mode 100644 index 0000000..60aad3d Binary files /dev/null and b/lib/aarch64/libflatbuffers.so.24.3.25 differ