Як стварыць памочніка са штучным інтэлектам сваімі рукамі з дапамогай Raspberry Pi

Як стварыць памочніка са штучным інтэлектам сваімі рукамі з дапамогай Raspberry Pi

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

Давайце пачнем з нуля і пачнем размаўляць са сваім Пі без звычайных клопатаў. Мы разгледзім дэталі, наладу, код, параўнанні, падводныя камбінацыі... усё бурыта. 🌯

Артыкулы, якія вам могуць спадабацца пасля гэтага:

🔗 Як эфектыўна вывучаць штучны інтэлект
Стварыце план навучання, практыкуйцеся ў праектах і адсочвайце прагрэс.

🔗 Як пачаць кампанію па штучным інтэлекце
Праверка праблемы, стварэнне MVP, збор каманды, забеспячэнне першапачатковых кліентаў.

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

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


Што робіць Raspberry Pi добрым памочнікам са штучным інтэлектам для самастойнага выкарыстання ✅

  • Прыватна па змаўчанні — па магчымасці захоўвайце аўдыё лакальна. Вы вырашаеце, што пакідае прыладу.

  • Модульная — кампаненты для абмену месцамі, як у Lego: механізм Wake Word, ASR, LLM, TTS.

  • Даступныя цэны — у асноўным з адкрытым зыходным кодам, стандартныя мікрафоны, дынамікі і 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 update && sudo apt upgrade -y
  1. Асновы аўдыё : у Raspberry Pi OS вы можаце ўсталяваць выхадны сігнал па змаўчанні, узроўні і прылады праз інтэрфейс працоўнага стала або raspi-config . Аўдыё праз USB і HDMI падтрымліваецца ва ўсіх мадэлях; выхад праз Bluetooth даступны на мадэлях з Bluetooth. [1]

  2. Праверце прылады:

запіс -l прайграванне -l

Затым праверце запіс і прайграванне. Калі ўзроўні здаюцца дзіўнымі, праверце мікшэры і налады па змаўчанні, перш чым вінаваціць мікрафон.

 

Штучны інтэлект Raspberry Pi

Архітэктура з першага погляду 🗺️

Разумны памочнік па штучным інтэлекце з дапамогай Raspberry Pi выглядае наступным чынам:

Слова для абуджэнняў → запіс жывога аўдыё → транскрыпцыя ASR → апрацоўка намеру або LLM → тэкст адказу → TTS → прайграванне аўдыё → дадатковыя дзеянні праз MQTT або HTTP.

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

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

  • Мозг : На ваш выбар — воблачны LLM праз API, механізм правілаў або лакальны вывад у залежнасці ад магутнасці.

  • TTS : Piper генеруе натуральнае маўленне лакальна, дастаткова хутка для хуткіх адказаў на сціплым абсталяванні. [5]


Табліца хуткага параўнання 🔎

Інструмент Лепш за ўсё падыходзіць для Прыблізная цана Чаму гэта працуе
Слова прачнення дзікабраза Трыгер пастаяннага праслухоўвання Бясплатны ўзровень + Нізкая загрузка працэсара, дакладнасць, лёгкае прывязванне [2]
Whisper.cpp Лакальны ASR на Pi Адкрыты зыходны код Добрая дакладнасць, зручнасць для працэсара [4]
Хутчэйшы шэпт Хутчэйшы ASR на працэсары/графічным працэсары Адкрыты зыходны код Аптымізацыі CTranslate2
Пайпер ТТС Лакальны вывад маўлення Адкрыты зыходны код Хуткія галасы, шмат моў [5]
API воблачнага LLM Багатыя разважанні На аснове выкарыстання Выгружае цяжкія вылічэнні
Node-RED Арганізацыя дзеянняў Адкрыты зыходны код Візуальныя патокі, сумяшчальныя з MQTT

Пакрокавая зборка: ваш першы галасавы цыкл 🧩

Мы будзем выкарыстоўваць Porcupine для слова, якое выклікае абуджэнне, Whisper для транскрыпцыі, лёгкую функцыю «brain» для адказу (заменіце яе на любую іншую функцыю) і Piper для маўлення. Зрабіце яго мінімальным, а потым паўтарыце.

1) Усталюйце залежнасці

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 ўсталяваць гукавую прыладу 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 распрацаваны для TTS на прыладзе з некалькімі варыянтамі голасу/мовы. [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, seconds=RECORD_SECONDS): audio = sd.rec(int(секунды * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=CHANNELS, dtype='int16') sd.wait() з wave.open(path, 'wb') як 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 Voice Assistant Пасля=network.target sound.target [Сэрвіс] Карыстальнік=pi WorkingDirectory=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Перазагрузка=заўсёды 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, спачатку накіроўвайце відавочныя лакальныя каманды для хуткасці і надзейнасці.


Толькі лакальна супраць Cloud Assist: кампрамісы, якія вы адчуеце 🌓

Толькі лакальна.
Перавагі: прыватнасць, аўтаномны доступ, прадказальныя выдаткі.
Недахопы: больш цяжкія мадэлі могуць працаваць павольна на невялікіх дошках. Шматмоўнае навучанне Whisper дапамагае забяспечыць надзейнасць, калі вы захоўваеце яго на прыладзе або на бліжэйшым серверы. [3]

хмарнай дапамогі
: магутнае лагічнае мысленне, большыя кантэкстныя вокны.
Недахопы: дадзеныя пакідаюць прыладу, залежнасць ад сеткі, зменныя выдаткі.

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


Пошук і ліквідацыя непаладак: дзіўныя грэмліны і хуткія рашэнні 👾

  • Ілжывыя спрацоўванні па словах абуджэння : знізіце адчувальнасць або паспрабуйце іншы мікрафон. [2]

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

  • Перарывісты TTS : папярэдне генеруйце распаўсюджаныя фразы; пацвердзіце сваю аўдыёпрыладу і частату дыскрэтызацыі.

  • Мікрафон не выяўлены : праверце arecord -l і мікшэры.

  • Тэрматролінг : для ўстойлівай прадукцыйнасці выкарыстоўвайце афіцыйны актыўны кулер на Pi 5. [1]


Заўвагі па бяспецы і прыватнасці, якія вам варта прачытаць 🔒

  • Абнаўляйце свой 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() # калі ў тэксце "уключыць святло": set_light("on")

Дадайце такую ​​галасавую фразу, як: «Уключыце лямпу ў гасцінай», і вы адчуеце сябе чараўніком.


Чаму гэты стэк працуе на практыцы 🧪

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

  • Шырока распаўсюджанае шматмоўнае навучанне Whisper робіць яго ўстойлівым да розных асяроддзяў і акцэнтаў. [3]

  • shippet.cpp дазваляе выкарыстоўваць гэтую магутнасць толькі на прыладах, якія выкарыстоўваюць толькі працэсар, такіх як Pi. [4]

  • Piper захоўвае хуткія адказы, не адпраўляючы аўдыё ў воблачны TTS. [5]


Занадта доўга, не чытаў

Стварыце модульнага прыватнага памочніка са штучным інтэлектам на Raspberry Pi , аб'яднаўшы Porcupine для сігналу абуджэння, Whisper (праз whisper.cpp ) для ASR, выбраны вамі brain для адказаў і Piper для лакальнага TTS. Абгарніце гэта як сістэмны сэрвіс, наладзьце гук і падключыце дзеянні 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 тыс. гадзін

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

  4. whispett.cpp — зручны для працэсара вывад Whisper з дапамогай CLI і этапаў зборкі

  5. Piper TTS — хуткі лакальны нейронны TTS з некалькімі галасамі/моў

Знайдзіце найноўшы штучны інтэлект у афіцыйнай краме памочнікаў штучнага інтэлекту

Пра нас


Назад да блога