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

[비교/검증-2] #4. Edge Agent AI 음성처리 : Sherpa-ONNX 실행 , 화자분리, 트러블슈팅정리

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

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

안녕하세요!! 이번에는 Sherpa-ONNX엔진에 대해서 알아보고 한번 모바일환경에서도 동작하는지 그리고 동작한다면 어떤성능을 보여줄기 직접 한번 보겠습니다.

Sherpa-ONNX

1. Sherpa-ONNX의 탄생 배경과 역사 (재밌어용)

더보기

이 프로젝트를 이해하려면 먼저 음성 인식계의 전설적인 소프트웨어인 칼디를 알아야 합니다. -- Kaldi 

딥러닝이 세상을 지배하기 전, 약 10여 년 동안 전 세계 음성 인식 연구의 표준은 칼디라는 C++ 기반의 프레임워크였습니다. 이 칼디를 만든 사람이 바로 음성 인식 분야의 천재로 불리는 대니얼 포비 교수입니다.

하지만 시대가 변하면서 파이토치나 텐서플로우 같은 딥러닝 기반의 프레임워크들이 등장했고, 구조가 복잡했던 기존의 칼디는 점점 시대에 뒤처지기 시작했습니다.

이에 대니얼 포비 교수는 샤오미를 거쳐 현재 텐센트에 합류하면서, 전 세계의 수많은 오픈소스 개발자들 특히 중국의 거대 테크 기업 엔지니어들과 함께 칼디의 후속작인 차세대 칼디 프로젝트를 시작하게 됩니다.

이 차세대 칼디 프로젝트 안에서 "학습된 AI 모델을 스마트폰이나 라즈베리파이 같은 엣지 환경에 아주 가볍게 올릴 수 있는 배포용 프레임워크를 만들자!"라는 목표로 파생된 서브 프로젝트가 바로 Sherpa입니다.

이름이 셰르파인 이유도 재밌습니다. 히말라야 산맥을 오르는 등반가들을 안내하는 셰르파처럼, 무거운 AI 모델이 험난한 모바일 기기에 잘 안착할 수 있도록 안내하겠다는 의미를 담고 있습니다.

2. 구동 방식: 왜 이렇게 빠르고 가벼운가?

Sherpa-ONNX의 핵심은 이름에서도 알 수 있듯 ONNX라는 개방형 AI 포맷을 사용한다는 점입니다.

기존 파이토치 모델들은 실행하려면 반드시 파이토치라는 수 기가바이트짜리 무거운 가상 엔진을 메모리에 통째로 올려야만 했습니다.

앞서 우리가 엑시노스에서 램이 터져버렸던 이유가 바로 이것입니다.

하지만 Sherpa-ONNX는 파이토치로 학습된 모델의 알맹이 연산 공식만 쏙 빼내서 보편적인 규격인 ONNX 파일로 변환합니다.

그리고 파이썬 환경을 완전히 배제한 채, 100퍼센트 순수 C++ 언어로 짜인 전용 런타임 엔진을 통해 이 파일을 실행합니다.

여기에 덧붙여, 스마트폰의 핵심 두뇌인 ARM 코어에 맞춰 연산 방식을 극한으로 최적화했습니다.

불필요한 의존성을 모두 끊어버리고 오직 음성을 듣고 텍스트로 바꾸는 추론 연산에만 집중하기 때문에, 메모리는 100메가바이트 수준만 차지하면서도 응답 속도는 실시간에 가깝게 나옵니다.

3. Sherpa-ONNX의 장단점

더보기

장점

첫째, 소름 돋는 가벼움과 안정성 

이것이 제가 이 프레임워크를 선택한 가장 큰 이유입니다.

램 점유율이 믿기지 않을 정도로 낮습니다.

메모리 관리가 빡빡한 안드로이드 환경에서도 백그라운드에 조용히 띄워놓고 며칠을 방치해도 시스템이 강제로 종료시키는 일이 없습니다.

둘째, 플랫폼을 가리지 않는 호환성 

안드로이드, 애플 iOS, 리눅스, 윈도우 심지어 웹 브라우저 안에서도 돌아갑니다.

코드를 한 번만 짜면 어떤 기기에서든 동일한 성능으로 음성 인식을 돌릴 수 있습니다.

스마트폰 자체 마이크 권한을 쉽게 가져다 쓸 수 있도록 자바와 C++을 연결하는 인터페이스도 완벽하게 구축되어 있습니다.

셋째, 오디오 종합 선물 세트 

단순히 음성을 텍스트로 바꾸는 기능만 있는 것이 아닙니다.

텍스트를 사람 목소리로 읽어주는 기능, 사람의 목소리가 들리는 구간만 귀신같이 찾아내는 기능, 그리고 제가 가장 간절히 찾았던 누가 말했는지 구분해 내는 화자 분리 기능까지 하나의 프레임워크 안에서 모두 지원합니다.

넷째, 실시간 스트리밍 지원 

위스퍼 같은 모델은 보통 녹음이 다 끝나야 번역을 시작하지만, 셰르파가 지원하는 집포머 같은 전용 모델들은 사람이 말을 하는 그 순간순간 0.1초의 지연도 없이 바로 텍스트를 화면에 띄워줍니다.

단점

첫째, 진입 장벽이 매우 높습니다. 

파이썬 생태계에서는 명령어 한 줄이면 설치가 끝나지만, 이것은 C++ 기반이라 직접 컴파일러를 돌려 소스코드를 빌드해야 합니다.

스마트폰 터미널 환경에서 각종 컴파일 오류와 싸우며 빌드하는 과정은 초보자에게 지옥과도 같습니다.

둘째, 모델 변환의 귀찮음 

허깅페이스에 올라와 있는 최신 AI 모델들을 그냥 다운받아서 바로 쓸 수 없습니다.

모든 모델을 이 엔진에 맞게 스크립트를 돌려 ONNX 포맷으로 변환해 줘야 하는 수고로움이 따릅니다.

셋째, 거대한 커뮤니티의 부재 

오픈AI의 위스퍼 생태계에 비하면 아직 사용자가 적습니다.

문제가 발생했을 때 구글링을 해도 한글로 된 친절한 블로그 글을 찾기 힘들며, 직접 깃허브 공식 문서를 뒤져가며 영어로 된 이슈들을 파헤쳐야 합니다.


설치 및 빌드

# 1. projects 폴더로 이동 (확실하게 하기 위해)
cd ~/projects

# 2. 대망의 Sherpa-ONNX 소스코드 가져오기 
# (이 명령어를 치면 projects 안에 'sherpa-onnx' 폴더가 새로 짠! 하고 생깁니다)
git clone https://github.com/k2-fsa/sherpa-onnx.git

# 3. 방금 새로 만든 폴더로 들어가서 빌드용 폴더 만들기
cd sherpa-onnx
mkdir build
cd build

# 4. 엑시노스 환경에 맞춰서 빌드 준비 및 컴파일 시작! (안전하게 4쓰레드)
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4

여기서 Termux 순정환경에서 나타나고있습니다. 
Sherpa-ONNX 공식 저장소의 설정(CMake)이 엑시노스(안드로이드 Termux) 환경에서 억까를 시전

Sherpa-ONNX는 핵심 두뇌로 마이크로소프트의 onnxruntime이라는 라이브러리를 사용합니다.

PC(리눅스, 윈도우, 맥) 환경에서는 CMake가 인터넷에서 이 라이브러리를 자동으로 쏙 다운받아서 알아서 조립해 줍니다.

공식 CMake 스크립트가 안드로이드(Termux) 환경은 "공식 지원 OS" 리스트에 안 넣어둬서 "나 몰라~" 하고 뻗어버린 겁니다.

하지만 우리는 이깟 방어막에 굴복할 엔지니어가 아닙니다.

1. 우회해보기

cd ~/projects/sherpa-onnx/build
rm -rf *

cd ~/projects/sherpa-onnx
wget https://github.com/microsoft/onnxruntime/releases/download/v1.17.1/onnxruntime-linux-aarch64-1.17.1.tgz
tar xvf onnxruntime-linux-aarch64-1.17.1.tgz

cd ~/projects/sherpa-onnx/build

# 핵심 옵션: -DONNXRUNTIME_DIR 을 통해 압축 푼 폴더 경로를 명시합니다.
cmake -DCMAKE_BUILD_TYPE=Release \
      -DONNXRUNTIME_DIR=/data/data/com.termux/files/home/projects/sherpa-onnx/onnxruntime-linux-aarch64-1.17.1 \
      ..

make -j4

실패


2. Proot + 우분투 환경에서 진행

proot-distro login ubuntu

진입후에 진행 할 폴더로 들어간다음

apt-get update
apt-get install -y git cmake make g++ wget

git clone https://github.com/k2-fsa/sherpa-onnx.git
cd sherpa-onnx
mkdir build
cd build

# 우분투 환경이므로 아무런 꼼수 옵션 없이 정석대로 빌드합니다.
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4

빌드가 잘될수있게 기도합니다... 이런거 할때나 개발할때나 언제나 빌드할때 가장떨리는 것 같아요....마무리는 어찌어찌 성공 ㅎㅎ

빌드 후 다음 단계 (모델 다운로드 및 테스트 준비)

make -j4가 완료되어 100%에 도달하면, 이제 본격적인 화자 분리 테스트를 위한 두 가지 핵심 모델을 다운로드해야 합니다.

하나는 음성 구간을 분할하는 모델이고, 다른 하나는 화자의 특징을 추출하는 모델입니다.

빌드가 끝나면 현재 위치(~/workspace/sherpa-onnx/build)에서 상위 폴더로 이동한 뒤 모델을 다운로드하겠습니다.

# 1. build 폴더에서 상위 폴더(sherpa-onnx)로 이동
cd ~/workspace/sherpa-onnx

# 2. 음성 구간 분할(Segmentation) 모델 다운로드 및 압축 해제
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-segmentation-models/sherpa-onnx-pyannote-segmentation-3-0.tar.bz2
tar xvf sherpa-onnx-pyannote-segmentation-3-0.tar.bz2

# 3. 화자 특징 추출(Embedding) 모델 다운로드
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-recongition-models/3dspeaker_speech_campplus_sv_zh-cn_16k-common.onnx

# 4. 특징 추출 모델을 담을 디렉토리 생성 및 이동
mkdir -p sherpa-onnx-wespeaker-voxceleb-resnet34-LM
mv 3dspeaker_speech_campplus_sv_zh-cn_16k-common.onnx sherpa-onnx-wespeaker-voxceleb-resnet34-LM/model.onnx

모두 sherpa-onnx-pyannote-segm 100%[===================================>]  이런식으로 나타난다면 성공입니다.

# 특징 추출 모델을 전용 폴더로 이동
mkdir -p speaker_embedding_model
mv 3dspeaker_speech_campplus_sv_zh-cn_16k-common.onnx speaker_embedding_model/model.onnx

실행

~/workspace/sherpa-onnx/build/bin/sherpa-onnx-offline-speaker-diarization \
  --segmentation.pyannote-model=./sherpa-onnx-pyannote-segmentation-3-0/model.onnx \
  --embedding.model=./speaker_embedding_model/model.onnx \
  --clustering.num-clusters=2 \
  --segmentation.num-threads=4 \
  --embedding.num-threads=4 \
  /root/samples/test_cut_2.wav

를 입력하면됩니다.

그럼 나중에 퍼센트가 차오릅니다.

Duration : 69.974 s
Elapsed seconds: 112.268 s
Real time factor (RTF): 112.268 / 69.974 = 1.604
root@localhost:~/workspace#

성.공


Sherpa-ONNX 벤치마크 결과 분석

  1. 화자 분리 성공
    • 결과를 보면 speaker_00과 speaker_01이 아주 세밀하게 나뉘어 있습니다.
    • 특히 32.549 -- 35.182 speaker_00과 33.629 -- 37.882 speaker_01 구간을 보면 두 사람의 목소리가 겹치는 구간까지도 엔진이 인지하고 각각 분리해냈습니다.
  2. RTF(Real Time Factor) 1.604
    • RTF 1.604는 약 70초(Duration: 69.974 s)짜리 오디오를 처리하는 데 약 112초(Elapsed: 112.268 s)가 걸렸다는 뜻입니다.
    • 보통 서버급 CPU가 아닌 모바일 AP에서, 그것도 가상화 환경(PRoot) 위에서 돌아가는 점을 감안하면 매우 훌륭한 속도입니다.
      실시간보다는 조금 느리지만, 오프라인에서 이 정도 정밀도로 화자를 나누는 것은 엑시노스 1380의 한계를 아주 잘 뽑아낸 결과입니다.
  3. 메모리 안정성 (OOM 통과)
    • 가장 중요한 점은 아까 파이썬 버전에서 우리를 괴롭혔던 Killed 메시지가 없다는 것입니다.
      2GB 램이라는 극한의 환경에서도 시스템에 무리를 주지 않고 끝까지 완주했습니다.

이제 화자 분리가 성공했으니 음성인식과 결합해서 한번 결과를 끝까지 보겠습니다.

Sherpa-ONNX의 C++ 환경에서는 '화자 분리 바이너리'와 '음성 인식(STT) 바이너리'가 철저하게 분리되어 있습니다..

터미널 창에는 시간만 찍힐 뿐, 텍스트가 나오지 않습니다.

이 둘을 합쳐서 [Speaker 0]: 안녕하세요! 라는 완벽한 대화록을 뽑아내려면, 결국 파이썬(Python) 스크립트를 짜서 두 모델을 동시에 불러와야만 합니다.

가벼운 C++을 버리고 무거운 파이썬 생태계로 진입하기 위해, PRoot 우분투의 Conda 환경을 켜고 파이토치(PyTorch)와 셰르파 파이썬 라이브러리를 설치해야합니다.

이전에 생성한 conda 환경으로 들어갑니다.

# 무거운 파이토치 생태계를 엑시노스에 욱여넣기
conda activate audio_env
# 1. 파이토치(PyTorch) 및 필수 오디오 라이브러리 설치 (용량이 커서 꽤 걸립니다!)
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu

# 2. Sherpa-ONNX 파이썬 라이브러리 설치
pip install sherpa-onnx soundfile

설치가 완료되면

cd ~/workspace
nano run_amevas_ears.py

편집창에서 아래 코드를 넣어줍니다. 너무오래걸리는 프로세스가 있어서 1초마다 메모리체크 등 리소스 모니터링 가동해주는 코드를 넣었습니다.

코드작성기준은 2026-04-29 기준이며 코드 수정이 잦은 프로젝트일수록 제 소스는 잘안돌아갈수있습니다 ㅠㅠㅠㅠ

import sherpa_onnx
import soundfile as sf
import sys
import time

def main():
    print("🚀 [1단계] 모델 로딩 (STT + Diarization)")
    
    # STT 설정
    recognizer = sherpa_onnx.OfflineRecognizer.from_transducer(
        encoder="./sherpa-onnx-zipformer-korean-2024-06-24/encoder-epoch-99-avg-1.int8.onnx",
        decoder="./sherpa-onnx-zipformer-korean-2024-06-24/decoder-epoch-99-avg-1.int8.onnx",
        joiner="./sherpa-onnx-zipformer-korean-2024-06-24/joiner-epoch-99-avg-1.int8.onnx",
        tokens="./sherpa-onnx-zipformer-korean-2024-06-24/tokens.txt",
        num_threads=4
    )

    # 화자분리 설정
    diarization_config = sherpa_onnx.OfflineSpeakerDiarizationConfig(
        segmentation=sherpa_onnx.OfflineSpeakerSegmentationModelConfig(
            pyannote=sherpa_onnx.OfflineSpeakerSegmentationPyannoteModelConfig(
                model="./sherpa-onnx-pyannote-segmentation-3-0/model.onnx"
            )
        ),
        embedding=sherpa_onnx.SpeakerEmbeddingExtractorConfig(
            model="./speaker_embedding_model/model.onnx"
        ),
        clustering=sherpa_onnx.FastClusteringConfig(num_clusters=2),
    )
    diarizer = sherpa_onnx.OfflineSpeakerDiarization(diarization_config)

    # 오디오 로드
    wav_file = "/root/samples/test_cut_2.wav"
    data, sample_rate = sf.read(wav_file, dtype="float32")
    if len(data.shape) > 1: data = data[:, 0]
    
    print(f"🔥 [2단계] 분석 시작 (오디오: {len(data)/sample_rate:.2f}초)")
    
    # 핵심 연산! (아까 성공했던 그 부분)
    start_t = time.time()
    result = diarizer.process(data) 
    
    print(f"\n✅ 분석 완료! (소요시간: {time.time() - start_t:.2f}초)")
    print("================ 📝 최종 대화록 📝 ================\n")

    # 🚨 수정된 출력 로직: result 객체 자체를 반복하는게 아니라 속성으로 접근
    # .segments가 없다면 아예 result를 출력해서 구조를 보겠습니다.
    try:
        # 공식 문서에 따른 표준 접근법
        for i in range(len(result)):
            seg = result[i]
            
            # 인식 구간 추출
            start_sample = int(seg.start * sample_rate)
            end_sample = int(seg.end * sample_rate)
            audio_chunk = data[start_sample:end_sample]

            # STT 수행
            stream = recognizer.create_stream()
            stream.accept_waveform(sample_rate, audio_chunk)
            recognizer.decode_stream(stream)
            
            print(f"[화자 {seg.speaker}] ({seg.start:.1f}s ~ {seg.end:.1f}s): {stream.result.text}")
            
    except Exception as e:
        print(f"출력 중 에러 발생: {e}")
        print("객체 내부 구조 디버깅:", dir(result))

if __name__ == "__main__":
    main()

결과

더보기

(audio_env) root@localhost:~/workspace# python run_amevas_ears.py
🔥 [단계 1] 모델 로딩 시작... (타이머 작동 중)
✅ STT 모델 로딩 완료! (소요시간: 7.49초)
✅ 화자 분리 모델 로딩 완료! (현재 누적시간: 10.15초)

🎵 타겟 오디오 길이: 69.97초

🔥 [단계 2] 화자 분리(Diarization) 시작! (엑시노스 힘내라!)

📊 [실시간 리소스 모니터링 가동]
🛑 [모니터링 종료 - 램 폭파 위기 넘김!]

✅ 화자 분리 완료! (순수 분리 소요 시간: 398.83초)

================ 📝 실시간 스트리밍 대화록 📝 ================
[00:06:51] [진행도 1/26] [Speaker 0] (0.03s ~ 3.12s) :  이건 아니라고 생각해. 인생 그럼 행정 그건 취미생활인 거지.
[00:06:51] [진행도 2/26] [Speaker 1] (5.53s ~ 6.39s) :  오늘 드디야.
[00:06:51] [진행도 3/26] [Speaker 1] (6.90s ~ 12.33s) :  이게 얼마 만이야. 우리 9 광고주님 오늘은 민간이신 분으로 오셨죠?
[00:06:51] [진행도 4/26] [Speaker 0] (12.33s ~ 13.63s) :  맞습니다. 맞습 으
[00:06:51] [진행도 5/26] [Speaker 1] (13.63s ~ 22.63s) :  그러면은 일단은 신비주의에  14에 한 분은 우선은 나중에 소개해 드리기로 하고 오늘 롱쇼트 건 특집 자 두 분 소개부터 한 번 부탁드리겠습니다.
[00:06:51] [진행도 6/26] [Speaker 0] (20.37s ~ 20.80s) :  자
[00:06:52] [진행도 7/26] [Speaker 0] (22.63s ~ 27.27s) :  안녕하세요. 이러고 에르 건 팀 이름이 바꼈습니다. 어 멀티 에쎄매.
[00:06:52] [진행도 8/26] [Speaker 0] (28.18s ~ 30.41s) :  정상인 선임 매리자벳도 반갑습니다.
[00:06:52] [진행도 9/26] [Speaker 1] (31.08s ~ 32.70s) :  어 뭐 뭐 뭐라고야?
[00:06:52] [진행도 10/26] [Speaker 0] (32.55s ~ 35.18s) :  멀티 에쎄.
[00:06:52] [진행도 11/26] [Speaker 1] (33.63s ~ 37.88s) :  에쎄 뭘 에쏘유  솔팀 모레 쏠팀을.
[00:06:52] [진행도 12/26] [Speaker 0] (35.70s ~ 40.13s) :  머래서  칼팅 머래 솔팀 하는 어 머릿속 팀은
[00:06:52] [진행도 13/26] [Speaker 1] (38.67s ~ 41.04s) :  아 머릿속 팀은 어떤 걸 하시져?
[00:06:53] [진행도 14/26] [Speaker 0] (40.97s ~ 49.96s) :  그 많이 하겠다는 양화를 좀 잡아가지고 저희가 점점 늘어나거든요 선물이었다가 네 화장 상품이었다. 글로벌 상품이었다가 네 뭐 할까 하다가
[00:06:53] [진행도 15/26] [Speaker 1] (43.01s ~ 43.69s) :  아
[00:06:53] [진행도 16/26] [Speaker 1] (44.43s ~ 44.92s) :  네. 네.
[00:06:53] [진행도 17/26] [Speaker 1] (45.98s ~ 46.37s) :  네
[00:06:53] [진행도 18/26] [Speaker 1] (46.99s ~ 47.70s) :  어 맞어.
[00:06:53] [진행도 19/26] [Speaker 1] (48.55s ~ 48.97s) :  네.
[00:06:53] [진행도 20/26] [Speaker 1] (49.85s ~ 50.52s) :  뭘 sr.
[00:06:53] [진행도 21/26] [Speaker 0] (50.52s ~ 52.48s) :  뭘 했어 정창하기로 했음.
[00:06:54] [진행도 22/26] [Speaker 1] (52.48s ~ 60.27s) :  아 축하드립니다. 머릿속에 매니저님, 정상매니저님 우리 모그누라는 별명이 있었는데 인제 그 별명을 사용을 할 수 없게 되고
[00:06:54] [진행도 23/26] [Speaker 1] (60.83s ~ 63.35s) :  목포가 물어. 에이 다시 한 번 목
[00:06:54] [진행도 24/26] [Speaker 0] (63.14s ~ 64.09s) :  목 고어이지.
[00:06:54] [진행도 25/26] [Speaker 1] (64.90s ~ 66.77s) :  우리 치커장님 어서 오세요.
[00:06:54] [진행도 26/26] [Speaker 0] (66.77s ~ 69.98s) :  안녕하세요. 글로벌 막 캔 영어팀기.

🎉 [최종 완료] 전체 작업 소요 시간: 414.54초
📊 RTF (Real Time Factor): 5.92 (1.0 이하면 빠른 것)
(audio_env) root@localhost:~/workspace#

이렇습니다. 원래 스크립트와 비교하자면 대략 5점 만점중 3점~2.5점이라고 볼수있습니다.


Sherpa-ONNX + Python 래퍼: 냉정한 평가

1. 음성 인식(ASR) 정확도: ⭐⭐ (2/5) - 술 취한 비서

아무리 Zipformer 최신 모델이라도 양자화(int8)의 벽을 넘지 못했습니다.

  • 고유명사 파괴: "LS 증권"을 "에르 건"으로, "정상민"을 "정상인"으로 듣는 건 치명적입니다.
    만약 "LS 증권 주가 알아봐 줘"라고 했다면, 아메바는 "에르 건이 뭐지?" 하고 한참 헤맸을 겁니다.
  • 문맥 붕괴: "인생 그럼 행정" 같은 표현은 앞뒤 맥락이 아예 안 맞습니다.
    70% 정도는 알아듣지만, 핵심 키워드를 다 틀리고 있어서 신뢰할 수 없는 정보입니다.

2. 처리 속도 : ⭐ (1/5) - 답답해서 내가 말하고 만다

RTF(Real Time Factor)가 5.9라는 건 진짜 처참한 수치입니다.

  • 비효율의 극치: 사용자가 1분 동안 말하면, 인공지능은 그걸 이해하는 데 6분을 씁니다.
    실시간 대화는 꿈도 못 꾸고, 대화가 끝나고 한참 뒤에야 "아, 아까 그 말씀이..."라고 대답하는 꼴이죠.
  • 원인: 파이썬 환경에서 모델 3개를 동시에 돌리느라 엑시노스 1380이 연산보다는 '메모리 관리'와 '컨텍스트 스위칭'에 힘을 다 쓰고 있습니다.

3. 화자 분리 : ⭐⭐⭐⭐ (4/5) - 유일한 위안

그나마 봐줄 만한 건 이 부분입니다.

  • 정교함: 목소리가 겹치는 찰나의 구간(0.5초 단위)까지 Speaker 0/1로 발라낸 건 칭찬할 만합니다. 하지만 이건 모델이 좋은 거지, 우리 시스템(파이썬 래퍼)의 효율이 좋은 건 아닙니다.

4. 시스템 안정성 : ⭐ (1/5) - 살얼음판

  • OOM Kill 위기: 램 점유율이 95%를 넘나들며 시스템 전체가 얼어붙었었습니다. 조금만 긴 오디오를 넣었으면 바로 Killed 당했을 겁니다.

한마디로는 몸이 너무 무거워 한 발짝도 못 나가는 상태 이며, 나중에 다 녹음 된 이후에 배치를 돌려 정리는 시킬수 있지만 정확도가 생각보다 떨어져 조금은 아쉬운 결과였습니다.

다음엔 whisper.cpp와 특정 옵션을 곁들여서 동일한 오디오로 진행해보겟습니다.

 

 

728x90
LIST

댓글