Jak zbudować asystenta AI DIY z Raspberry Pi

Jak zbudować asystenta AI DIY z Raspberry Pi

Szukasz małego asystenta głosowego, który naprawdę podąża za Twoimi wskazówkami, działa na Twoim sprzęcie i nie zamówi przypadkiem dwunastu ananasów, bo źle Cię usłyszał? Asystent AI DIY z Raspberry Pi jest zaskakująco realny, przyjemny i elastyczny. Podłączysz słowo aktywujące, rozpoznawanie mowy (ASR = automatyczne rozpoznawanie mowy), mózg języka naturalnego (reguły lub LLM) i zamianę tekstu na mowę (TTS). Dodaj kilka skryptów, jedną lub dwie usługi i kilka przemyślanych poprawek audio, a otrzymasz kieszonkowy, inteligentny głośnik, który przestrzega Twoich zasad.

Przeprowadzimy Cię od zera do rozmowy z Twoim Pi bez typowego wyrywania sobie włosów. Omówimy części, konfigurację, kod, porównania, pułapki... całe burrito. 🌯

Artykuły, które mogą Ci się spodobać po przeczytaniu tego:

🔗 Jak skutecznie studiować sztuczną inteligencję
Utwórz plan nauki, realizuj projekty i śledź postępy.

🔗 Jak założyć firmę zajmującą się sztuczną inteligencją
Zweryfikuj problem, zbuduj MVP, skompletuj zespół, zabezpiecz pierwszych klientów.

🔗 Jak wykorzystać sztuczną inteligencję, aby zwiększyć produktywność
Zautomatyzuj rutynowe zadania, usprawnij przepływy pracy i zwiększ efektywność działań kreatywnych.

🔗 Jak włączyć sztuczną inteligencję do swojej firmy
Identyfikuj procesy o największym wpływie, wdrażaj programy pilotażowe, mierz zwrot z inwestycji, skaluj.


Co sprawia, że ​​asystent AI DIY z Raspberry Pi jest dobry?

  • Domyślnie prywatne – dźwięk pozostaje lokalny, jeśli to możliwe. Ty decydujesz, co opuszcza urządzenie.

  • Modułowy – wymienne komponenty jak Lego: silnik słów kluczowych, ASR, LLM, TTS.

  • Przystępna cena – w większości oprogramowanie typu open source, standardowe mikrofony, głośniki i komputer Pi.

  • Podatne na hakowanie – potrzebujesz automatyki domowej, pulpitów nawigacyjnych, procedur, niestandardowych umiejętności? Proste.

  • Niezawodny – zarządzany przez usługę, uruchamia się i zaczyna nasłuchiwać automatycznie.

  • Zabawa – dowiesz się wiele o dźwięku, procesach i projektowaniu opartym na zdarzeniach.

Mała wskazówka: Jeśli używasz Raspberry Pi 5 i planujesz używać cięższych modeli lokalnych, przy stałym obciążeniu może okazać się pomocne mocowanie chłodnicy. (W razie wątpliwości wybierz oficjalną chłodnicę aktywną przeznaczoną dla Raspberry Pi 5.) [1]


Części i narzędzia, których będziesz potrzebować 🧰

  • Raspberry Pi : Zalecane jest Pi 4 lub Pi 5 ze względu na zapas mocy obliczeniowej.

  • Karta microSD : zalecana pojemność 32 GB+.

  • Mikrofon USB : prosty mikrofon konferencyjny USB jest świetny.

  • Głośnik : USB lub głośnik 3,5 mm, albo wzmacniacz I2S HAT.

  • Sieć : Ethernet lub Wi-Fi.

  • Opcjonalne udogodnienia: obudowa, aktywne chłodzenie dla Pi 5, przycisk do komunikacji przez naciśnięcie przycisku, pierścień LED. [1]

System operacyjny i konfiguracja bazowa

  1. Wgraj system operacyjny Raspberry Pi za pomocą Raspberry Pi Imager. To prosty sposób na uzyskanie bootowalnej karty microSD z wybranymi ustawieniami. [1]

  2. Uruchom system, podłącz do sieci, a następnie zaktualizuj pakiety:

sudo apt update && sudo apt upgrade -y
  1. Podstawy dźwięku : w systemie Raspberry Pi OS można ustawić domyślne wyjście, poziomy i urządzenia za pomocą interfejsu użytkownika pulpitu lub raspi-config . Dźwięk przez USB i HDMI jest obsługiwany we wszystkich modelach; wyjście Bluetooth jest dostępne w modelach z Bluetooth. [1]

  2. Zweryfikuj urządzenia:

arecord -l aplay -l

Następnie przetestuj nagrywanie i odtwarzanie. Jeśli poziomy wydają się dziwne, sprawdź miksery i ustawienia domyślne, zanim zrzucisz winę na mikrofon.

 

Sztuczna inteligencja Raspberry Pi

Architektura w skrócie 🗺️

Przykładowy, inteligentny asystent AI DIY z wykorzystaniem Raspberry Pi wygląda następująco:

Słowo wybudzające → przechwytywanie dźwięku na żywo → transkrypcja ASR → obsługa intencji lub LLM → tekst odpowiedzi → TTS → odtwarzanie dźwięku → opcjonalne działania przez MQTT lub HTTP.

  • Słowo wybudzające : Porcupine jest małe, dokładne i działa lokalnie z kontrolą wrażliwości na słowo kluczowe. [2]

  • ASR : Whisper to wielojęzyczny, uniwersalny model ASR, trenowany przez około 680 tys. godzin; jest odporny na akcenty i szum tła. Do użytku na urządzeniu, whisper.cpp zapewnia zwięzłą ścieżkę wnioskowania C/C++. [3][4]

  • Mózg : Twój wybór – chmurowy LLM za pośrednictwem API, silnik reguł lub lokalne wnioskowanie, w zależności od mocy obliczeniowej.

  • TTS : Piper generuje lokalnie naturalną mowę, wystarczająco szybko, by udzielać szybkich odpowiedzi na przeciętnym sprzęcie. [5]


Szybka tabela porównawcza 🔎

Narzędzie Najlepszy dla Cenowo w porządku Dlaczego to działa
Słowo „Jeżozwierz Wake” Zawsze nasłuchujący wyzwalacz Bezpłatny poziom + Niskie obciążenie procesora, dokładność, łatwe wiązania [2]
Szept.cpp Lokalny ASR na Pi Otwarte źródło Dobra dokładność, przyjazny dla procesora [4]
Szybciej-szeptem Szybsze ASR na CPU/GPU Otwarte źródło Optymalizacje CTranslate2
Piper TTS Lokalny sygnał mowy Otwarte źródło Szybkie głosy, wiele języków [5]
Interfejs API Cloud LLM Bogate rozumowanie Oparte na użytkowaniu Odciąża ciężkie obliczenia
Węzeł-RED Orkiestracja działań Otwarte źródło Przepływy wizualne, przyjazne dla MQTT

Budowa krok po kroku: Twoja pierwsza pętla głosowa 🧩

Użyjemy Porcupine do słowa wybudzającego, Whisper do transkrypcji, lekkiej funkcji „mózgowej” do odpowiedzi (zastąp ją wybranym przez siebie LLM) i Piper do mowy. Zachowaj minimalizm, a potem iteruj.

1) Zainstaluj zależności

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 install sounddevice numpy
  • Porcupine: pobierz SDK/powiązania dla swojego języka i postępuj zgodnie ze wskazówkami szybkiego startu (klawisz dostępu + lista słów kluczowych + ramki audio → .process ). [2]

  • Whisper (przyjazny dla procesorów): kompilacja whisper.cpp :

git clone https://github.com/ggml-org/whisper.cpp cd whisper.cpp && cmake -B build && cmake --build build -j ./models/download-ggml-model.sh base.en ./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f your.wav -otxt

Powyższe odzwierciedla szybki start projektu. [4]

Wolisz Pythona? faster-whisper (CTranslate2) jest często bardziej dynamiczny niż czysty Python na słabszych procesorach.

2) Skonfiguruj Piper TTS

git clone https://github.com/rhasspy/piper cd piper make # Pobierz model głosu, który Ci się podoba, np. en_US-amy echo "Hello there." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav

Piper został zaprojektowany do syntezy mowy na urządzeniu z wieloma opcjami głosu/języka. [5]

3) Minimalna pętla asystenta w Pythonie

Celowo kompaktowy: czeka na frazę wybudzającą (stub), nagrywa, transkrybuje za pomocą whisper.cpp , generuje odpowiedź (placeholder), a następnie mówi przez Piper. Zamień placeholder na swój ulubiony LLM lub logikę reguł.

import os, subprocess, wave import sounddevice as sd WAKE_WORD = "hej komputer" # zamiana na Porcupine w produkcji [2] RECORD_SECONDS = 6 SAMPLE_RATE = 16000 CHANNELS = 1 WORKDIR = "/home/pi/assistant" ASR_BIN = "/home/pi/whisper.cpp/build/bin/whisper-cli" # [4] ASR_MODEL = "/home/pi/whisper.cpp/models/ggml-base.en.bin" PIPER_BIN = "/home/pi/piper/build/piper" # [5] PIPER_VOICE = "/home/pi/piper/voices/en/en_US-amy-medium.onnx" os.makedirs(WORKDIR, exist_ok=True) def record_wav(path, sekundy=SEKUNDY_NAGRYWANIA): audio = sd.rec(int(sekundy * CZĘSTOTLIWOŚĆ_PRÓBKOWANIA), częstotliwość_próbkowania=CZĘSTOTLIWOŚĆ_PRÓBKOWANIA, kanały=KANAŁY, typ_danych='int16') sd.wait() z wave.open(ścieżka, 'wb') jako w: w.setnchannels(KANAŁY); w.setsampwidth(2); w.setframerate(SAMPLE_RATE) w.writeframes(audio.tobytes()) def transcribe(path): cmd = [ASR_BIN, "-m", ASR_MODEL, "-f", path, "-otxt"] subprocess.run(cmd, check=True, cwd=WORKDIR) with open(path.replace(".wav", ".txt"), "r", encoding="utf-8") as f: return f.read().strip() def generate_reply(prompt): if "weather" in prompt.lower(): return "Nie widzę chmur, ale może być dobrze. Na wszelki wypadek weź kurtkę." zwróć "Powiedziałeś: " + prompt def speak(tekst): proc = subprocess.Popen([PIPER_BIN, "--model", PIPER_VOICE, "--output_file", f"{WORKDIR}/reply.wav"], stdin=subprocess.PIPE) proc.stdin.write(tekst.encode("utf-8")); proc.stdin.close(); proc.wait() subprocess.run(["aplay", f"{WORKDIR}/reply.wav"], check=True) print("Asystent gotowy. Wpisz frazę wybudzania, aby przetestować."") while True: typed = input("> ").strip().lower() if typed == WAKE_WORD: wav_path = f"{WORKDIR}/input.wav" record_wav(wav_path) text = transcribe(wav_path) reply = generate_reply(text) print("Użytkownik:", text); print("Asystent:", reply) speak(reply) else: print("Wpisz frazę wybudzania, aby przetestować pętlę."")

Aby faktycznie wykrywać słowa kluczowe, zintegruj detektor strumieniowy Porcupine (niskie obciążenie procesora, czułość na słowo kluczowe). [2]


Strojenie dźwięku, które naprawdę ma znaczenie 🎚️

Kilka drobnych poprawek sprawi, że Twój asystent poczuje się 10 razy mądrzejszy:

  • Odległość mikrofonu : 30–60 cm to idealna odległość dla wielu mikrofonów USB.

  • Poziomy : unikaj przesterowania na wejściu i dbaj o racjonalne odtwarzanie; popraw routing przed ściganiem duchów w kodzie. W systemie Raspberry Pi OS możesz zarządzać urządzeniem wyjściowym i poziomami za pomocą narzędzi systemowych lub raspi-config . [1]

  • Akustyka pomieszczenia : twarde ściany powodują echo, pomocna może okazać się miękka mata pod mikrofonem.

  • Próg słowa „wybudzającego” : zbyt wrażliwy → wyzwalacze duchów; zbyt rygorystyczny → będziesz krzyczeć na plastik. Porcupine pozwala dostosować czułość dla każdego słowa kluczowego. [2]

  • Termiczne : długie transkrypcje na Pi 5 korzystają z oficjalnego aktywnego chłodzenia, aby zapewnić stałą wydajność. [1]


Od zabawki do urządzenia: usługi, autostart, kontrole stanu zdrowia 🧯

Ludzie zapominają o uruchamianiu skryptów. Komputery zapominają być miłe. Zmień swoją pętlę w usługę zarządzaną:

  1. Utwórz jednostkę systemd:

[Jednostka] Opis=DIY Asystent głosowy After=network.target sound.target [Usługa] Użytkownik=pi WorkingDirectory=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Restart=always RestartSec=3 [Instalacja] WantedBy=multi-user.target
  1. Włącz to:

sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
  1. Ogony kłód:

journalctl -u asystent -f

Teraz uruchamia się przy starcie, restartuje po awarii i generalnie zachowuje się jak urządzenie. Trochę nudno, ale o wiele lepiej.


System umiejętności: Spraw, by był naprawdę przydatny w domu 🏠✨

Gdy głos wejściowy i wyjściowy są już skonfigurowane, dodaj akcje:

  • Intent router : proste trasy oparte na słowach kluczowych dla typowych zadań.

  • Inteligentny dom : publikuj zdarzenia w MQTT lub wywołuj punkty końcowe HTTP Home Assistant.

  • Wtyczki : szybkie funkcje Pythona, takie jak set_timer , what_is_the_time , play_radio , run_scene .

Nawet jeśli w pętli jest używany chmurowy LLM, w celu zapewnienia szybkości i niezawodności należy w pierwszej kolejności kierować oczywiste polecenia lokalne.


Tylko lokalnie kontra Cloud Assist: Kompromisy, które odczujesz 🌓

Tylko lokalnie.
Zalety: prywatne, offline, przewidywalne koszty.
Wady: cięższe modele mogą działać wolno na małych płytkach. Wielojęzyczne szkolenie Whispera zapewnia stabilność, jeśli przechowujesz go na urządzeniu lub pobliskim serwerze. [3]

Cloud Assist
: potężne rozumowanie, szersze okna kontekstowe.
Wady: dane opuszczają urządzenie, zależność od sieci, zmienne koszty.

Często wygrywa rozwiązanie hybrydowe: słowo kluczowe + lokalne ASR → wywołanie API w celu wnioskowania → lokalne TTS. [2][3][5]


Rozwiązywanie problemów: dziwne gremliny i szybkie rozwiązania 👾

  • Fałszywe wyzwalacze w postaci słowa „wybudź” : obniż czułość lub wypróbuj inny mikrofon. [2]

  • Opóźnienie ASR : użyj mniejszego modelu Whisper lub zbuduj whisper.cpp z flagami wydania ( -j --config Release ). [4]

  • Choppy TTS : wstępnie generuj popularne frazy, sprawdź swoje urządzenie audio i częstotliwość próbkowania.

  • Nie wykryto mikrofonu : sprawdź arecord -l i miksery.

  • Ograniczanie termiczne : w celu utrzymania wydajności na stałym poziomie należy używać oficjalnego Active Cooler na Raspberry Pi 5. [1]


Notatki dotyczące bezpieczeństwa i prywatności, które naprawdę powinieneś przeczytać 🔒

  • Aktualizuj Raspberry Pi za pomocą APT.

  • Jeśli korzystasz z interfejsu API w chmurze, rejestruj wysyłane dane i rozważ najpierw lokalne usuwanie danych osobowych.

  • Uruchamiaj usługi z najmniejszymi uprawnieniami; unikaj sudo w ExecStart, chyba że jest to wymagane.

  • Zapewnij gościom tryb lokalny


Warianty konstrukcyjne: mieszaj i dopasowuj jak kanapkę 🥪

  • Ultralokalny : Porcupine + whisper.cpp + Piper + proste zasady. Prywatny i solidny. [2][4][5]

  • Szybka pomoc chmurowa : Porcupine + (mniejszy lokalny Whisper lub chmurowy ASR) + lokalny TTS + chmurowy LLM.

  • Centrala automatyki domowej : dodaj przepływy Node-RED lub Home Assistant dla procedur, scen i czujników.


Przykładowa umiejętność: Włączanie świateł przez MQTT 💡

import paho.mqtt.client jako mqtt MQTT_HOST = "192.168.1.10" TOPIC = "dom/salon/światło/zestaw" def set_light(state: str): client = mqtt.Client() client.connect(MQTT_HOST, 1883, 60) payload = "ON" if state.lower().startswith("on") else "OFF" client.publish(TOPIC, payload, qos=1, retain=False) client.disconnect() # jeśli "włącz światła" w tekście: set_light("on")

Dodaj kwestię głosową, taką jak: „włącz lampę w salonie”, a poczujesz się jak czarodziej.


Dlaczego ten stos działa w praktyce 🧪

  • Porcupine jest skuteczny i dokładny w wykrywaniu słów-aktywatorów na małych tablicach, co sprawia, że ​​ciągłe słuchanie jest możliwe. [2]

  • Obszerne, wielojęzyczne szkolenie Whisper sprawia, że ​​jest on odporny na zróżnicowane środowiska i akcenty. [3]

  • whisper.cpp pozwala na wykorzystanie tej mocy w urządzeniach wykorzystujących wyłącznie procesor, takich jak Pi. [4]

  • Piper pozwala na udzielanie zwięzłych odpowiedzi bez przesyłania dźwięku do chmury TTS. [5]


Za długie, nie przeczytałem

Zbuduj modułowego, prywatnego asystenta AI DIY z Raspberry Pi , łącząc Porcupine jako słowo wybudzające, Whisper (przez whisper.cpp ) jako ASR, wybrany mózg jako odpowiedzi i Piper jako lokalny TTS. Zapakuj go w usługę systemd, dostrój dźwięk i podłącz akcje MQTT lub HTTP. Jest tańszy niż myślisz i dziwnie przyjemny w użytkowaniu. [1][2][3][4][5]


Odniesienia

  1. Oprogramowanie i chłodzenie Raspberry Pi – informacje o produkcie Raspberry Pi Imager (pobierz i używaj) oraz Pi 5 Active Cooler

  2. Porcupine Wake Word – SDK i szybki start (słowa kluczowe, wrażliwość, wnioskowanie lokalne)

  3. Whisper (model ASR) – wielojęzyczny, solidny model ASR trenowany przez ~680 tys. godzin

    • Radford i in., Rozpoznawanie mowy metodą solidnego nadzoru na dużą skalę (szept): czytaj więcej

  4. whisper.cpp – przyjazne dla procesora wnioskowanie Whisper z wierszem poleceń i krokami kompilacji

  5. Piper TTS – szybka, lokalna neuronowa synteza mowy z wieloma głosami/językami

Znajdź najnowszą sztuczną inteligencję w oficjalnym sklepie z asystentami AI

O nas


Powrót do bloga