Как собрать самодельного ИИ-помощника на базе Raspberry Pi

Как собрать самодельного ИИ-помощника на базе Raspberry Pi

Хотите миниатюрного голосового помощника, который действительно следует вашим указаниям, работает на вашем собственном оборудовании и не закажет случайно двенадцать ананасов, потому что неправильно вас понял? Создание собственного ИИ-помощника на Raspberry Pi — это удивительно осуществимо, увлекательно и гибко. Вам понадобится подключить кодовое слово для активации, распознавание речи (ASR = автоматическое распознавание речи), «мозг» для обработки естественного языка (правила или LLM) и преобразование текста в речь (TTS). Добавьте несколько скриптов, одну-две службы и несколько тщательных настроек звука, и у вас получится карманная умная колонка, которая подчиняется вашим правилам.

Давайте начнём с нуля и научимся общаться с вашим Raspberry Pi без обычных сложностей. Мы рассмотрим компоненты, настройку, код, сравнения, подводные камни... всё досконально. 🌯

Статьи, которые могут вас заинтересовать после этой:

🔗 Как эффективно изучать ИИ
Составьте план обучения, выполняйте практические задания и отслеживайте прогресс.

🔗 Как запустить компанию, занимающуюся искусственным интеллектом
Проверка проблемы, разработка 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 amp HAT.

  • Сеть : Ethernet или Wi-Fi.

  • Дополнительные опции: корпус, активный кулер для Pi 5, кнопка для режима "нажми и говори", светодиодное кольцо. [1]

Настройка ОС и базовых параметров

  1. Прошейте Raspberry Pi OS с помощью Raspberry Pi Imager. Это простой способ получить загрузочную карту microSD с нужными вам настройками. [1]

  2. Загрузите систему, подключитесь к сети, затем обновите пакеты:

sudo apt update && sudo apt upgrade -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 тыс. часов; она устойчива к акцентам/фоновому шуму. Для использования на устройстве файл whisper.cpp предоставляет простой путь вывода на C/C++. [3][4]

  • Brain : На ваш выбор – облачная LLM-система через API, система правил или локальный вывод в зависимости от вычислительной мощности.

  • TTS : Piper генерирует естественную речь локально, достаточно быстро для быстрого ответа на скромном оборудовании. [5]


Таблица для быстрого сравнения 🔎

Инструмент Лучше всего подходит для Приблизительно дорого Почему это работает
Слово пробуждения дикобраза Триггер постоянного прослушивания Бесплатный уровень + Низкое потребление ресурсов процессора, точная и простая привязка [2]
Whisper.cpp Локальное ASR на Raspberry Pi Открытый исходный код Высокая точность, экономичность процессора [4]
Быстрый шепот Более высокая скорость обработки сигналов ASR на ЦП/ГП Открытый исходный код Оптимизации CTranslate2
Пайпер ТТС Локальный речевой вывод Открытый исходный код Быстрый голос, много языков [5]
Cloud LLM API Сложные рассуждения на основе использования Разгружает ресурсоемкие вычислительные ресурсы
Node-RED Организация действий Открытый исходный код Визуальное отображение потоков, совместимость с MQTT

Пошаговое создание: Ваш первый голосовой луп 🧩

Для активации по ключевому слову мы будем использовать Porcupine, для транскрипции — Whisper, для ответа — облегченную функцию «мозга» (замените на выбранную вами LLM-функцию), а для распознавания речи — Piper. Начните с минимального набора функций, а затем постепенно добавляйте новые.

1) Установите зависимости

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

  • Whisper (оптимизирован для процессора): собрать 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

Вышеизложенное отражает быстрый старт проекта. [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

Намеренно компактный: ожидает фразу для пробуждения (заглушка), записывает, расшифровывает с помощью whisper.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, секунд=RECORD_SECONDS): audio = sd.rec(int(seconds * 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 "I can't see the clouds, but it might be fine. Bring a jacket just in case." 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("Ассистент:", reply) speak(reply) else: print("Введите фразу для проверки цикла.")

Для реального распознавания ключевых слов интегрируйте потоковый детектор Porcupine (низкая загрузка ЦП, чувствительность к каждому ключевому слову). [2]


Настройка звука, которая действительно имеет значение 🎚️

Несколько незначительных доработок позволят вашему ассистенту почувствовать себя в 10 раз умнее:

  • Расстояние до микрофона : 30–60 см — оптимальное расстояние для многих USB-микрофонов.

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

  • Акустика помещения : твердые стены вызывают эхо; мягкий коврик под микрофоном помогает.

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

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


Превращение игрушки в бытовую технику: сервисное обслуживание, автозапуск, проверка состояния 🧯

Люди забывают запускать скрипты. Компьютеры забывают быть вежливыми. Превратите свой цикл в управляемый сервис:

  1. Создайте юнит systemd:

[Unit] Description=DIY Voice Assistant After=network.target sound.target [Service] User=pi WorkingDirectory=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Restart=always RestartSec=3 [Install] 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 assistant -f

Теперь он запускается при загрузке, перезапускается при сбое и в целом ведёт себя как бытовая техника. Немного скучновато, но намного лучше.


Система навыков: сделайте её действительно полезной дома 🏠✨

После того, как входящий и исходящий голос будут работать стабильно, добавьте действия:

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

  • Умный дом : публикуйте события в 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 или соберите whisper.cpp с флагами выпуска ( -j --config Release ). [4]

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

  • Микрофон не обнаружен : проверьте arecord -l и микшеры.

  • Тепловое дросселирование : используйте официальный активный кулер на Raspberry Pi 5 для стабильной работы. [1]


Советы по безопасности и конфиденциальности, которые вам действительно стоит прочитать 🔒

  • Поддерживайте свой Raspberry Pi в актуальном состоянии с помощью APT.

  • Если вы используете какой-либо облачный API, регистрируйте отправляемые данные и подумайте о том, чтобы предварительно удалить личную информацию локально.

  • Запускайте службы с минимальными привилегиями; избегайте использования sudo в ExecStart, если это не требуется.

  • Предусмотрите режим работы только локальной сети для гостей или в часы тишины.


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

  • Сверхлокальный : Porcupine + whisper.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() # if "turn on the lights" in text: set_light("on")

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


Почему этот стек работает на практике 🧪

  • Porcupine эффективно и точно распознает ключевые слова на небольших платах, что делает возможным постоянное прослушивание. [2]

  • Обширная многоязычная программа обучения Whisper делает его устойчивым к различным условиям и акцентам. [3]

  • whisper.cpp позволяет использовать эту мощность на устройствах, работающих только с процессором, таких как Raspberry Pi. [4]

  • Piper обеспечивает быструю реакцию без отправки аудио в облачную систему синтеза речи. [5]


Слишком длинно, не стал читать

Создайте модульный, приватный ИИ-помощник своими руками на Raspberry Pi , объединив Porcupine для активации по ключевому слову, Whisper (через whisper.cpp ) для распознавания речи, выбранный вами мозг для ответов и Piper для локального синтеза речи. Оберните его в службу systemd, настройте звук и подключите действия MQTT или HTTP. Это дешевле, чем вы думаете, и на удивление приятно в использовании. [1][2][3][4][5]


Ссылки

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

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

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

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

  4. whisper.cpp – Оптимизированный для процессора вывод Whisper с использованием командной строки и этапов сборки.

  5. Piper TTS – Быстрый локальный нейронный синтез речи с поддержкой нескольких голосов/языков.

Найдите новейшие разработки в области ИИ в официальном магазине ИИ-помощников

О нас


Вернуться в блог