박주니 개발 정리

Pyannote 활용해서 화자 분리 하는 방법 본문

회고

Pyannote 활용해서 화자 분리 하는 방법

박주니 2025. 3. 14. 16:17
728x90
반응형

1. Hugging Face에서 Access Token을 가지고 옵니다. 

https://junhee6773.tistory.com/entry/Hugging-Face-Token%EA%B0%92-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0

2. Hugging Face에서 pyannote/segmentation, pyannote/speaker-diariztion 을 사용 권한을 받습니다. 

3. python 코드를 넣습니다. 

from huggingface_hub import login
from pyannote.audio.pipelines import SpeakerDiarization
from pyannote.audio.core.io import Audio
import os
from dotenv import load_dotenv

# 🔹 환경 변수에서 Hugging Face API 토큰 로드
load_dotenv()
hugging_token = os.getenv("HUGGINGFACE_API_TOKEN")

if not hugging_token:
    raise ValueError("❌ Hugging Face API 토큰이 설정되지 않았습니다. .env 파일 확인!")

# 🔹 Hugging Face API 로그인 (필수)
login(hugging_token)

# 🔹 segmentation 모델도 다운로드 (사전 불러오기)
from pyannote.audio import Model
segmentation_model = Model.from_pretrained(
    "pyannote/segmentation",
    use_auth_token=hugging_token
)

# 🔹 화자 분리 모델 불러오기
pipeline = SpeakerDiarization.from_pretrained(
    "pyannote/speaker-diarization",
    use_auth_token=hugging_token
)

# 🔹 오디오 파일 경로
audio_path = "output.wav"

# 🔹 오디오 로드 및 화자 분리 수행
audio = Audio()
waveform, sample_rate = audio(audio_path)
diarization = pipeline({"waveform": waveform, "sample_rate": sample_rate})

# 🔹 결과 출력
for segment, _, speaker in diarization.itertracks(yield_label=True):
    print(f"{segment.start:.2f} - {segment.end:.2f}: Speaker {speaker}")

 

추가 설명) 

  • HUGGINGFACE_API_TOKEN : Huggingface access token을 넣습니다. 
  • audio_path : 같은 폴더 위치에서 화자 분리하고자 하는 파일을 wav 전환해서 경로를 넣습니다. 

출력값 확인 

 

특이사항 

로컬에서 실행하게 될경우 CPU로 실행되다보니 속도가 많이 느려집니다. 이부분을 해결하고 싶다면 Colab에서 A100 구독을해서 GPU를 사용하면 빠른 속도로 출력되는 것을 확인하실 수 있습니다. 

Comments