본문 바로가기
스마트폰 (Mobile)

스마트홈 음성 제어 자동화 연동 STT/TTS (Google, Microsoft, Whisper, Piper)

by 날으는물고기 2025. 3. 16.

스마트홈 음성 제어 자동화 연동 STT/TTS (Google, Microsoft, Whisper, Piper)

728x90

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 APIText-to-Speech API를 이용하면 Home Assistant에서 음성을 인식하고 음성 출력을 수행할 수 있습니다.

Google STT 설정 (Google Speech-to-Text)

① Google Cloud에서 Speech-to-Text API 활성화

  1. Google Cloud Console에 로그인
  2. 새로운 프로젝트 생성 또는 기존 프로젝트 선택
  3. APIs & ServicesEnable APIs & Services 이동
  4. Speech-to-Text API 검색 후 활성화

② 인증 키 생성 및 설정

  1. IAM & AdminService accounts 이동
  2. 새로운 서비스 계정 생성 → 역할(Role)에서 Cloud Speech API User 선택
  3. 키(Key) 생성 → JSON 파일 다운로드
  4. 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 활성화

  1. Google Cloud Console에서 Text-to-Speech API 활성화
  2. 인증 키는 위의 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 활성화

  1. Azure Portal 로그인
  2. Cognitive ServicesSpeech 서비스 생성
  3. 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 활성화

  1. Kakao Developers에서 로그인
  2. 애플리케이션 생성 후 음성 API 사용 설정
  3. 발급된 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: 로컬 환경에서 구동 가능, 인터넷 불필요
연동 방식 인터넷 필요 설치 난이도 속도 비용 주요 장점
Google 보통 빠름 무료(제한 있음) 정확도 높음, 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 설치

  1. HACS(Home Assistant Community Store) 설치
    • Settings → Add-ons 에서 HACS 설치
  2. 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 없이 음성 합성을 수행하려는 사용자

🚀 활용 방안

  1. Home Assistant 기반 스마트홈 음성 안내
  2. 라즈베리파이에서 로컬 TTS 실행
  3. 개인 음성비서 구축 (예: Rhasspy, Open Voice OS)
  4. 시각 장애인을 위한 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 설치

  1. HACS(Home Assistant Community Store) 설치
    • Settings → Add-ons 에서 HACS 설치
  2. 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를 사용하여 텍스트 변환이 필요한 개발자
  • 데이터 프라이버시가 중요한 환경 (로컬 실행 가능)

🚀 활용 방안

  1. Home Assistant 기반 스마트홈 자동화 (음성 명령)
  2. 회의록 자동 작성 (음성 파일 → 텍스트 변환)
  3. 자막 생성 (음성 → 자막 파일 .srt 변환)
  4. STT + TTS 연계 (Whisper + Piper)
  5. 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: "전등을 켰습니다."

📝 동작 방식

  1. Whisper가 음성을 받아 "불 켜줘"라고 인식하면 이벤트가 발생.
  2. 해당 이벤트를 트리거로 전등을 켜고.
  3. Piper가 "전등을 켰습니다."라고 출력.

Node-RED 활용

만약 자동화를 Node-RED로 구성하고 싶다면 아래와 같은 흐름으로 설정 가능합니다.

  1. Whisper 입력 노드: Whisper의 음성 입력을 감지.
  2. 텍스트 분석 노드: 특정 단어("불 켜줘")를 감지.
  3. 홈 자동화 실행 노드: light.turn_on 실행.
  4. Piper 출력 노드: tts.piper_say로 응답.

이제 Whisper와 Piper를 이용해 음성 인식 및 합성을 테스트할 수 있습니다.

  • whisper.transcribe_file로 음성 인식을 테스트.
  • tts.piper_say로 음성 출력을 테스트.
  • 자동화(YAML 또는 Node-RED)를 활용하여 실제 스마트홈 제어 가능.
728x90

댓글