Як створити самостійного помічника зі штучним інтелектом за допомогою Raspberry Pi

Як створити самостійного помічника зі штучним інтелектом за допомогою Raspberry Pi

Хочете крихітного голосового помічника, який справді слідує вашим вказівкам, працює на вашому власному обладнанні та випадково не замовить дванадцять ананасів, бо неправильно вас почув? Саморобний помічник зі штучним інтелектом на Raspberry Pi є напрочуд досяжним, цікавим та гнучким. Ви підключите сигнал пробудження, розпізнавання мовлення (ASR = автоматичне розпізнавання мовлення), мозок для природної мови (правила або LLM) та перетворення тексту в мовлення (TTS). Додайте кілька скриптів, один або два сервіси та деякі ретельні налаштування звуку, і ви отримаєте кишенькову розумну колонку, яка підкоряється вашим правилам.

Давайте проведемо вас від нуля до спілкування зі своїм Пі без звичайного клопоту. Ми розглянемо деталі, налаштування, код, порівняння, підводні камені... все буріто. 🌯

Статті, які вам, можливо, буде цікаво прочитати після цієї:

🔗 Як ефективно вивчати штучний інтелект
Створіть план навчання, практикуйте проекти та відстежуйте прогрес.

🔗 Як створити компанію зі штучним інтелектом
Перевірити проблему, створити MVP, зібрати команду, залучити перших клієнтів.

🔗 Як використовувати штучний інтелект для підвищення продуктивності
Автоматизуйте рутинні завдання, оптимізуйте робочі процеси та збільшуйте творчий результат.

🔗 Як впровадити штучний інтелект у свій бізнес
Визначити процеси з високим рівнем впливу, впровадити пілотні проекти, виміряти рентабельність інвестицій, масштабувати.


Що робить Raspberry Pi хорошим помічником зі штучним інтелектом для самостійного використання ✅

  • Приватне за замовчуванням – зберігайте аудіо локально, де це можливо. Ви вирішуєте, що залишає пристрій.

  • Модульна система – компоненти для обміну, такі як Lego: механізм перетворення слів, ASR, LLM, TTS.

  • Доступні ціни – переважно з відкритим вихідним кодом, стандартні мікрофони, динаміки та Raspberry Pi.

  • Зламний – хочете домашню автоматизацію, інформаційні панелі, процедури, користувацькі навички? Легко.

  • Надійний – керований сервісом, завантажується та починає прослуховувати автоматично.

  • Цікаво – ви дізнаєтеся багато нового про аудіо, процеси та подієво-орієнтований дизайн.

Маленька порада: якщо ви використовуєте Raspberry Pi 5 і плануєте використовувати потужніші локальні моделі, кріплення для охолодження допоможе витримувати тривале навантаження. (Якщо сумніваєтеся, оберіть офіційний активний охолоджувач, розроблений для Pi 5.) [1]


Запчастини та інструменти, які вам знадобляться 🧰

  • Raspberry Pi : рекомендується використовувати Pi 4 або Pi 5 для забезпечення вільного простору.

  • Карта microSD : рекомендовано 32 ГБ+.

  • USB-мікрофон : простий USB-мікрофон для конференцій чудово підійде.

  • Динамік : USB або 3,5-мм динамік, або підсилювач I2S HAT.

  • Мережа : Ethernet або Wi-Fi.

  • Додаткові зручності: корпус, активний кулер для Pi 5, кнопка для активації функції «натисни і говори», світлодіодне кільце. [1]

ОС та базове налаштування

  1. Прошийте ОС Raspberry Pi за допомогою Raspberry Pi Imager. Це простий спосіб отримати завантажувальну microSD-карту з потрібними пресетами. [1]

  2. Завантаження, підключення до мережі, а потім оновлення пакетів:

оновлення sudo apt && оновлення sudo apt -y
  1. Основи аудіо : В Raspberry Pi OS ви можете встановити вихідний сигнал за замовчуванням, рівні та пристрої через інтерфейс робочого столу або raspi-config . Аудіо через USB та HDMI підтримується в усіх моделях; вихід Bluetooth доступний на моделях з Bluetooth. [1]

  2. Перевірте пристрої:

arecord -l aplay -l

Потім перевірте запис і відтворення. Якщо рівні здаються дивними, перевірте мікшери та налаштування за замовчуванням, перш ніж звинувачувати мікрофон.

 

Штучний інтелект Raspberry Pi

Архітектура одним поглядом 🗺️

Розумний саморобний ШІ-помічник з Raspberry Pi виглядає так:

Слово пробудження → запис аудіо в реальному часі → транскрипція ASR → обробка намірів або LLM → текст відповіді → TTS → відтворення аудіо → додаткові дії через MQTT або HTTP.

  • Слово-будильник : Porcupine — це невеликий, точний інструмент, який працює локально з контролем чутливості для кожного ключового слова. [2]

  • ASR : Whisper — це багатомовна універсальна модель ASR, навчена приблизно 680 тисяч годин; вона стійка до акцентів/фонового шуму. Для використання на пристрої shippe.cpp забезпечує простий шлях виведення C/C++. [3][4]

  • Мозок : Ваш вибір – хмарний LLM через API, механізм правил або локальний висновок, залежно від потужності.

  • TTS : Piper генерує природне мовлення локально, достатньо швидко для швидкої відповіді на скромному обладнанні. [5]


Таблиця швидкого порівняння 🔎

Інструмент Найкраще для Ціна приблизно Чому це працює
Слово пробудження дикобраза Тригер постійного прослуховування Безкоштовний рівень + Низьке навантаження на процесор, точність, прості прив'язки [2]
Whisper.cpp Локальний ASR на Pi Відкритий код Гарна точність, зручність використання процесора [4]
Швидше-шепіт Швидше ASR на процесорі/графічному процесорі Відкритий код Оптимізація CTranslate2
Пайпер ТТС Локальний мовленнєвий вивід Відкритий код Швидкі голоси, багато мов [5]
API хмарного LLM Багате міркування На основі використання Розвантажує важкі обчислення
Вузол-ЧЕРВОНИЙ Оркестрування дій Відкритий код Візуальні потоки, сумісні з MQTT

Покрокове складання: Ваша перша голосова петля 🧩

Ми використовуватимемо Porcupine для слова-будки, Whisper для транскрипції, легку функцію «brain» для відповіді (замініть її на обраний вами LLM) та Piper для мовлення. Зробіть його мінімальним, а потім повторіть.

1) Встановлення залежностей

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 встановити звуковий пристрій numpy
  • Porcupine: завантажте SDK/прив’язки для вашої мови та дотримуйтесь інструкцій швидкого запуску (клавіша доступу + список ключових слів + аудіокадри → .process ). [2]

  • Whisper (сумісний з процесором): збірка shittle.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

Вищезазначене відображає швидкий старт проекту. [4]

Віддаєте перевагу Python? faster-whisper (CTranslate2) часто працює швидше, ніж звичайний Python на скромних процесорах.

2) Налаштуйте Piper TTS

git clone https://github.com/rhasspy/piper cd piper make # Завантажте голосову модель, яка вам подобається, наприклад, en_US-amy echo "Привіт." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav

Piper розроблено для синтезу мовлення на пристрої з кількома варіантами голосу/мов. [5]

3) Мінімальний допоміжний цикл у Python

Навмисно компактно: очікує на фразу-заглушку, записує, транскрибує за допомогою shipset.cpp , генерує відповідь (заповнювач), а потім озвучує через Piper. Замініть заповнювач на ваш улюблений LLM або логіку правила.

import os, subprocess, wave import sounddevice as sd WAKE_WORD = "hey computer" # заміна на Porcupine у ​​продакшені [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, seconds=RECORD_SECONDS): audio = sd.rec(int(секунди * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=CHANNELS, dtype='int16') sd.wait() with wave.open(path, 'wb') as w: w.setnchannels(CHANNELS); 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 "Я не бачу хмар, але все може бути добре. Візьміть куртку про всяк випадок." return "Ви сказали: " + prompt def speak(text): proc = subprocess.Popen([PIPER_BIN, "--model", PIPER_VOICE, "--output_file", f"{WORKDIR}/reply.wav"], stdin=subprocess.PIPE) proc.stdin.write(text.encode("utf-8")); proc.stdin.close(); proc.wait() subprocess.run(["aplay", f"{WORKDIR}/reply.wav"], check=True) print("Помічник готовий. Введіть фразу для перевірки.") 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("Користувач:", text); print("Помічник:", відповідь) speak(відповідь) else: print("Введіть фразу для перевірки циклу.")

Для справжнього виявлення слів-пробуджень інтегруйте потоковий детектор Porcupine (низький рівень процесора, чутливість до ключового слова). [2]


Налаштування аудіо, яке справді має значення 🎚️

Кілька незначних виправлень роблять вашого помічника в 10 разів розумнішим:

  • Відстань між мікрофонами : 30–60 см – це оптимальний діапазон для багатьох USB-мікрофонів.

  • Рівні : уникайте обрізання на вхідному сигналі та забезпечте правильне відтворення; виправте маршрутизацію, перш ніж ганятися за фантомами коду. В Raspberry Pi OS ви можете керувати вихідним пристроєм та рівнями за допомогою системних інструментів або raspi-config . [1]

  • Акустика приміщення : тверді стіни викликають луну; м'який килимок під мікрофоном допомагає.

  • Поріг сприйняття ключового слова : занадто чутливий → спрацьовують примарні тригери; занадто суворий → ви будете кричати на пластик. Porcupine дозволяє налаштовувати чутливість для кожного ключового слова. [2]

  • Термічні режими : довгі транскрипції на Pi 5 отримують вигоду від офіційного активного охолодження для стабільної продуктивності. [1]


Перехід від іграшки до побутової техніки: послуги, автозапуск, перевірки справності 🧯

Люди забувають запускати скрипти. Комп'ютери забувають бути чемними. Перетворіть свій цикл на керований сервіс:

  1. Створіть модуль systemd:

[Блок] Опис=DIY Голосовий помічник Після=network.target sound.target [Сервіс] Користувач=pi WorkingDirectory=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Restart=завжди RestartSec=3 [Встановлення] WantedBy=multi-user.target
  1. Увімкнути це:

sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
  1. Хвости колод:

journalctl -u помічник -f

Тепер він запускається під час завантаження, перезавантажується після збою та загалом поводиться як звичайний пристрій. Трохи нудно, але набагато краще.


Система навичок: зробіть її справді корисною вдома 🏠✨

Як тільки введення та виведення голосу будуть чіткими, додайте дії:

  • Маршрутизатор Intent : прості маршрути за ключовими словами для поширених завдань.

  • Розумний дім : публікація подій у MQTT або виклик HTTP-кінцевих точок Home Assistant.

  • Плагіни : швидкі функції Python, такі як set_timer , what_is_the_time , play_radio , run_scene .

Навіть з хмарним LLM у циклі, спочатку направляйте очевидні локальні команди для швидкості та надійності.


Тільки локальний доступ проти хмарної допомоги: компроміси, які ви відчуєте 🌓

Тільки локально.
Плюси: приватне, офлайн, передбачувані витрати.
Мінуси: важчі моделі можуть бути повільними на невеликих дошках. Багатомовне навчання Whisper допомагає забезпечити надійність, якщо ви зберігаєте його на пристрої або на сусідньому сервері. [3]

Хмарна допомога.
Плюси: потужне мислення, більші контекстні вікна.
Мінуси: дані залишають пристрій, залежність від мережі, змінні витрати.

Гібрид часто перемагає: слово пробудження + локальний ASR → виклик API для міркування → локальний TTS. [2][3][5]


Вирішення проблем: Дивні гремліни та швидкі виправлення 👾

  • Хибні спрацьовування за словом пробудження : зменште чутливість або спробуйте інший мікрофон. [2]

  • Затримка ASR : використовуйте меншу модель Whisper або зберіть shitset.cpp з прапорцями випуску ( -j --config Release ). [4]

  • Переривчастий текст : попередня генерація поширених фраз; підтвердження аудіопристрою та частоти дискретизації.

  • Мікрофон не виявлено : перевірте arecord -l та мікшери.

  • Термічне дроселювання : використовуйте офіційний активний кулер на Pi 5 для стабільної продуктивності. [1]


Примітки щодо безпеки та конфіденційності, які вам варто прочитати 🔒

  • Оновлюйте свій Pi за допомогою APT.

  • Якщо ви використовуєте будь-який хмарний API, реєструйте надсилані дані та спочатку подумайте про видалення особистих даних локально.

  • Запускайте служби з найменшими привілеями; уникайте sudo в ExecStart, якщо це не потрібно.

  • Забезпечте режим лише для місцевих гостей або тихі години.


Варіанти складання: комбінуйте, як сендвіч 🥪

  • Ультралокальний : Porcupine + sheppe.cpp + Piper + прості правила. Приватний та надійний. [2][4][5]

  • Швидка хмарна допомога : Porcupine + (менший локальний Whisper або хмарний ASR) + локальний TTS + хмарний LLM.

  • Центр домашньої автоматизації : додайте потоки Node-RED або Home Assistant для процедур, сцен та датчиків.


Приклад навички: Увімкнення світла через MQTT 💡

import paho.mqtt.client as mqtt MQTT_HOST = "192.168.1.10" TOPIC = "home/livingroom/light/set" 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() # якщо "увімкнути світло" в тексті: set_light("on")

Додайте голосову репліку на кшталт: «увімкніть лампу у вітальні», і ви відчуєте себе чарівником.


Чому цей стек працює на практиці 🧪

  • Porcupine ефективно та точно виявляє слова-пробудження на невеликих дошках, що робить можливим постійне прослуховування. [2]

  • Завдяки широкому та багатомовному навчанню Whisper його можна адаптувати до різних середовищ та акцентів. [3]

  • wiffel.cpp дозволяє використовувати цю потужність на пристроях, що використовують лише процесор, таких як Pi. [4]

  • Piper забезпечує швидкі відповіді, не пересилаючи аудіо до хмарного TTS. [5]


Занадто довго, не читав(ла)

Створіть модульного, приватного саморобного ШІ-помічника за допомогою Raspberry Pi , поєднавши Porcupine для сигналу пробудження, Whisper (через wiffel.cpp ) для ASR, ваш вибір brain для відповідей та Piper для локального TTS. Обгорніть це як сервіс systemd, налаштуйте звук та підключіть дії MQTT або HTTP. Це дешевше, ніж ви думаєте, і дивно приємно з цим жити. [1][2][3][4][5]


Посилання

  1. Програмне забезпечення та охолодження для Raspberry Pi – інформація про Raspberry Pi Imager (завантаження та використання) та активний кулер Pi 5.

  2. Porcupine Wake Word – SDK та швидкий старт (ключові слова, чутливість, локальний висновок)

  3. Whisper (модель ASR) – багатомовний, надійний ASR, навчений приблизно 680 тис. годин

    • Редфорд та ін., Надійне розпізнавання мовлення за допомогою великомасштабного слабкого контролю (Whisper): читати далі

  4. wishept.cpp – зручний для процесора вивід Whisper з командним рядком та кроками збірки

  5. Piper TTS – швидкий локальний нейронний синтезатор мовлення з кількома голосами/мовами

Знайдіть найновіший штучний інтелект в офіційному магазині помічників зі штучним інтелектом

Про нас


Повернутися до блогу