1. 기술 개요 및 작동 원리
DeEAR 는 음향 신호의 미세한 뉘앙스를 감지하여 인간과 기기의 상호작용을 더 정교하게 만드는 도구입니다. 이는 wav2vec2 기반의 딥러닝 모델을 적용하여 청각 데이터의 특성을 학습했습니다.
시스템이 추출하는 핵심 지표는 다음과 같습니다:
- Arousal(각성도): 화자의 흥분 정도 또는 침착함 여부 평가
- Nature(자연스러움): 구어의 자연스러운 발음 패턴 분석
- Prosody(운율): 말하는 속도와 리듬 변화 측정
본 가이드에서는 배포 설정부터 인터페이스 사용, 프로그램화된 API 처리까지 전 과정을 다룹니다.
2. 시스템 구성 요건
안정적인 성능 관리를 위해 아래 하드웨어 및 소프트웨어 조건을 확인하십시오.
- OS: Ubuntu 20.04 이상의 리눅스 배포판 권장
- Runtime: Python 3.11 이상 환경
- Memory: 최소 8GB RAM 확보 필요
- Compute: CUDA 호환 GPU 설치 시 추론 속도 개선 가능
3. 서비스 시작 및 진입
3.1 실행 스크립트 호출
주요 로직을 수행하려면 메인 스크립트를 실행해야 합니다. 루트 디렉터리의 스크립트를 사용하는 것이 권장됩니다.
/root/DeEAR_Base/start.sh
대체 방법으로 직접 애플리케이션 파일을 실행할 수도 있습니다.
python /root/DeEAR_Base/app.py
구성이 완료되면 브라우저용 링크가 출력되는데, 예시는 다음과 같습니다:
Running on local URL: http://localhost:7860
4. 웹 인터페이스 활용법
4.1 접속 경로 설정
로컬 머신에서 테스트하거나 원격 서버에 접근할 수 있습니다:
- Local:
http://127.0.0.1:7860 - Remote:
http://{SERVER_IP}:7860
4.2 주요 기능 영역
메인 화면은 세 가지 핵심 모듈로 나뉩니다:
- 입력 섹션: 로컬 저장소로부터 오디오 데이터를 업로드합니다. .wav 또는 .mp3 포맷이 지원되며 길이는 최대 30 초까지 제한됩니다.
- 미세 조정 옵션: 마이크 아이콘을 눌러 실시간 녹음이 가능합니다. 종료 시 즉시 처리됩니다.
- 출력 패널: 분석된 파라미터는 표 형태로 정리되며, 각 항목별 점수 (Score) 와 라벨 (Label) 이 표시됩니다. 시각화를 위한 차트 또한 제공합니다.
4.3 실제 적용 사례
고객 센터 녹음 데이터를 분석해 보겠습니다. 파일을 선택하고 처리 대기 후 다음 결과를 확인할 수 있습니다:
| 속성 | 값 | 판단 |
|---|---|---|
| Arousal | 0.72 | High |
| Nature | 0.85 | Natural |
| Prosody | 0.68 | Rhythmic |
이 수치들은 대응 직원의 긍정적 태도와 명료한 의사 전달 능력을 시사합니다.
5. 프로그래밍 인터페이스 (API)
대규모 배치 작업을 위해서는 클라이언트 라이브러리를 통한 HTTP 통신이 효율적입니다.
5.1 엔드포인트 정보
- URI:
http://{SERVER_URL}:7860/api/predict - Method: POST
- Payload: Multipart Form Data
5.2 클라이언트 코드 작성
requests 라이브러리를 사용하여 요청을 전송하고 응답을 파싱합니다.
import requests
from pathlib import Path
def send_analysis_request(file_path: str) -> dict:
url = "http://localhost:7860/api/predict"
# 바이너리 파일 읽기
with open(file_path, 'rb') as f:
files = {"file": f}
try:
resp = requests.post(url, files=files, timeout=30)
resp.raise_for_status()
return resp.json()
except Exception as e:
print(f"Error occurred: {e}")
return {}
# 호출 예시
result_data = send_analysis_request("test_audio.wav")
print(result_data)
5.3 응답 객체 해석
서버에서 반환되는 JSON 형식은 구조화된 데이터를 포함합니다:
{
"arousal": {"score": 0.72, "label": "high"},
"nature": {"score": 0.85, "label": "natural"},
"prosody": {"score": 0.68, "label": "rhythmic"}
}
5.4 대량 처리 확장
여러 파일을 자동화하려면 디렉토리 내 모든 파일을 순회하며 제출하는 로직을 사용합니다.
import glob
directory_path = "./datasets/"
paths = glob.glob(f"{directory_path}*.wav")
for audio_file in paths:
# 각 파일 분석 로직 호출
output = send_analysis_request(audio_file)
# 결과 저장은 별도 모듈 관리
6. 결과 데이터 관리 및 통계
분석된 값은 외부 시스템으로 가져와야 합니다. Gradio 상단 메뉴의 내보내기 기능을 통해 CSV 또는 JSON 포맷을 받을 수 있습니다.
6.1 Python 을 통한 데이터 가공
데이터프레임 생성 및 저장을 위해 pandas 를 활용하세요.
import pandas as pd
collected_records = []
# ... (API 호출 과정 생략) ...
collect_data.append(response_json)
analysis_df = pd.DataFrame(collected_records)
analysis_df.to_csv("analysis_log.csv", index=False)
6.2 분포 시각화
수집된 데이터셋에서 특정 변량의 빈도를 그래프로 확인합니다.
import matplotlib.pyplot as plt
chart_df = pd.read_csv("analysis_log.csv")
chart_df["arousal_label"].value_counts().plot.bar(color='steelblue')
plt.title("각성도 별 분류 개수")
plt.xlabel("Category")
plt.ylabel("Count")
plt.show()
7. 기술적 제약 사항 및 최적화
7.1 오디오 길이 제한
추론 정확도와 반응 속도의 균형을 위해 30 초 이상의 입력은 자동으로 단축되거나 거부될 수 있습니다. 긴 세그먼트를 처리할 때는 사전에 분할(pre-split) 하십시오.
7.2 처리 성능 향상
서버 부하가 높은 경우 다음 전략을 고려하십시오:
- 비디오 카드로 가속化处理 가능한 경우 CUDA 환경 활성화
- 처리할 오디오 구간을 10~15 초 범위로 축소
- 멀티 프로세스 병렬 처리 시 동시성 유지 (권장 4 스레드 이내)
7.3 데이터 품질 관리
오류율을 줄이기 위해 녹음 환경을 점검해야 합니다.
- 배경 소음을 최소화한 무음 공간 사용
- 마이크와 화자 간 거리 유지 (최적 범위 20~50cm)
- 음악이나 추가 사운드 제거