IT 인터넷
🎙️ Whisper로 음성 명령까지 처리하는 오프라인 GPT 챗봇 만들기
fnm
2025. 5. 3. 18:08
반응형
🎙️ Whisper로 음성 명령까지 처리하는 오프라인 GPT 챗봇 만들기
음성으로 GPT 챗봇을 조작할 수 있다면 어떨까요?
그것도 인터넷 없이, 스마트폰 안에서만 작동하는 구조라면?
이번 글에서는 로컬 환경에서 작동하는 음성 인식 + GPT 챗봇을 만드는 방법을 소개합니다. 핵심은 바로 Meta의 Whisper 모델을 사용한 STT(Speech-to-Text)와 LLaMA 기반 LLM을 연결하는 것입니다.
📌 목표 기능
- 🎙️ 스마트폰 마이크로 음성 입력
- 🧠 Whisper로 로컬에서 텍스트 변환
- 🤖 GPT가 입력 내용을 이해하고 응답
- 📴 전 과정 오프라인 처리
🧩 시스템 구성요소
기능 | 기술 스택 | 역할 |
---|---|---|
음성 녹음 | Flutter Sound / MediaRecorder | 사용자 마이크 입력 저장 |
STT 변환 | Whisper.cpp | 오디오 → 텍스트 |
질문 응답 | llama.cpp + LLaMA2 | GPT 응답 생성 |
🛠️ 설치 전 준비사항
- 📱 Android NDK 설치 (Whisper.cpp, llama.cpp 빌드용)
- 🧠 모델 준비:
ggml-base.en.bin
(Whisper) +llama-7b.Q4_K_M.gguf
- 🧩 JNI 인터페이스를 통해 두 모델 연결
📲 Flutter 구현 흐름
- 음성 녹음 버튼 UI → WAV 파일 저장
- MethodChannel로 Whisper.cpp 호출
- 텍스트 결과를 GPT로 전달
- GPT 응답을 화면에 출력 또는 음성합성 (TTS) 추가 가능
📂 예시 코드 조각
// Flutter (main.dart)
ElevatedButton(
onPressed: () async {
await startRecording();
},
child: Text("🎙️ 녹음 시작"),
)
Future<void> processAudio() async {
final text = await whisperChannel.invokeMethod("transcribe", {"file": "audio.wav"});
final response = await llamaChannel.invokeMethod("respond", {"prompt": text});
setState(() => outputText = response);
}
💡 성능 팁
- 🔉 16kHz mono PCM 형식으로 저장해야 Whisper 호환
- ⚙️ Whisper.cpp는 base.en 모델 기준 평균 3초 이내 텍스트 변환
- 📦 전체 APK 빌드 시 모델 압축 고려 (zip+split)
📌 Whisper.cpp 설치 요약 (Linux 기준)
git clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp
make
./main -m models/ggml-base.en.bin -f samples/audio.wav
📱 실제 활용 예시
- 👨🏫 수업 내용을 질문하면 요약해주는 AI
- 🛠️ 현장에서 장비 설명서 없이도 음성으로 도움 요청
- 👩🍳 요리 중 손대지 않고 레시피 질의
- 🚗 운전 중 길안내나 차량 매뉴얼 질문
🔚 마무리
Whisper를 통해 스마트폰에서도 충분히 정밀한 음성 인식을 구현할 수 있고, llama.cpp와 연동하면 GPT 수준의 응답까지도 오프라인에서 가능합니다.
이 모든 기능을 손바닥 안에 담는 일은 이제 누구나 도전할 수 있습니다.
다음 글에서는 여기에 GPT가 음성으로 직접 말하게 하는 TTS(Text-to-Speech) 연동까지 소개드릴 예정입니다. 🎧
반응형