Home Assistant에서 STT(Speech-to-Text) 및 TTS(Text-to-Speech)를 구성하는 방법입니다.
Home Assistant에서 STT 및 TTS를 활용하면 다음과 같은 기능을 구현할 수 있습니다.
- STT(Speech-to-Text): 음성을 텍스트로 변환하여 자동화 트리거 또는 명령 실행
- TTS(Text-to-Speech): 텍스트를 음성으로 변환하여 스마트 스피커 또는 미디어 장치에서 출력
Home Assistant에서 STT 및 TTS 기능을 구성하면 음성 명령을 인식하여 자동화(trigger)할 수 있으며, TTS를 활용하여 기기(스피커 등)에서 음성을 출력할 수도 있습니다. 각 연동 방식에 대한 개요는 다음과 같습니다.
연동 방식 | STT 지원 | TTS 지원 | 특징 |
---|---|---|---|
Google (Cloud Speech API, Google TTS) | ✅ | ✅ | Google Cloud API 필요, 설정이 비교적 복잡 |
Microsoft (Azure Speech Services) | ✅ | ✅ | Azure Cognitive Services 사용, 유료 |
Kakao (Kakao Developers API) | ✅ | ✅ | 한국어 지원 최적화, 무료 사용 제한 있음 |
Piper + Whisper (로컬 AI 기반) | ✅ | ✅ | 인터넷 연결 불필요, 성능 및 반응 속도 우수 |
구글(Google) STT/TTS 연동
Google Cloud의 Speech-to-Text API 및 Text-to-Speech API를 이용하면 Home Assistant에서 음성을 인식하고 음성 출력을 수행할 수 있습니다.
Google STT 설정 (Google Speech-to-Text)
① Google Cloud에서 Speech-to-Text API 활성화
- Google Cloud Console에 로그인
- 새로운 프로젝트 생성 또는 기존 프로젝트 선택
- APIs & Services → Enable APIs & Services 이동
- Speech-to-Text API 검색 후 활성화
② 인증 키 생성 및 설정
- IAM & Admin → Service accounts 이동
- 새로운 서비스 계정 생성 → 역할(Role)에서
Cloud Speech API User
선택 - 키(Key) 생성 → JSON 파일 다운로드
- JSON 키 파일을 Home Assistant 서버에 업로드
③ Home Assistant 설정 추가 (configuration.yaml)
stt:
- platform: google_cloud
credentials_json: "/config/google_stt_key.json"
language: ko-KR
설정 저장 후 Home Assistant 재시작
자동화 예제
automation:
- alias: "음성 명령으로 조명 제어"
trigger:
platform: event
event_type: stt.recognize
event_data:
text: "거실 불 켜"
action:
- service: light.turn_on
target:
entity_id: light.living_room
Google TTS 설정 (Google Text-to-Speech)
① Google Cloud에서 Text-to-Speech API 활성화
- Google Cloud Console에서 Text-to-Speech API 활성화
- 인증 키는 위의 STT 설정과 동일한 방법으로 생성
② Home Assistant 설정 (configuration.yaml)
tts:
- platform: google_translate
service_name: google_say
cache: true
language: "ko"
Home Assistant를 재시작하면 google_translate_say
서비스를 사용할 수 있습니다.
자동화 예제
automation:
- alias: "TTS로 알림 제공"
trigger:
platform: state
entity_id: sensor.weather
to: "rain"
action:
- service: tts.google_translate_say
data:
entity_id: media_player.living_room_speaker
message: "비가 올 예정입니다. 우산을 챙기세요."
③ TTS 테스트
서비스 호출(Developer Tools → Services
)에서 아래와 같이 실행
service: tts.google_translate_say
data:
entity_id: media_player.living_room_speaker
message: "안녕하세요, 구글 TTS입니다."
Microsoft Azure STT/TTS 연동
Microsoft의 Azure Speech Services를 사용하면 Home Assistant에서 음성을 인식하고, 음성 출력을 수행할 수 있습니다.
Microsoft STT 설정 (Azure Speech-to-Text)
① Azure 계정 생성 및 API 활성화
- Azure Portal 로그인
- Cognitive Services → Speech 서비스 생성
- API Key 및 Region 확인
② Home Assistant 설정 (configuration.yaml)
stt:
- platform: microsoft
api_key: "YOUR_AZURE_SPEECH_KEY"
region: "eastus"
language: "ko-KR"
Home Assistant 재시작 후 STT 사용 가능
자동화 예제
automation:
- alias: "MS STT로 음성 명령 실행"
trigger:
platform: event
event_type: stt.recognize
event_data:
text: "온도 알려줘"
action:
- service: tts.microsoft_say
data:
entity_id: media_player.living_room_speaker
message: "현재 온도는 {{ states('sensor.temperature') }} 도 입니다."
Microsoft TTS 설정 (Azure Text-to-Speech)
① Home Assistant 설정 (configuration.yaml)
tts:
- platform: microsoft
api_key: "YOUR_AZURE_SPEECH_KEY"
region: "eastus"
language: "ko-KR"
gender: "Female"
② 서비스 호출
service: tts.microsoft_say
data:
entity_id: media_player.living_room_speaker
message: "마이크로소프트 TTS 테스트입니다."
카카오(Kakao) STT/TTS 연동
Kakao Developers의 STT/TTS API를 활용하여 음성 인식 및 음성 출력을 수행할 수 있습니다.
Kakao STT 설정 (Kakao Speech-to-Text)
① Kakao Developers 계정 생성 및 API 활성화
- Kakao Developers에서 로그인
- 애플리케이션 생성 후 음성 API 사용 설정
- 발급된 REST API 키 확인
② Home Assistant 설정 (configuration.yaml)
stt:
- platform: kakao
api_key: "YOUR_KAKAO_API_KEY"
language: "ko-KR"
Home Assistant 재시작 후 STT 사용 가능
자동화 예제
automation:
- alias: "Kakao STT로 음성 명령 실행"
trigger:
platform: event
event_type: stt.recognize
event_data:
text: "음악 재생해"
action:
- service: media_player.play_media
data:
entity_id: media_player.spotify
media_content_id: "spotify:playlist:37i9dQZF1DXcBWIGoYBM5M"
media_content_type: "music"
Kakao TTS 설정 (Kakao Text-to-Speech)
① Home Assistant 설정 (configuration.yaml)
tts:
- platform: kakao
api_key: "YOUR_KAKAO_API_KEY"
language: "ko-KR"
voice: "WOMAN_READ_CALM"
② 서비스 호출
service: tts.kakao_say
data:
entity_id: media_player.living_room_speaker
message: "카카오 TTS 테스트입니다."
Piper + Whisper (로컬 AI 기반) 연동
Google, Microsoft, Kakao API를 사용하면 정확도는 높지만 클라우드 기반이므로 인터넷 연결이 필요합니다. Piper + Whisper 조합을 사용하면 로컬 환경에서 STT/TTS 기능을 구현할 수 있습니다.
Whisper STT 설정
Whisper는 OpenAI가 개발한 음성 인식 모델로, Home Assistant에서 whisper
플러그인을 사용하여 로컬 STT를 구현할 수 있습니다.
① Whisper 설치
Home Assistant OS 또는 Supervised 환경에서 HACS(Home Assistant Community Store)를 사용하여 whisper
를 설치
pip install openai-whisper
② configuration.yaml
설정
stt:
- platform: whisper
model: "medium"
자동화 예제
automation:
- alias: "Whisper STT 활용"
trigger:
platform: event
event_type: stt.recognize
event_data:
text: "날씨 알려줘"
action:
- service: tts.piper_say
data:
entity_id: media_player.living_room_speaker
message: "현재 기온은 {{ states('sensor.temperature') }} 도 입니다."
Piper TTS 설정
Piper는 경량 TTS 엔진으로, 로컬에서 실행 가능하며 높은 음질을 제공합니다.
① Piper 설치
pip install piper-tts
② configuration.yaml 설정
tts:
- platform: piper
voice: "ko-KR"
③ 서비스 호출
service: tts.piper_say
data:
entity_id: media_player.living_room_speaker
message: "Piper TTS 테스트입니다."
Home Assistant에서 STT/TTS를 설정하는 방법을 정리하면 다음과 같습니다.
- Google: Cloud 기반, 설정이 복잡하지만 강력한 기능 제공
- Microsoft: Azure 서비스 활용, 유료지만 고품질 제공
- Kakao: 한국어 최적화, 무료 사용 제한 존재
- Piper + Whisper: 로컬 환경에서 구동 가능, 인터넷 불필요
연동 방식 | 인터넷 필요 | 설치 난이도 | 속도 | 비용 | 주요 장점 |
---|---|---|---|---|---|
✅ | 보통 | 빠름 | 무료(제한 있음) | 정확도 높음, TTS 음질 우수 | |
Microsoft | ✅ | 보통 | 빠름 | 유료 | 고품질 STT/TTS |
Kakao | ✅ | 쉬움 | 빠름 | 무료(제한 있음) | 한국어 최적화 |
Whisper + Piper | ❌ | 어려움 | 보통 | 무료 | 로컬 실행, 개인정보 보호 |
- 온라인 환경 → Google, Microsoft, Kakao 추천
- 완전한 로컬 환경 → Whisper + Piper 추천
- 한국어 최적화 → Kakao 추천
- 음질이 중요한 경우 → Microsoft 또는 Google 추천
어떤 방식이든 Home Assistant에서 강력한 STT/TTS를 활용할 수 있으며, 조합하여 사용할 수도 있습니다. 각 방법을 비교하여 사용 환경에 맞는 STT/TTS 솔루션을 선택하면 됩니다. 필요한 경우 추가 설정 및 자동화 연계도 가능합니다.
Piper TTS 구축 및 활용 가이드
Piper는 빠르고 가벼운 로컬 텍스트-음성 변환(Text-to-Speech, TTS) 시스템으로, 라즈베리파이 4와 같은 저사양 기기에서도 원활하게 실행되도록 최적화되어 있습니다. Home Assistant와 같은 스마트 홈 플랫폼과 쉽게 통합할 수 있으며, 클라우드 API 없이 완전한 오프라인 TTS를 제공합니다.
Piper의 주요 특징
✅ 로컬 실행: 인터넷 연결 없이 동작하여 개인정보 보호
✅ 빠른 성능: 저사양 기기에서도 빠른 음성 변환
✅ 다양한 언어 지원: 한국어 포함 30개 이상 언어 지원
✅ ONNX 기반: ONNX Runtime을 활용하여 성능 최적화
✅ Home Assistant 지원: Home Assistant의 "Year of Voice" 프로젝트와 통합 가능
지원 언어 목록
- 한국어(Korean)는 공식 지원 목록에 포함되지 않음 (별도로 모델 학습 필요)
- 주요 지원 언어: 영어, 독일어, 프랑스어, 스페인어, 중국어, 일본어, 러시아어 등
Piper 설치 방법
Piper는 Python 패키지, 바이너리 실행 파일, 소스 코드 컴파일 방식으로 설치할 수 있습니다.
Python을 이용한 설치 (권장)
가장 간단한 설치 방법은 Python pip
를 이용하는 것입니다.
pip install piper-tts
설치 후 실행 확인
piper --help
바이너리 실행 파일 다운로드 (Linux)
Piper는 사전 빌드된 바이너리를 제공하므로, 별도의 빌드 과정 없이 사용할 수 있습니다.
아래에서 자신의 시스템 아키텍처에 맞는 파일을 다운로드하세요.
- AMD64 (64-bit Linux 데스크탑)
- ARM64 (라즈베리파이 4)
- ARMv7 (라즈베리파이 3/4, 32-bit)
다운로드 후 실행 권한을 부여합니다.
chmod +x piper
./piper --help
소스 코드 빌드
Piper는 C++로 작성되어 있으며, 직접 빌드하여 실행할 수도 있습니다.
필요한 패키지를 설치하고 Makefile
을 실행하면 됩니다.
git clone https://github.com/rhasspy/piper.git
cd piper
make
Piper 음성 모델 다운로드
Piper를 실행하려면 음성 모델(Voice Model) 이 필요합니다. 공식 제공하는 ONNX 모델과 JSON 설정 파일을 다운로드해야 합니다. 공식 모델 다운로드 링크: 🔗 Piper Voice Models
예제: 영어(미국) 모델 다운로드
wget https://github.com/rhasspy/piper/releases/download/v0.0.2/en_US-lessac-medium.onnx
wget https://github.com/rhasspy/piper/releases/download/v0.0.2/en_US-lessac-medium.onnx.json
Piper 실행 및 활용
Piper는 stdin
에서 텍스트 입력을 받아 음성 파일(WAV)로 출력합니다.
기본 실행 예제
echo 'Hello, this is a test of Piper TTS.' | \
piper --model en_US-lessac-medium.onnx --output_file output.wav
실행 후 output.wav
파일을 재생하면 변환된 음성을 들을 수 있습니다.
음성 스트리밍 (실시간 TTS)
Piper는 음성을 실시간 스트리밍할 수도 있습니다. 아래 명령어는 변환된 음성을 aplay
로 즉시 재생합니다.
echo 'This is a real-time TTS test.' | \
piper --model en_US-lessac-medium.onnx --output-raw | \
aplay -r 22050 -f S16_LE -t raw -
aplay
를 사용하여 16-bit PCM 오디오를 즉시 재생
JSON 입력을 통한 다중 문장 변환
Piper는 JSON 포맷으로 입력을 받을 수도 있습니다.
{ "text": "First sentence to speak.", "output_file": "first.wav" }
{ "text": "Second sentence to speak.", "output_file": "second.wav" }
위 JSON을 사용하여 piper
실행
cat input.json | piper --model en_US-lessac-medium.onnx --json-input
Home Assistant와 연동
Piper는 Home Assistant의 로컬 TTS 서비스로 활용할 수 있습니다.
Home Assistant에 Piper 설치
- HACS(Home Assistant Community Store) 설치
Settings → Add-ons
에서 HACS 설치
- Piper TTS 애드온 설치
HACS → Integrations
에서 Piper 검색 후 설치
Home Assistant 설정
Home Assistant의 configuration.yaml
파일을 수정합니다.
tts:
- platform: piper
voice: "en_US-lessac-medium"
한국어 모델 학습 진행
Korean Single Speaker Speech Dataset
KSS Dataset: Korean Single Speaker Speech Dataset
www.kaggle.com
import mlcroissant as mlc
import pandas as pd
# Fetch the Croissant JSON-LD
croissant_dataset = mlc.Dataset('https://www.kaggle.com/datasets/bryanpark/korean-single-speaker-speech-dataset/croissant/download')
# Check what record sets are in the dataset
record_sets = croissant_dataset.metadata.record_sets
print(record_sets)
# Fetch the records and put them in a DataFrame
record_set_df = pd.DataFrame(croissant_dataset.records(record_set=record_sets[0].uuid))
record_set_df.head()
Python API를 사용한 JSON-LD 파일 생성
mlcroissant
라이브러리를 사용하면 Croissant JSON-LD 파일을 프로그래밍 방식으로 생성할 수 있다.
예제 코드
import mlcroissant as mlc
metadata = mlc.nodes.Metadata(
name="..."
)
metadata.to_json() # JSON-LD 파일을 반환함
mlc.nodes.Metadata
객체를 생성하여 데이터셋의 메타데이터를 정의함.metadata.to_json()
을 호출하면 JSON-LD 형식으로 변환됨.
표준 속성 확장 (새로운 속성 추가)
Croissant의 Node
클래스(Metadata
, RecordSets
등)는 PEP 681을 따르며, Python의 dataclass
문법을 활용하여 RDF 트리플을 선언할 수 있다.
예제 1: CreativeWork 구현
아래는 Schema.org의 CreativeWork를 구현한 예제다.
@mlc_dataclasses.dataclass
class CreativeWork(Node):
JSONLD_TYPE = SDO.CreativeWork # JSON-LD 타입 지정
name: str | None = mlc_dataclasses.jsonld_field(
cardinality="ONE", # 값의 개수 제한 (ONE: 단일 값)
default=None, # 기본값
description="The name of the item.", # 설명 추가
input_types=[SDO.Text], # 입력 데이터 타입 (여기선 Text)
url=SDO.name, # 해당 속성의 URL
)
JSONLD_TYPE = SDO.CreativeWork
: 이 클래스가CreativeWork
타입을 따른다는 것을 명시.name
속성cardinality="ONE"
: 값이 하나만 존재할 수 있음.input_types=[SDO.Text]
: Schema.org에서Text
타입을 따름.url=SDO.name
:name
속성의 공식 Schema.org URL을 연결함.
예제 2: RecordSet 구현
아래는 RecordSet
을 정의하는 방법이다.
@mlc_dataclasses.dataclass
class RecordSet(Node):
JSONLD_TYPE = constants.ML_COMMONS_RECORD_SET_TYPE
fields: list[Field] = mlc_dataclasses.jsonld_field(
cardinality="MANY", # 여러 개의 값이 들어갈 수 있음
default_factory=list, # 기본값은 빈 리스트
description=(
"A data element that appears in the records of the RecordSet "
"(e.g., one column of a table)."
),
input_types=[Field], # `Field` 타입을 가지는 리스트
url=constants.ML_COMMONS_FIELD,
)
fields
:RecordSet
이 포함하는 데이터 필드를 정의하는 속성.cardinality="MANY"
: 여러 개의 필드 값을 가질 수 있음.input_types=[Field]
:Field
노드를 타입으로 가짐.url=constants.ML_COMMONS_FIELD
: 해당 필드의 JSON-LD URL을 정의함.
예제 3: 특정 버전에서만 유효한 속성 추가
기본적으로 모든 버전에 대해 속성이 유효하지만, 특정 버전에만 포함되도록 지정할 수도 있다.
@mlc_dataclasses.dataclass
class Field(Node):
is_enumeration: bool | None = mlc_dataclasses.jsonld_field(
default=None,
input_types=[SDO.Boolean],
url=constants.ML_COMMONS_IS_ENUMERATION,
versions=[CroissantVersion.V_0_8], # v0.8 버전에서만 사용 가능
)
is_enumeration
: 필드가 열거형인지 여부를 나타냄.versions=[CroissantVersion.V_0_8]
: 이 속성은 v0.8 버전에서만 유효하고, v1.0에서는 사용되지 않음.
이제 mlcroissant
를 활용하여 데이터셋의 메타데이터를 JSON-LD 형식으로 쉽게 정의하고 확장할 수 있습니다.
mlcroissant
라이브러리를 사용하면 JSON-LD 파일을 생성하고 조작할 수 있음.Node
클래스(Metadata
,RecordSet
등)는dataclass
문법을 지원하여 쉽게 확장 가능.jsonld_field()
를 사용하여 속성의 메타데이터를 선언할 수 있음.- 특정 속성을 특정 버전에만 적용할 수도 있음.
자동화 예제
자동화 스크립트를 사용하여 TTS를 호출할 수 있습니다.
automation:
- alias: "음성 알림"
trigger:
platform: state
entity_id: binary_sensor.door
to: "on"
action:
- service: tts.piper_say
data:
entity_id: media_player.living_room_speaker
message: "문이 열렸습니다!"
media_player.living_room_speaker
는 Home Assistant에 등록된 오디오 장치
Piper 성능 최적화
Piper는 ONNX 모델을 활용하므로 GPU 가속을 적용할 수 있습니다.
GPU 가속 (CUDA) 설정
ONNX Runtime의 GPU 버전을 설치하면 NVIDIA GPU에서 Piper를 실행할 수 있습니다.
pip install onnxruntime-gpu
이후 --cuda
옵션을 추가하여 실행합니다.
echo 'Hello world' | piper --model en_US-lessac-medium.onnx --cuda --output_file output.wav
✅ 추천 사용자
- 로컬 음성 합성을 원하는 사용자
- Home Assistant에서 TTS 기능을 로컬에서 실행하려는 사용자
- 클라우드 API 없이 음성 합성을 수행하려는 사용자
🚀 활용 방안
- Home Assistant 기반 스마트홈 음성 안내
- 라즈베리파이에서 로컬 TTS 실행
- 개인 음성비서 구축 (예: Rhasspy, Open Voice OS)
- 시각 장애인을 위한 NVDA (NonVisual Desktop Access) 음성 출력
Piper는 빠르고 로컬에서 실행 가능한 TTS 솔루션으로, Home Assistant 및 스마트홈에서 강력한 활용이 가능합니다.
Whisper 구축 및 활용 가이드
Whisper는 OpenAI가 개발한 범용 음성 인식(Speech-to-Text, STT) 모델입니다. 다양한 언어를 지원하며, 음성 인식, 음성 번역, 언어 감지 등의 기능을 제공합니다. 로컬 환경에서도 실행할 수 있어 개인정보 보호에 강점이 있으며, Home Assistant와 같은 시스템과 쉽게 통합할 수 있습니다.
✅ 다국어 음성 인식: 100개 이상의 언어 지원
✅ 로컬 실행 가능: 클라우드 API 없이 직접 실행 가능
✅ 다양한 활용 가능: STT, 음성 번역, 언어 감지 기능 지원
✅ Transformer 기반: 기존 음성 인식 모델보다 강력한 성능
✅ Home Assistant 및 Piper와 연동 가능
Whisper 모델 종류 및 성능
Whisper는 모델 크기에 따라 여러 가지 옵션이 있습니다.
모델 크기 | 파라미터 수 | English-only 모델 | 다국어 모델 | 필요 VRAM | 속도(기준: large 모델 대비) |
---|---|---|---|---|---|
tiny | 39M | tiny.en |
tiny |
1GB | 10배 빠름 |
base | 74M | base.en |
base |
1GB | 7배 빠름 |
small | 244M | small.en |
small |
2GB | 4배 빠름 |
medium | 769M | medium.en |
medium |
5GB | 2배 빠름 |
large | 1550M | ❌ | large |
10GB | 1배 (기준 모델) |
turbo | 809M | ❌ | turbo |
6GB | 8배 빠름 |
- tiny/base 모델: 저사양 환경(Raspberry Pi)에서도 실행 가능
- small/medium 모델: 높은 정확도를 유지하면서도 적당한 성능 제공
- large 모델: 가장 높은 정확도를 제공하지만 VRAM이 많이 필요
- turbo 모델:
large-v3
모델의 최적화 버전으로, 속도가 빠름
권장 모델 선택
- 빠른 실행 & 저사양 환경 →
tiny
,base
- 균형 잡힌 성능 →
small
,medium
- 최고 정확도 →
large
- 빠른 처리 속도 & 높은 성능 →
turbo
Whisper 설치 방법
Whisper는 Python 패키지로 제공되며, 간단한 명령어로 설치할 수 있습니다.
Python을 이용한 설치 (권장)
pip install -U openai-whisper
또는 최신 버전을 GitHub에서 직접 설치
pip install git+https://github.com/openai/whisper.git
추가 패키지 설치
# FFMPEG 설치 (오디오 변환에 필요)
sudo apt update && sudo apt install ffmpeg # Ubuntu/Debian
brew install ffmpeg # macOS
choco install ffmpeg # Windows
Whisper 사용 방법
Whisper는 CLI(Command Line Interface)와 Python 라이브러리 두 가지 방식으로 사용할 수 있습니다.
커맨드라인(CLI) 사용
오디오 파일을 텍스트로 변환하는 기본 명령어
whisper audio.mp3 --model small
추가 옵션
- 언어 지정 (한국어 음성 파일인 경우)
whisper korean_audio.mp3 --model small --language Korean
- 번역 (한국어 → 영어)
whisper korean_audio.mp3 --model small --language Korean --task translate
- 출력 형식 지정(txt: 텍스트 파일, json: JSON 포맷, srt: 자막 파일)
whisper audio.mp3 --model small --output_format txt,json,srt
Python에서 사용
Whisper는 Python 코드에서도 사용할 수 있습니다.
import whisper
# 모델 로드
model = whisper.load_model("small")
# 오디오 파일 변환
result = model.transcribe("audio.mp3")
print(result["text"]) # 변환된 텍스트 출력
추가 기능
- 언어 감지
import whisper # 오디오 파일 로드 및 스펙트로그램 변환 audio = whisper.load_audio("audio.mp3") mel_spectrogram = whisper.log_mel_spectrogram(audio) # 모델을 사용하여 언어 감지 mel_spectrogram = mel_spectrogram.to(model.device) _, probs = model.detect_language(mel_spectrogram) # 감지된 언어 출력 detected_language = max(probs, key=probs.get) print(f"Detected language: {detected_language}")
- 번역 (STT + 자동 번역)
# 오디오 파일을 번역하여 텍스트 출력 result = model.transcribe("korean_audio.mp3", task="translate") translated_text = result["text"] print(translated_text) # 영어로 번역된 결과 출력
Whisper + Home Assistant 연동
Whisper는 Home Assistant의 로컬 STT 엔진으로 사용할 수 있습니다.
Home Assistant에 Whisper 설치
- HACS(Home Assistant Community Store) 설치
Settings → Add-ons
에서 HACS 설치
- Whisper STT 애드온 설치
HACS → Integrations
에서 Whisper 검색 후 설치
Home Assistant 설정 (configuration.yaml)
stt:
- platform: whisper
model: "medium"
tiny
, base
, small
, medium
, large
모델 중 선택 가능
자동화 예제
automation:
- alias: "Whisper STT로 음성 명령 실행"
trigger:
platform: event
event_type: stt.recognize
event_data:
text: "거실 불 켜"
action:
- service: light.turn_on
target:
entity_id: light.living_room
음성 명령어를 Whisper
로 변환하여 자동화 트리거로 사용
Whisper 성능 최적화
Whisper의 성능을 높이기 위한 몇 가지 최적화 방법이 있습니다.
GPU 가속 설정
Whisper는 ONNX 기반이므로 CUDA GPU 가속을 사용할 수 있습니다.
pip install onnxruntime-gpu
GPU 가속을 활성화하려면 실행 시 device="cuda"
옵션을 추가합니다.
import whisper
model = whisper.load_model("medium").to("cuda")
result = model.transcribe("audio.mp3")
print(result["text"])
실시간 음성 인식 (Streaming STT)
Whisper는 실시간 음성 인식 기능을 지원하지 않지만, whisper-live
와 같은 외부 라이브러리를 사용하여 구현할 수 있습니다.
설치
pip install whisper-live
사용 예제
from whisper_live import WhisperSTT
stt = WhisperSTT(model="base")
for text in stt.stream():
print(f"Recognized: {text}")
실시간 스트리밍 STT 가능
✅ Whisper 추천 사용자
- 로컬에서 음성 인식을 수행하고 싶은 사용자
- Home Assistant와 연동하여 스마트홈 음성 명령을 실행하고 싶은 사용자
- STT를 사용하여 텍스트 변환이 필요한 개발자
- 데이터 프라이버시가 중요한 환경 (로컬 실행 가능)
🚀 활용 방안
- Home Assistant 기반 스마트홈 자동화 (음성 명령)
- 회의록 자동 작성 (음성 파일 → 텍스트 변환)
- 자막 생성 (음성 → 자막 파일 .srt 변환)
- STT + TTS 연계 (Whisper + Piper)
- AI 보이스 어시스턴트 개발
Whisper는 고품질 로컬 음성 인식 솔루션으로, 다양한 환경에서 활용할 수 있습니다.
Home Assistant + Whisper + Piper 자동화 테스트
Whisper로 음성을 인식하고 Piper로 응답하는 간단한 자동화를 만들어 볼 수 있습니다.
예제: "불 켜줘"라고 말하면 전등을 켜는 자동화
alias: "Whisper + Piper 테스트"
trigger:
- platform: event
event_type: whisper.transcription_received
event_data:
text: "불 켜줘"
action:
- service: light.turn_on
target:
entity_id: light.living_room
- service: tts.piper_say
data:
entity_id: media_player.your_speaker
message: "전등을 켰습니다."
📝 동작 방식
- Whisper가 음성을 받아
"불 켜줘"
라고 인식하면 이벤트가 발생. - 해당 이벤트를 트리거로 전등을 켜고.
- Piper가
"전등을 켰습니다."
라고 출력.
Node-RED 활용
만약 자동화를 Node-RED로 구성하고 싶다면 아래와 같은 흐름으로 설정 가능합니다.
- Whisper 입력 노드: Whisper의 음성 입력을 감지.
- 텍스트 분석 노드: 특정 단어("불 켜줘")를 감지.
- 홈 자동화 실행 노드:
light.turn_on
실행. - Piper 출력 노드:
tts.piper_say
로 응답.
이제 Whisper와 Piper를 이용해 음성 인식 및 합성을 테스트할 수 있습니다.
whisper.transcribe_file
로 음성 인식을 테스트.tts.piper_say
로 음성 출력을 테스트.- 자동화(YAML 또는 Node-RED)를 활용하여 실제 스마트홈 제어 가능.
댓글