당신의 말을 잘 듣고, 직접 만든 하드웨어에서 작동하며, 실수로 파인애플 12개를 주문하는 일도 없는, 당신의 지시를 정확히 따르는 초소형 음성 비서를 원하시나요? 라즈베리 파이를 이용한 DIY AI 비서는 놀랍도록 실현 가능하고, 재미있으며, 유연합니다. 웨이크 워드, 음성 인식(ASR = 자동 음성 인식), 자연어 처리(규칙 또는 LLM), 그리고 텍스트 음성 변환(TTS) 기능을 연결하기만 하면 됩니다. 몇 가지 스크립트와 한두 가지 서비스, 그리고 세심한 오디오 설정을 추가하면, 당신의 규칙에 따라 작동하는 주머니에 쏙 들어가는 스마트 스피커를 만들 수 있습니다.
머리 쥐어뜯을 필요 없이, 라즈베리 파이와 통신하는 방법을 처음부터 차근차근 알려드리겠습니다. 부품, 설정, 코드, 비교, 주의 사항 등 모든 것을 다룹니다. 🌯
이 글을 읽고 나서 읽어보시면 좋을 만한 글들:
🔗 인공지능을 효과적으로 공부하는 방법
학습 로드맵을 만들고, 프로젝트를 연습하고, 진행 상황을 추적하세요.
🔗 인공지능 기업을 시작하는 방법
문제점을 검증하고, MVP를 구축하고, 팀을 구성하고, 초기 고객을 확보합니다.
🔗 인공지능을 활용하여 생산성을 높이는 방법
일상적인 작업을 자동화하고, 워크플로를 간소화하며, 창의적인 결과물을 향상시키세요.
🔗 비즈니스에 AI를 통합하는 방법
영향력이 큰 프로세스를 파악하고, 시범 운영을 실행하고, 투자 수익률(ROI)을 측정하고, 규모를 확장합니다.
라즈베리 파이로 훌륭한 DIY AI 비서를 만드는 비결 ✅
-
기본적으로 비공개로 설정되어 있어 가능한 한 오디오를 로컬에 저장합니다. 기기 외부로 어떤 데이터가 전송될지는 사용자가 결정합니다.
-
모듈형 설계 로 레고처럼 구성 요소를 교체할 수 있습니다. (웨이크 워드 엔진, ASR, LLM, TTS 등)
-
저렴함 - 대부분 오픈 소스, 일반적인 마이크, 스피커 및 라즈베리 파이 사용.
-
해킹 가능 – 홈 자동화, 대시보드, 루틴, 맞춤형 스킬을 원하시나요? 쉽습니다.
-
안정적 – 서비스 관리형으로, 자동으로 부팅되고 수신 대기를 시작합니다.
-
재밌을 거예요 . 오디오, 프로세스, 이벤트 기반 디자인에 대해 많은 것을 배우게 될 겁니다.
작은 팁: Raspberry Pi 5를 사용하고 더 무거운 로컬 모델을 실행할 계획이라면 클립온 쿨러가 지속적인 부하에 도움이 됩니다. (확실하지 않으면 Pi 5용으로 설계된 공식 액티브 쿨러를 선택하세요.) [1]
필요한 부품 및 도구 🧰
-
라즈베리 파이: 성능 향상을 위해 Pi 4 또는 Pi 5를 권장합니다.
-
microSD 카드: 32GB 이상 권장.
-
USB 마이크: 간단한 USB 회의용 마이크면 충분합니다.
-
스피커: USB 또는 3.5mm 스피커, 또는 I2S 앰프 HAT.
-
네트워크: 이더넷 또는 Wi-Fi.
-
선택적 편의 기능: 케이스, 액티브 쿨러 , 푸시 투 토크용 푸시 버튼, LED 링. [1]
운영체제 및 기본 설정
-
Raspberry Pi OS를 플래시합니다 . 원하는 사전 설정이 포함된 부팅 가능한 microSD를 얻는 가장 간단한 방법입니다.[1]
-
부팅 후 네트워크에 연결하고 패키지를 업데이트하세요
sudo apt update && sudo apt upgrade -y
-
오디오 기본 사항통해 기본 출력, 레벨 및 장치를 설정할 수 있습니다
raspi-config를. USB 및 HDMI 오디오는 모든 모델에서 지원되며 Bluetooth 출력은 Bluetooth가 있는 모델에서 사용할 수 있습니다.[1] -
기기를 확인하세요:
arecord -l aplay -l
그다음 녹음과 재생을 테스트해 보세요. 음량이 이상하게 들리면 마이크 문제라고 단정짓기 전에 믹서와 기본 설정을 확인하세요.

건축을 한눈에 보기 🗺️
합리적인 DIY AI 비서 구성은 다음과 같습니다.
웨이크 워드 → 실시간 오디오 캡처 → 음성 인식(ASR) 전사 → 의도 처리 또는 언어 모드(LLM) → 응답 텍스트 → 텍스트 음성 변환(TTS) → 오디오 재생 → MQTT 또는 HTTP를 통한 선택적 작업 수행.
-
웨이크 워드: Porcupine은 작고 정확하며 키워드별 감도 제어를 통해 로컬에서 실행됩니다. [2]
-
ASR: Whisper는 약 680k 시간 동안 학습된 다국어 범용 ASR 모델입니다. 억양/배경 소음에 강건합니다. 기기 내 사용을 위해
whisper.cpp는간결한 C/C++ 추론 경로를 제공합니다. [3][4] -
브레인: 클라우드 기반 LLM(API 사용), 규칙 엔진 또는 로컬 추론 중에서 성능에 따라 선택하세요.
-
TTS: Piper는 적당한 하드웨어에서도 빠른 응답을 제공할 수 있을 만큼 충분히 빠른 속도로 자연어 음성을 로컬에서 생성합니다. [5]
빠른 비교표 🔎
| 도구 | 가장 적합한 대상 | 가격 | 효과가 있는 이유 |
|---|---|---|---|
| 고슴도치 웨이크 워드 | 항상 듣고 있는 트리거 | 무료 등급 + | CPU 사용량이 적고 정확하며 바인딩이 쉽습니다. [2] |
| 위스퍼.cpp | 라즈베리 파이에서 로컬 ASR | 오픈 소스 | 정확도가 높고 CPU 친화적입니다.[4] |
| 더 빠른 속삭임 | CPU/GPU에서 더 빠른 ASR 지원 | 오픈 소스 | CTranslate2 최적화 |
| 파이퍼 TTS | 로컬 음성 출력 | 오픈 소스 | 빠른 목소리, 다양한 언어[5] |
| 클라우드 LLM API | 풍부한 추론 | 사용량 기반 | 연산 부하를 분산합니다 |
| 노드레드 | 행동 조율하기 | 오픈 소스 | 시각적 흐름도, 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(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)는 성능이 그다지 좋지 않은 CPU에서 일반 파이썬보다 더 빠른 경우가 많습니다.
2) 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
Piper는 다양한 음성/언어 옵션을 갖춘 온디바이스 TTS를 위해 설계되었습니다.[5]
3) 파이썬의 최소한의 보조 루프
의도적으로 간결하게 설계되었습니다. 웨이크 프레이즈(스텁)를 기다리고, 녹음하고, 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(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 "구름은 보이지 않지만 날씨가 괜찮을 것 같습니다. 혹시 모르니 재킷을 가져오세요." "사용자가 말한 내용: " + 프롬프트 반환 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의 스트리밍 감지기(낮은 CPU, 키워드별 감도)를 통합합니다. [2]
진정으로 중요한 오디오 튜닝 🎚️
몇 가지 사소한 수정만으로 비서가 10배는 더 똑똑해진 것처럼 느껴질 수 있습니다
-
마이크 거리: 30~60cm는 많은 USB 마이크에 있어 최적의 거리입니다.
-
레벨: 입력의 클리핑을 방지하고 재생을 안정적으로 유지합니다. 코드 문제를 해결하기 전에 라우팅을 수정합니다. Raspberry Pi OS에서는 시스템 도구 또는
raspi-config를.[1] -
실내 음향: 딱딱한 벽은 울림을 유발합니다. 마이크 아래에 부드러운 매트를 깔면 도움이 됩니다.
-
웨이크 워드 임계값: 너무 민감하면 → 고스트 트리거가 발생하고, 너무 엄격하면 → 플라스틱에 대고 소리를 지르게 됩니다. Porcupine은 키워드별로 민감도를 조정할 수 있습니다. [2]
-
열 관리: Pi 5에서 장시간 전사 작업을 할 경우 공식 액티브 쿨러를 사용하면 지속적인 성능이 향상됩니다. [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
-
활성화하세요:
sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
-
로그 테일:
journalctl -u 어시스턴트 -f
이제 부팅 시 자동으로 시작되고, 오류 발생 시 재시작되며, 전반적으로 어플라이언스처럼 작동합니다. 조금 지루하긴 하지만 훨씬 나아졌습니다.
스킬 시스템: 집에서 실제로 유용하게 활용하세요 🏠✨
음성 입력과 음성 출력이 안정되면 액션을 추가하세요
-
인텐트 라우터: 일반적인 작업을 위한 간단한 키워드 경로입니다.
-
스마트 홈: MQTT로 이벤트를 게시하거나 Home Assistant의 HTTP 엔드포인트를 호출합니다.
-
플러그인:
set_timer,what_is_the_time,play_radio,run_scene.
클라우드 LLM을 사용하는 경우에도 속도와 안정성을 위해 명확한 로컬 명령을 먼저 라우팅하십시오.
로컬 전용 vs 클라우드 지원: 체감할 수 있는 장단점 🌓
로컬 전용
장점: 개인 정보 보호, 오프라인, 예측 가능한 비용.
단점: 더 무거운 모델은 작은 보드에서 속도가 느릴 수 있습니다. Whisper의 다국어 학습은 장치 내 또는 근처 서버에 보관하면 안정성을 향상시키는 데 도움이 됩니다. [3]
클라우드 지원
장점: 강력한 추론 능력, 더 넓은 컨텍스트 범위.
단점: 데이터가 기기 외부로 유출됨, 네트워크 의존성, 가변적인 비용
하이브리드 방식이 종종 더 효과적입니다: 웨이크 워드 + ASR 로컬 → 추론을 위한 API 호출 → TTS 로컬. [2][3][5]
문제 해결: 알 수 없는 오류와 빠른 해결책 👾
-
웨이크 워드 오작동: 감도를 낮추거나 다른 마이크를 사용해 보세요. [2]
-
ASR 지연: 더 작은 Whisper 모델을 사용하거나
whisper.cpp를릴리스 플래그(-j --config Release. [4] -
끊김 현상이 있는 TTS: 자주 사용하는 문구를 미리 생성하세요. 오디오 장치와 샘플링 속도를 확인하세요.
-
마이크가 감지되지 않았습니다.
arecord -l 명령과 믹서를 확인하십시오. -
열 스로틀링: 지속적인 성능을 위해 Pi 5의 공식 액티브 쿨러를 사용하십시오.[1]
꼭 읽어봐야 할 보안 및 개인정보 보호 관련 유의사항 🔒
-
APT를 사용하여 Raspberry Pi를 최신 상태로 유지하세요.
-
클라우드 API를 사용하는 경우 전송하는 내용을 기록하고 개인 정보는 로컬에서 먼저 삭제하는 것을 고려하십시오.
-
최소한의 권한으로 서비스를 실행하고,
sudo를필요한 경우가 아니면 ExecStart에서 -
제공하세요 로컬 전용 모드를 손님이나 조용한 시간대를 위해
다양한 조합으로 만들어 보세요: 샌드위치처럼 마음대로 조합해 보세요 🥪
-
초지역적: 고슴도치 + 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는Pi와 같은 CPU 전용 장치에서 해당 기능을 계속 사용할 수 있도록 합니다. [4] -
Piper는 클라우드 TTS로 오디오를 전송하지 않고도 빠른 응답을 유지합니다. [5]
너무 길어서 읽지 않았어요
모듈식 개인 DIY AI 비서를 웨이크 워드로 Porcupine, ASR로 Whisper( whisper.cpp를), 응답을 위한 원하는 두뇌, 로컬 TTS로 Piper를 조합하십시오. 이를 systemd 서비스로 래핑하고 오디오를 조정하고 MQTT 또는 HTTP 작업을 연결하십시오. 생각보다 저렴하고 사용하기에 놀라울 정도로 즐겁습니다. [1][2][3][4][5]
참고 자료
-
라즈베리 파이 소프트웨어 및 냉각 – 라즈베리 파이 이미저(다운로드 및 사용) 및 라즈베리 파이 5 액티브 쿨러 제품 정보
-
Porcupine 웨이크 워드 – SDK 및 빠른 시작 (키워드, 민감도, 로컬 추론)
-
Whisper(ASR 모델) – 약 68만 시간의 학습을 통해 다국어를 지원하고 안정성이 뛰어난 ASR 모델입니다.
-
Radford et al., 대규모 약지도 학습을 통한 견고한 음성 인식 (Whisper): 자세히 보기
-
-
whisper.cpp – CLI 및 빌드 단계를 포함한 CPU 친화적인 Whisper 추론 기능
-
Piper TTS – 여러 음성/언어를 지원하는 빠르고 로컬 기반의 신경망 기반 TTS