본문 바로가기
AI Project/Edge AI Agent - 음성처리(연구,분석,검증))

[비교/검증-3] #5. Edge Agent AI 음성처리 : Pyannote 모델을 이용한 화자분리

by 으노으뇨 2026. 4. 30.
728x90
SMALL

제 포스팅은 AI가 작성한게 아닌 한글자 한글자 타자를 쳐서 작성한 포스팅입니다. 구독 좋아요 댓글은 힘이됩니다.

안녕하세요~~~!!! 오래간 만입니다!! ㅎㅎㅎㅎ

 

이번에 포스팅을 할 주제는! 좀 유명하고 안정적이라고 소문난 Pyannote 모델을 써서 화자분리를 A35에서 진행해보겠습니다.

그래서 지금 이 작업을 제대로 하려면 업계 표준인 Pyannote.audio 같은 무거운 파이토치 기반 모델을 써야 합니다.

 

엑시노스 1380의 귀여운 램 6기가에 그런 무거운 기반의 모델을 올리면 아마도 힘들순 있습니다. 설치부터 조금 고될수도있죠

그래서 우분투환경 + 콘다 환경 이렇게 진행합니다. 우분투(Proot환경으로 설치하는건 아래 글에 자세히 나타나있습니다._.)

2026.04.21-#5. [Bitnet.cpp]모바일 환경에서 컨테이너띄우고 빌드

 

#5. [Bitnet.cpp]모바일 환경에서 컨테이너띄우고 빌드

안녕하세요. 지난번 Edge Device 환경에서 Bitnet.cpp를 돌리고자 했지만 실패했었습니다.이번에 많은 프로젝트를 진행하면서 cpp 빌드도 많이 돌려봤는데요, 환경설정이 가장 어려웠습니다.그럴때마

uno-kim.tistory.com

[PRoot + Conda 환경: Pyannote 화자 분리 구축 스텝]

root@localhost:~# source $HOME/miniforge3/bin/activate
(base) root@localhost:~# conda activate myenv310
(myenv310) root@localhost:~#

이렇게 들어옵니다.

# Ubuntu 시스템 패키지 매니저로 설치
apt update
apt install libsndfile1 ffmpeg -y

그리고 오디오전용 파이썬 가상환경을 반드시만들어줍니다!!

conda deactivate
conda clean --all -y
conda create -n audio_env python=3.10 -y
conda activate audio_env

PyTorch 및 Pyannote.audio 설치 (Conda의 마법)

이제 Conda 환경의 진짜 힘을 빌릴 차례입니다.

pip install torch torchaudio

pip install "numpy<2.0" "pyannote.audio==3.1.1" "pyannote-core<6.0" "pyannote-metrics<4.0"

오래걸립니다. 그래도 기다리시면 완료됩니다.

파이썬 검증 스크립트 작성 (diarize.py)

Hugging Face 토큰이 필요합니다. (미리 준비해 주십시오.)

 

[Hugging Face] 허깅페이스 토큰발급받기

허깅페이스 화면에서 우측 상단 메뉴에서 엑세스 토큰을 누릅니다.따끈따끈한 뉴비 계정이라면 우측상단의 컨퍼메이션 이메일을 눌러서 확인을 해줍니다.메일에서 컨펌 승낙하면 위처럼 나오

uno-kim.tistory.com

https://huggingface.co/pyannote/speaker-diarization-3.1

 

pyannote/speaker-diarization-3.1 · Hugging Face

We’re on a journey to advance and democratize artificial intelligence through open source and open science.

huggingface.co

허가받기

https://huggingface.co/pyannote/segmentation-3.0

 

pyannote/segmentation-3.0 · Hugging Face

We’re on a journey to advance and democratize artificial intelligence through open source and open science.

huggingface.co

모두 현재 기업명/프로젝트 URL 을 입력해줍니다. 저의경우 개인/토이프로젝트 이렇게 작성했어용

 

아래 파이썬 코드를 복사하여 붙여넣습니다.

import os
import torch
from pyannote.audio import Pipeline
import time

# PRoot 환경이므로 무조건 CPU 연산
device = torch.device("cpu")

print("1. Pyannote 모델 로딩 시작 (PRoot 오버헤드로 다소 느릴 수 있음)")
start_time = time.time()

# Hugging Face 토큰 필수 입력
pipeline = Pipeline.from_pretrained(
    "pyannote/speaker-diarization-3.1",
    use_auth_token="YOUR_HUGGINGFACE_TOKEN" # 여기에 본인의 토큰을 넣으세요
)
pipeline.to(device)

load_time = time.time() - start_time
print(f"모델 로딩 완료! (소요 시간: {load_time:.2f} 초)")
print("--------------------------------------------------")

# 테스트할 오디오 파일 (경로 확인 필수)
audio_file = "samples/test_cut_2.wav" 

print(f"2. 오디오 파일 '{audio_file}' 화자 분리 분석 중...")
start_time = time.time()

# 추론 실행
diarization = pipeline(audio_file, num_speakers=2)

infer_time = time.time() - start_time
print(f"분석 완료! (추론 소요 시간: {infer_time:.2f} 초)")
print("--------------------------------------------------")

for turn, _, speaker in diarization.itertracks(yield_label=True):
    print(f"[{turn.start:.1f}s ~ {turn.end:.1f}s] {speaker}가 말함")

그리고 이제 수많은 트러블들을 슈팅하고.... [Pyannote] 모바일환경에서 화자분리기능 구현중 발생한 트러블 슈팅 정리

 

[Pyannote] 모바일환경에서 화자분리기능 구현중 발생한 트러블 슈팅 정리

이번 포스팅은 모바일환경엑시노스1380 + Termux + 안드로이드 + 6GB 의 제한된 메모리 환경에서 Pyannote생태계를 굴리다가 발생한 트러블들을 슈팅하고 그것들을 정리한 포스팅입니다.이 글이 AI가

uno-kim.tistory.com

 

화자분리 분석중!!

이었으나

죽임을 ㄷ당했습니다./... Killed...

이것은 안드로이드 정책상 메모리를 팍 하고 먹게되어서 강제로 중단되는 현상입니다...


결론 : 실패 - 안드로이드 메모리 부족 강제 종료

에러 로그도 없이 화면에 Killed 한 줄만 뜨고 프로그램이 튕겼습니다.

소프트웨어적인 문제들을 다 해결하고 오디오 분석 단계로 넘어갔지만, 프로그램이 여러 보조 모델들을 메모리에 올리면서 스마트폰의 CPU 8개를 전부 다 쓰려고 했습니다.

이 과정에서 메모리 사용량이 순간적으로 너무 높아졌고, 안드로이드 운영체제가 배터리와 기기를 보호하려고 프로세스를 강제로 꺼버린 겁니다.

안드로이드 시스템에 걸리지 않으려면 연산 속도를 포기하더라도 CPU 사용량을 극단적으로 줄여야 했습니다.

 

  • 환경 변수 설정을 통해 스레드 1개만 쓰도록 강제 고정했습니다.
  • taskset 명령어로 프로세스가 저전력 코어 1개에서만 돌아가도록 제한하여 메모리가 순간적으로 차오르는 것을 막았습니다.

이번 시도를 통해 파이썬 라이브러리들의 버전 충돌이나 특정 하드웨어 의존성 같은 소프트웨어적인 장벽들은 코드를 수정하고 우회해서 모바일 환경에 맞게 사용할 수 있다는 걸 확인했습니다.

하지만 갤럭시 A35의 물리적인 메모리 한계와 안드로이드 운영체제의 깐깐한 메모리 관리 정책은 어쩔 수 없는 하드웨어적인 벽이었습니다.

파이토치 기반의 무거운 라이브러리를 스마트폰에서 단독으로 돌리기에는 훨씬 더 가볍게 최적화하는 과정이 필요한 것 같습니다.

결과적으로 언어 모델과 음성 인식 모델을 스마트폰 한 대에서 동시에 돌리려면 극단적으로 가벼운 프로그램이 필요합니다.

그래서 다음 번에는 메모리를 훨씬 적게 먹고 스마트폰 환경에 잘 맞는 Sherpa-ONNX같은 모델들을 직접 설치해서 성능을 테스트해 보려고 합니다.

그리고 화자분리에 대해서는 좀더 성능 좋은 PC나 아니면 최소 갤럭시 S20 이런애들한테 보내서 일을 전달해서 처리하는 식으로

구조적으로 설계를 해야할 것 같다는 생각이 들었습니다.

 

 

728x90
LIST

댓글