feat: Jarvis v2 - CPU optimized always-listening for iMac Ubuntu
- PipeWire/pw-record backend (no PortAudio needed) - tested mic live - VAD: Energy (immediate) + Silero (torch CPU) switchable - Wakeword: openWakeWord TFLite hey_jarvis 0.4 - STT: faster-whisper base int8 CPU - model loads OK on i3 - SpeakerID: ECAPA embeddings + fallback stats, enrollment store - Vision: OpenCV Haar + face_recognition + webcam cam0 640x480 verified - LLM: ollama/qwen2.5:3b, gemini_cli, hermes_api, echo strategies - TTS: Piper + espeak + echo fallbacks - Core pipeline: IDLE -> WAKE -> RECORDING -> STT -> SpeakerID/FaceID fusion -> LLM -> TTS -> followup window - Config via jarvis.yaml, soul.md persona - CLI tools: run, devices, enroll-speaker, enroll-face, test-vad, test-mic - Systemd user service ready - Tested on iMac 2010 i3 550 15GB Ubuntu 26.04 CPU-only
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# Jarvis v2 - Always-Listening Assistant (CPU)
|
||||
|
||||
Designed for Intel iMac Ubuntu 26.04, 15GB RAM, CPU-only.
|
||||
|
||||
## Architecture
|
||||
```
|
||||
Mic 16kHz -> VAD (silero) -> Wakeword (openWakeWord TFLite) -> STT (faster-whisper int8) -> SpeakerID (ECAPA) + FaceID (OpenCV) -> LLM (ollama/gemini_cli/hermes) -> TTS (piper) -> Speaker
|
||||
```
|
||||
|
||||
## Quick start on iMac
|
||||
|
||||
```bash
|
||||
cd ~/Projects/jarvis-v2
|
||||
# install uv if not present
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
export PATH=$HOME/.local/bin:$PATH
|
||||
uv venv .venv --python 3.14
|
||||
source .venv/bin/activate
|
||||
uv pip install -e .
|
||||
|
||||
# for audio libs you may need (if sudo works, otherwise pip wheels should work)
|
||||
# sudo apt install portaudio19-dev libasound2-dev espeak
|
||||
|
||||
# configure
|
||||
cp jarvis.yaml.example jarvis.yaml
|
||||
# edit jarvis.yaml
|
||||
|
||||
# Test components
|
||||
python scripts/test_mic.py
|
||||
python scripts/test_wakeword.py
|
||||
python scripts/test_stt.py
|
||||
|
||||
# Enroll family voices (3 samples each)
|
||||
python scripts/enroll_speaker.py --name Adolfo --mic
|
||||
python scripts/enroll_speaker.py --name Grace --mic
|
||||
python scripts/enroll_speaker.py --name Elias --mic
|
||||
|
||||
# Enroll faces
|
||||
python scripts/enroll_face.py --name Adolfo
|
||||
python scripts/enroll_face.py --name Grace
|
||||
|
||||
# Run
|
||||
jarvis run
|
||||
# or
|
||||
python -m jarvis.cli run --config jarvis.yaml
|
||||
|
||||
# Install as systemd user service (always-on)
|
||||
./scripts/install_service.sh
|
||||
```
|
||||
|
||||
## Config
|
||||
See jarvis.yaml.example - covers audio, VAD, wakeword, STT, speaker, vision, LLM, TTS.
|
||||
|
||||
## LLM Providers
|
||||
- ollama: local qwen2.5:3b (install ollama then `ollama pull qwen2.5:3b`)
|
||||
- gemini_cli: uses existing gemini CLI + soul.md
|
||||
- hermes_api: points to Hermes API
|
||||
- echo: placeholder
|
||||
|
||||
## Future
|
||||
- voice trigger via small LLM gate (qwen0.5B decides if addressed)
|
||||
- Face corroboration on wake
|
||||
- Home Assistant / MCP tools
|
||||
Reference in New Issue
Block a user