چگونه با رزبری پای یک دستیار هوش مصنوعی بسازیم؟

چگونه با رزبری پای یک دستیار هوش مصنوعی بسازیم؟

آیا یک دستیار صوتی کوچک می‌خواهید که واقعاً از شما پیروی کند، روی سخت‌افزار خودتان اجرا شود و به طور تصادفی دوازده آناناس سفارش ندهد، چون اشتباه شنیده است؟ یک دستیار هوش مصنوعی DIY با Raspberry Pi به طرز شگفت‌آوری قابل دستیابی، سرگرم‌کننده و انعطاف‌پذیر است. شما یک کلمه بیدارباش، تشخیص گفتار (ASR = تشخیص گفتار خودکار)، یک مغز برای زبان طبیعی (قوانین یا LLM) و تبدیل متن به گفتار (TTS) را وصل می‌کنید. چند اسکریپت، یک یا دو سرویس و برخی تنظیمات صوتی دقیق اضافه کنید، و یک بلندگوی هوشمند جیبی خواهید داشت که از قوانین شما پیروی می‌کند.

بیایید شما را از صفر تا صدِ صحبت کردن با رزبری‌پای، بدون دردسرهای معمول، همراهی کنیم. ما قطعات، تنظیمات، کد، مقایسه‌ها، نکات ریز... و کل بوریتو را پوشش خواهیم داد. 🌯

مقالاتی که شاید بعد از این مطلب دوست داشته باشید بخوانید:

🔗 چگونه هوش مصنوعی را به طور مؤثر مطالعه کنیم
یک نقشه راه مطالعه ایجاد کنید، پروژه‌های تمرینی انجام دهید و پیشرفت را پیگیری کنید.

🔗 چگونه یک شرکت هوش مصنوعی راه اندازی کنیم
اعتبارسنجی مشکل، ساخت MVP، تشکیل تیم، جذب مشتریان اولیه.

🔗 چگونه از هوش مصنوعی برای افزایش بهره‌وری استفاده کنیم
کارهای روتین را خودکار کنید، گردش کار را ساده کنید و خروجی خلاقانه را افزایش دهید.

🔗 چگونه هوش مصنوعی را در کسب و کار خود بگنجانید
فرآیندهای با تأثیر بالا را شناسایی کنید، طرح‌های آزمایشی را اجرا کنید، بازگشت سرمایه را اندازه‌گیری کنید، مقیاس‌بندی کنید.


چه چیزی یک دستیار هوش مصنوعی DIY خوب با Raspberry Pi را می‌سازد؟

  • خصوصی به صورت پیش‌فرض - تا حد امکان صدا را محلی نگه دارید. شما تصمیم می‌گیرید چه چیزی از دستگاه خارج شود.

  • ماژولار - اجزای قابل تعویض مانند لگو: موتور بیدارباش، ASR، LLM، TTS.

  • مقرون به صرفه - عمدتاً متن‌باز، میکروفون‌ها، بلندگوهای معمولی و یک رزبری پای.

  • قابل هک - آیا اتوماسیون خانگی، داشبورد، روال‌ها، مهارت‌های سفارشی می‌خواهید؟ آسان است.

  • قابل اعتماد - مدیریت شده توسط سرویس، بوت می‌شود و به طور خودکار شروع به گوش دادن می‌کند.

  • سرگرم‌کننده - شما چیزهای زیادی در مورد صدا، فرآیندها و طراحی رویدادمحور خواهید آموخت.

نکته کوچک: اگر از رزبری پای ۵ استفاده می‌کنید و قصد دارید مدل‌های سنگین‌تر محلی را اجرا کنید، یک خنک‌کننده گیره‌ای به تحمل بار پایدار کمک می‌کند. (در صورت شک، خنک‌کننده فعال رسمی طراحی‌شده برای پای ۵ را انتخاب کنید.) [1]


قطعات و ابزارهای مورد نیاز 🧰

  • رزبری پای : برای فضای بیشتر، رزبری پای ۴ یا ۵ توصیه می‌شود.

  • کارت حافظه microSD : 32 گیگابایت به بالا توصیه می‌شود.

  • میکروفون USB : یک میکروفون کنفرانس USB ساده عالی است.

  • بلندگو : بلندگوی USB یا 3.5 میلی‌متری، یا یک HAT آمپلی‌فایر I2S.

  • شبکه : اترنت یا وای‌فای.

  • لوازم جانبی اختیاری: کیس، خنک‌کننده فعال برای Pi 5، دکمه فشاری برای مکالمه، حلقه LED. [1]

راه‌اندازی سیستم عامل و خط پایه

  1. سیستم عامل رزبری پای را با Raspberry Pi Imager فلش کنید. این روش ساده‌ای برای داشتن یک microSD قابل بوت با تنظیمات از پیش تعیین شده مورد نظر شماست. [1]

  2. بوت کنید، به شبکه متصل شوید، سپس بسته‌ها را به‌روزرسانی کنید:

sudo apt update && sudo apt upgrade -y
  1. اصول اولیه صدا : در سیستم عامل رزبری پای می‌توانید خروجی، سطوح و دستگاه‌های پیش‌فرض را از طریق رابط کاربری دسکتاپ یا raspi-config . صدای USB و HDMI در همه مدل‌ها پشتیبانی می‌شود؛ خروجی بلوتوث در مدل‌های دارای بلوتوث موجود است. [1]

  2. تأیید دستگاه‌ها:

رکورد -l بازی کردن -l

سپس ضبط و پخش را آزمایش کنید. اگر سطح صدا عجیب به نظر می‌رسد، قبل از اینکه میکروفون را مقصر بدانید، میکسرها و تنظیمات پیش‌فرض را بررسی کنید.

 

رزبری پای هوش مصنوعی

معماری در یک نگاه 🗺️

یک دستیار هوش مصنوعی هوشمند DIY با رزبری پای به این شکل است:

کلمه بیدارباش → ضبط صدای زنده → رونویسی ASR → مدیریت قصد یا LLM → متن پاسخ → TTS → پخش صدا → اقدامات اختیاری از طریق MQTT یا HTTP.

  • کلمه بیدارباش : Porcupine کوچک و دقیق است و به صورت محلی با کنترل حساسیت به ازای هر کلمه کلیدی اجرا می‌شود. [2]

  • ASR : ویسپر یک مدل ASR چندزبانه و همه منظوره است که روی حدود ۶۸۰ هزار ساعت آموزش دیده است؛ در برابر لهجه‌ها/نویزهای پس‌زمینه مقاوم است. برای استفاده روی دستگاه، ویسپر.cpp یک مسیر استنتاج C/C++ ساده ارائه می‌دهد. [3][4]

  • مغز : انتخاب شما - یک LLM ابری از طریق API، یک موتور قواعد یا استنتاج محلی بسته به قدرت پردازش.

  • TTS : پایپر گفتار طبیعی را به صورت محلی تولید می‌کند، به اندازه کافی سریع برای پاسخ‌های سریع روی سخت‌افزارهای معمولی. [5]


جدول مقایسه سریع 🔎

ابزار بهترین برای قیمت مناسب چرا کار می‌کند؟
کلمه بیدار شدن جوجه تیغی محرک همیشه گوش به زنگ ردیف رایگان + CPU کم، دقیق، اتصال آسان [2]
زمزمه.cpp ASR محلی روی Pi متن‌باز دقت خوب، سازگار با CPU [4]
زمزمه سریعتر ASR سریع‌تر روی CPU/GPU متن‌باز بهینه‌سازی‌های CTranslate2
پایپر TTS خروجی گفتار محلی متن‌باز صداهای سریع، زبان‌های متعدد [5]
رابط برنامه‌نویسی کاربردی ابری (Cloud LLM API) استدلال غنی مبتنی بر استفاده محاسبات سنگین را تخلیه می‌کند
گره-قرمز هماهنگ‌سازی اقدامات متن‌باز جریان‌های بصری، سازگار با MQTT

ساخت گام به گام: اولین حلقه صوتی شما 🧩

ما از Porcupine برای کلمه بیدارباش، Whisper برای رونویسی، یک تابع سبک "brain" برای پاسخ (با LLM دلخواه خود جایگزین کنید) و Piper برای گفتار استفاده خواهیم کرد. آن را مینیمال نگه دارید، سپس تکرار کنید.

۱) نصب وابستگی‌ها

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 نصب sounddevice numpy
  • جوجه تیغی: SDK/پیوندهای مربوط به زبان خود را دریافت کنید و از راهنمای شروع سریع (کلید دسترسی + لیست کلمات کلیدی + فریم‌های صوتی → .process ) پیروی کنید. [2]

  • Whisper (سازگار با CPU): فایل 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]

پایتون را ترجیح می‌دهید؟ faster-whisper (CTranslate2) اغلب روی پردازنده‌های معمولی سریع‌تر از پایتون معمولی است.

۲) تنظیم Piper TTS

git clone https://github.com/rhasspy/piper cd piper make # مدل صوتی مورد نظر خود را دانلود کنید، مثلاً en_US-amy echo "Hello there." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav

پایپر برای TTS روی دستگاه با گزینه‌های صوتی/زبانی متعدد طراحی شده است. [5]

۳) یک حلقه کمکی مینیمال در پایتون

عمداً فشرده: منتظر یک عبارت بیداری (stub) می‌ماند، ضبط می‌کند، با whisper.cpp ، یک پاسخ (placeholder) تولید می‌کند، سپس از طریق Piper صحبت می‌کند. placeholder را با LLM یا منطق قانون مورد علاقه خود عوض کنید.

import os, subprocess, wave import sounddevice as sd WAKE_WORD = "hey computer" # swap for Porcupine in production [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(seconds * 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("User:", text); print("دستیار:", reply) speak(reply) else: print("عبارت بیدارباش را برای آزمایش حلقه تایپ کنید.")

برای تشخیص واقعی کلمه بیدارباش، آشکارساز جریان Porcupine (با پردازنده کم، حساسیت به هر کلمه کلیدی) را ادغام کنید. [2]


تنظیم صدا که واقعاً مهم است 🎚️

چند راهکار کوچک باعث می‌شود دستیار شما ده برابر باهوش‌تر به نظر برسد:

  • فاصله میکروفون : 30 تا 60 سانتی‌متر، فاصله ایده‌آلی برای بسیاری از میکروفون‌های USB است.

  • سطوح : از قطع شدن ورودی جلوگیری کنید و پخش را روان نگه دارید؛ قبل از دنبال کردن ارواح کد، مسیریابی را اصلاح کنید. در سیستم عامل Raspberry Pi، می‌توانید دستگاه خروجی و سطوح را از طریق ابزارهای سیستمی یا raspi-config . [1]

  • آکوستیک اتاق : دیوارهای سخت باعث پژواک صدا می‌شوند؛ یک زیرانداز نرم زیر میکروفون کمک می‌کند.

  • آستانه‌ی کلمه‌ی بیدارباش : خیلی حساس → محرک‌های شبح؛ خیلی سخت‌گیر → سر پلاستیک داد خواهید زد. پورکوپاین به شما امکان می‌دهد حساسیت را برای هر کلمه‌ی کلیدی تنظیم کنید. [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 راه‌اندازی مجدد=همیشه راه‌اندازی مجددSec=3 [نصب] WantedBy=multi-user.target
  1. فعال کردن آن:

sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
  1. دنباله‌های لاگ:

دستیار ژورنالctl -u -f

حالا با بوت شدن سیستم شروع به کار می‌کند، با از کار افتادن سیستم دوباره راه‌اندازی می‌شود و به‌طورکلی مثل یک دستگاه عمل می‌کند. کمی کسل‌کننده بود، اما خیلی بهتر شده است.


سیستم مهارت: آن را در خانه واقعاً مفید کنید 🏠✨

وقتی صدای ورودی و صدای خروجی تثبیت شد، اقدامات را اضافه کنید:

  • مسیریاب هدف : مسیرهای ساده کلمات کلیدی برای کارهای رایج.

  • خانه هوشمند : رویدادها را در MQTT منتشر کنید یا با نقاط پایانی HTTP دستیار خانگی تماس بگیرید.

  • افزونه‌ها : توابع سریع پایتون مانند 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]

  • TTS متلاطم : عبارات رایج را از قبل تولید کنید؛ دستگاه صوتی و نرخ نمونه‌برداری خود را تأیید کنید.

  • میکروفون شناسایی نشد : arecord -l و میکسرها را بررسی کنید.

  • تنظیم دما : برای عملکرد پایدار از خنک‌کننده‌ی فعال رسمی روی Pi 5 استفاده کنید. [1]


نکات امنیتی و حریم خصوصی که واقعاً باید بخوانید 🔒

  • پای خود را با APT به‌روز نگه دارید.

  • اگر از هرگونه رابط برنامه‌نویسی کاربردی ابری استفاده می‌کنید، آنچه را که ارسال می‌کنید ثبت کنید و ابتدا ویرایش بخش‌های شخصی را به صورت محلی در نظر بگیرید.

  • سرویس‌ها را با کمترین سطح دسترسی اجرا کنید؛ از sudo در ExecStart مگر در موارد ضروری خودداری کنید.

  • حالت فقط محلی را برای مهمانان یا ساعات خلوت فراهم کنید


انواع مختلف بسازید: مثل ساندویچ با هم ترکیب و تطبیق دهید 🥪

  • فوق العاده محلی : جوجه تیغی + whisper.cpp + پایپر + قوانین ساده. خصوصی و محکم. [2][4][5]

  • دستیار ابری سریع : جوجه تیغی + (Whisper محلی کوچک‌تر یا ASR ابری) + TTS محلی + LLM ابری.

  • اتوماسیون خانگی مرکزی : جریان‌های Node-RED یا Home Assistant را برای روال‌ها، صحنه‌ها و حسگرها اضافه کنید.


مهارت مثال: روشن کردن چراغ‌ها از طریق MQTT 💡

import paho.mqtt.client as mqtt MQTT_HOST = "192.168.1.10" TOPIC = "خانه/اتاق نشیمن/چراغ/تنظیم" def set_light(state: str): client = mqtt.Client() client.connect(MQTT_HOST, 1883, 60) payload = "روشن" if state.lower().startswith("روشن") else "خاموش" client.publish(TOPIC, payload, qos=1, retain=False) client.disconnect() # if "روشن کردن چراغ‌ها" در متن: set_light("روشن")

یک جمله‌ی صوتی مثل «چراغ اتاق نشیمن را روشن کن» اضافه کنید، آنوقت احساس می‌کنید که یک جادوگر هستید.


چرا این پشته در عمل جواب می‌دهد 🧪

  • پورکوپاین در تشخیص کلمه بیدارباش روی بردهای کوچک کارآمد و دقیق است، که گوش دادن همیشگی را امکان‌پذیر می‌کند. [2]

  • آموزش گسترده و چندزبانه ویسپر، آن را در برابر محیط‌ها و لهجه‌های متنوع مقاوم می‌کند. [3]

  • whisper.cpp آن توان را در دستگاه‌های فقط CPU مانند Pi قابل استفاده نگه می‌دارد. [4]

  • پایپر بدون ارسال صدا به TTS ابری، پاسخ‌ها را سریع نگه می‌دارد. [5]


خیلی طولانی بود، نخوندمش

با ترکیب Porcupine برای کلمه بیدارباش، Whisper (از طریق whisper.cpp یک دستیار هوش مصنوعی ماژولار و خصوصی DIY با Raspberry Pi . آن را به عنوان یک سرویس systemd قرار دهید، صدا را تنظیم کنید و اقدامات MQTT یا HTTP را به آن متصل کنید. ارزان‌تر از آن چیزی است که فکر می‌کنید، و به طرز عجیبی لذت‌بخش است که با آن زندگی کنید. [1][2][3][4][5]


منابع

  1. نرم‌افزار و خنک‌کننده‌ی رزبری پای - اطلاعات محصول Raspberry Pi Imager (دانلود و استفاده) و خنک‌کننده‌ی فعال Pi 5

  2. کلمه بیدار شدن جوجه تیغی - SDK و شروع سریع (کلمات کلیدی، حساسیت، استنتاج محلی)

  3. زمزمه (مدل ASR) – ASR چندزبانه و قوی که با حدود ۶۸۰ هزار ساعت آموزش دیده است

    • رادفورد و همکاران، تشخیص گفتار قوی از طریق نظارت ضعیف در مقیاس بزرگ (نجوا): ادامه مطلب

  4. whisper.cpp – استنتاج زمزمه سازگار با CPU با رابط خط فرمان (CLI) و مراحل ساخت

  5. Piper TTS - TTS عصبی محلی و سریع با صداها/زبان‌های متعدد

جدیدترین هوش مصنوعی را در فروشگاه رسمی دستیار هوش مصنوعی پیدا کنید

درباره ما


بازگشت به وبلاگ