오픈 소스 AI로 실시간 음성 번역기를 구축하는 방법

이 가이드를 따라 나만의 음성 번역기 에이전트를 만드세요!

2025-05-06

Why managing AI risk presents new challenges

Aliquet morbi justo auctor cursus auctor aliquam. Neque elit blandit et quis tortor vel ut lectus morbi. Amet mus nunc rhoncus sit sagittis pellentesque eleifend lobortis commodo vestibulum hendrerit proin varius lorem ultrices quam velit sed consequat duis. Lectus condimentum maecenas adipiscing massa neque erat porttitor in adipiscing aliquam auctor aliquam eu phasellus egestas lectus hendrerit sit malesuada tincidunt quisque volutpat aliquet vitae lorem odio feugiat lectus sem purus.

  • Lorem ipsum dolor sit amet consectetur lobortis pellentesque sit ullamcorpe.
  • Mauris aliquet faucibus iaculis vitae ullamco consectetur praesent luctus.
  • Posuere enim mi pharetra neque proin condimentum maecenas adipiscing.
  • Posuere enim mi pharetra neque proin nibh dolor amet vitae feugiat.

The difficult of using AI to improve risk management

Viverra mi ut nulla eu mattis in purus. Habitant donec mauris id consectetur. Tempus consequat ornare dui tortor feugiat cursus. Pellentesque massa molestie phasellus enim lobortis pellentesque sit ullamcorper purus. Elementum ante nunc quam pulvinar. Volutpat nibh dolor amet vitae feugiat varius augue justo elit. Vitae amet curabitur in sagittis arcu montes tortor. In enim pulvinar pharetra sagittis fermentum. Ultricies non eu faucibus praesent tristique dolor tellus bibendum. Cursus bibendum nunc enim.

Id suspendisse massa mauris amet volutpat adipiscing odio eu pellentesque tristique nisi.

How to bring AI into managing risk

Mattis quisque amet pharetra nisl congue nulla orci. Nibh commodo maecenas adipiscing adipiscing. Blandit ut odio urna arcu quam eleifend donec neque. Augue nisl arcu malesuada interdum risus lectus sed. Pulvinar aliquam morbi arcu commodo. Accumsan elementum elit vitae pellentesque sit. Nibh elementum morbi feugiat amet aliquet. Ultrices duis lobortis mauris nibh pellentesque mattis est maecenas. Tellus pellentesque vivamus massa purus arcu sagittis. Viverra consectetur praesent luctus faucibus phasellus integer fermentum mattis donec.

Pros and cons of using AI to manage risks

Commodo velit viverra neque aliquet tincidunt feugiat. Amet proin cras pharetra mauris leo. In vitae mattis sit fermentum. Maecenas nullam egestas lorem tincidunt eleifend est felis tincidunt. Etiam dictum consectetur blandit tortor vitae. Eget integer tortor in mattis velit ante purus ante.

  1. Vestibulum faucibus semper vitae imperdiet at eget sed diam ullamcorper vulputate.
  2. Quam mi proin libero morbi viverra ultrices odio sem felis mattis etiam faucibus morbi.
  3. Tincidunt ac eu aliquet turpis amet morbi at hendrerit donec pharetra tellus vel nec.
  4. Sollicitudin egestas sit bibendum malesuada pulvinar sit aliquet turpis lacus ultricies.
“Lacus donec arcu amet diam vestibulum nunc nulla malesuada velit curabitur mauris tempus nunc curabitur dignig pharetra metus consequat.”
Benefits and opportunities for risk managers applying AI

Commodo velit viverra neque aliquet tincidunt feugiat. Amet proin cras pharetra mauris leo. In vitae mattis sit fermentum. Maecenas nullam egestas lorem tincidunt eleifend est felis tincidunt. Etiam dictum consectetur blandit tortor vitae. Eget integer tortor in mattis velit ante purus ante.

오픈 소스 AI로 실시간 음성 번역기를 구축하는 방법

GMI Cloud의 소프트웨어 엔지니어 그레이스 덩이 (Grace Deng) 의 ODSC 웨비나를 기반으로 함

시청할 수 있습니다 원본 웨비나 녹화는 여기!

소개

영어로 “안녕하세요”라고 말하고 그 말을 중국어로 즉시, 자연스럽게, 개성 있게 들었다고 상상해 보세요.이것이 바로 실시간 음성 번역이 할 수 있는 일이며, 이제 오픈 소스 도구와 확장 가능한 인프라를 통해 누구나 이를 구축할 수 있습니다.

최근 열린 ODSC 웨비나에서 GMI Cloud의 소프트웨어 엔지니어 그레이스 덩 (Grace Deng) 은 한 시간도 채 안 되는 시간에 음성-음성 번역기 구축 과정을 안내했습니다.이 가이드에서는 사용된 주요 단계와 오픈 소스 도구를 자세히 설명하므로 몇 분 만에 따라하고 직접 배포할 수 있습니다.

무엇을 만들 것인가

다음과 같은 기능을 갖춘 실시간 음성 번역기를 만들게 됩니다.

  • 🎤 마이크를 통한 실시간 음성 입력
  • 📝 위스퍼를 이용한 자동 영어 음성 녹음
  • 🌐 LaMa 3를 사용하여 영어 텍스트를 중국어로 번역
  • 🔊 XTTS를 사용한 중국어 텍스트 음성 변환 생성
  • 🚀 브라우저 기반 상호 작용을 위해 Gradio와 함께 배포

사용 사례:

  • 여행 도우미
  • 접근성 지원
  • 실시간 회의 번역

사용할 도구

코어 AI 모델

  • 위스퍼 (ASR): 음성을 텍스트로 변환

  • 라마-3 (LM): 영어에서 중국어로 텍스트 번역

  • 코키 XTTS v2 (TTS): 다국어 출력을 지원하는 음성 합성

서포트 스택

  • 트랜스포머: ASR 및 LLM을 위한 허깅페이스 파이프라인
  • 쿠다: ASR/TTS 가속을 위한 멀티 GPU 지원
  • 그라디오: 실시간 브라우저 상호 작용을 위한 빠른 UI
  • GMI 클라우드 API: 대규모 모델 추론을 위한 호스팅된 엔드포인트

단계별 가이드

📁 프로젝트 구조

voice_translator/
├── translator.py             # Main app script
├── audio.wav                 # Output audio file
├── requirements.txt          # Dependencies
└── README.md                 # Project documentation

1.환경 설정하기

파이썬 환경 (Conda 또는 venv) 을 만들고, requirements.txt 파일에 종속성을 추가하고, 다음을 설치합니다.

pip install -r requirements.txt

2.종속성 가져오기

다음은 가져온 종속성 목록과 이를 원하는 이유입니다.

  • gradio: 웹 기반 사용자 인터페이스를 구축하기 위한 것입니다.
  • os: 파일 시스템과의 상호 작용에 사용됩니다.
  • 토치: ML 모델을 실행하기 위한 핵심 파이토치 라이브러리입니다.
  • 귓속말: 음성을 텍스트로 변환하기 위한 OpenAI의 ASR 모델.
  • TTS.api.tts: 텍스트를 음성으로 변환하는 데 사용되는 Coqui-AI/TTS 라이브러리의 TTS 엔진입니다.
  • 요청: HTTP 요청 (예: 리소스 다운로드) 에 사용됩니다.
  • 트랜스포머: 사전 학습된 모델을 사용하기 위한 HuggingFace 라이브러리 (예: 번역용).
  • numpy: 범용 수치 컴퓨팅.
  • librosa: 오디오 처리 및 특징 추출.
import gradio as gr
import os
import torch
import whisper as whisper_ai 
from TTS.api import TTS
import requests
import transformers
import numpy
import librosa 

3.GPU 디바이스 준비하기

이 섹션에서는 다음을 실행하기 위한 하드웨어 설정을 준비합니다. 음성-음성 번역기 두 가지 주요 작업에 GPU 장치를 할당함으로써:

  • 위스퍼 ASR (자동 음성 인식) — 음성 언어를 텍스트로 변환
  • 텍스트를 음성으로 변환 (TTS) — 번역된 텍스트를 음성 오디오로 다시 합성합니다.

최적의 성능을 위해 각 작업을 별도의 GPU (사용 가능한 경우) 에서 실행하는 것을 목표로 합니다.

✅ 팁: Whisper 및 TTS와 같은 딥 러닝 모델을 사용할 때 워크로드를 여러 GPU에 분산하면 런타임 성능이 크게 향상되고 지연 시간이 줄어들 수 있습니다.디바이스에 적합한 방식으로 워크로드를 자유롭게 분산할 수 있습니다.여기서는 마지막 GPU 두 개를 사용합니다.

num_gpus = torch.cuda.device_count()
if num_gpus >= 2:
    device_whisper = f"cuda:{num_gpus - 2}"
    device_tts = f"cuda:{num_gpus - 1}"
elif num_gpus == 1:
    device_whisper = device_tts = "cuda:0"
else:
    device_whisper = device_tts = "cpu"

print(f"Using {device_whisper} for Whisper ASR")
print(f"Using {device_tts} for Mozilla TTS")

4.위스퍼 ASR: 음성을 텍스트로

이 섹션에서는 OpenAI를 사용하여 자동 음성 인식 (ASR) 구성 요소를 준비합니다. 위스퍼 라지 V3 허깅 페이스 트랜스포머로 구동되는 모델.

  • 🔁 파이프라인: Whisper ASR 모델 및 프로세서는 파이프라인에 포함되어 있어 오디오를 청크 단위로 처리 (일괄 처리당 최대 30초) 하여 보다 효율적으로 처리할 수 있습니다.
  • 🎧 오디오 전처리: 오디오를 ASR 모델에 공급하기 전에 오디오가 올바른 형식인지 확인해야 합니다.다음 함수는 오디오를 16kHz로 리샘플링하고 (아직 그렇지 않은 경우), 스테레오인 경우 모노로 변환하고, 처리에 적합한 데이터 유형인지 확인합니다.
  • 📝 오디오 스크립트 작성: 이 함수는 오디오를 입력으로 받아 전처리한 다음 Whisper ASR 파이프라인을 통해 전달하여 트랜스크립션을 생성합니다.오디오는 먼저 리샘플링 및 변환된 후 정규화되고 마지막으로 트랜스크립션을 위해 모델로 전송됩니다.
torch_dtype = torch.float32
model_id = "openai/whisper-large-v3"

transcribe_model = transformers.AutoModelForSpeechSeq2Seq.from_pretrained(
    model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, use_safetensors=True
)
transcribe_model.to(device_whisper)

processor = transformers.AutoProcessor.from_pretrained(model_id)

pipe0 = transformers.pipeline(
    "automatic-speech-recognition",
    model=transcribe_model,
    tokenizer=processor.tokenizer,
    feature_extractor=processor.feature_extractor,
    max_new_tokens=128,
    chunk_length_s=30,
    batch_size=16,
    return_timestamps=True,
    torch_dtype=torch_dtype,
    device=device_whisper,
)

def preprocess_audio(audio):
    if audio.dtype != numpy.float32:
        audio = audio.astype(numpy.float32)
    sr = 16000
    y = librosa.resample(audio, orig_sr=sr, target_sr=sr)
    if len(y.shape) > 1:
        y = librosa.to_mono(y)
    return y

def transcribe_audio(audio) -> str:
    sr, y = audio
    y = preprocess_audio(y)
    y = y.astype(numpy.float32)
    y /= numpy.max(numpy.abs(y))
    output_text = pipe0(y, generate_kwargs={"language": "english","temperature": 0.5, "top_p": 0.9,})["text"]
    print(output_text)
    return output_text

5.라마-3으로 번역하기

이 단계에서는 다음을 소개하여 전사와 음성 합성 간의 격차를 해소합니다. 텍스트 번역.

🔁 Llama-3 API를 사용하여 텍스트 번역하기

영어 스크립트를 중국어로 번역하기 위해 REST API (https://api.gmi-serving.com/v1/chat/completions) 를 통해 호스팅된 Llama-3 모델을 사용합니다.이 함수는 API 호출을 Python으로 래핑하고 적절한 헤더 및 페이로드가 포함된 POST 요청을 사용합니다.

  • 인증 헤더에는 베어러 토큰 (API 키) 이 포함됩니다.
  • 요청 페이로드는 다음을 지정합니다.
    • 모델명 (메타라마/라마-3.3-70B-인스트럭트)
    • 모델이 영어에서 중국어로 번역을 수행하고 번역만 반환하도록 지시하는 시스템 메시지입니다.
    • 입력 텍스트가 포함된 사용자 메시지입니다.
    • 결정적 출력의 경우 온도 (0), 토큰 제한은 500입니다.

응답은 JSON으로 파싱됩니다.응답이 유효하고 성공하면 (status_code == 200), 함수는 번역된 메시지를 추출하여 반환합니다.그렇지 않으면 오류를 정상적으로 처리하고 유용한 디버깅 정보를 기록합니다.

✅ 이제 영어 오디오를 변환하고 중국어로 번역하면 중국어 오디오 출력을 생성할 수 있습니다.

def translate_text(text):
    url = "https://api.gmi-serving.com/v1/chat/completions"
    headers = {
        "Content-Type": "application/json",
        "Authorization": "<GMI_API_KEY>"
    }
    payload = {
        "model": "meta-llama/Llama-3.3-70B-Instruct",
        "messages": [
            {"role": "system", "content": "Translate the following English text into Chinese. Include the translation and nothing else."},
            {"role": "user", "content": text}
        ],
        "temperature": 0,
        "max_tokens": 500
    }
    response = requests.post(url, headers=headers, json=payload, verify=False)
    if response.status_code == 200:
        try:
            data = response.json()
            translated_text = data['choices'][0]['message']['content']
        except ValueError as e:
            print("Failed to parse JSON:", e)
        return translated_text
    else:
        print("Error with the request:", response.status_code, response.text)
    return "No translation provided"

6.코키 XTTS: 텍스트 투 스피치

이 섹션에서는 번역된 텍스트에서 오디오를 생성하고 모든 구성 요소를 단일 함수로 연결하여 음성-음성 번역 파이프라인을 완성합니다.

🔁 TTS 모델 불러오기

Coqui TTS의 다국어 TTS 모델 xtts_v2가 로드되어 지정된 TTS 장치 (device_tts) 로 이동되므로 가능한 경우 GPU를 사용하여 빠르게 추론할 수 있습니다.

🎙️ 번역된 텍스트를 음성으로 변환

번역된 텍스트를 받아 음성 오디오 파일을 생성하는 text_to_speech 함수를 정의합니다.

  • 출력 오디오는 "audio.wav “로 저장됩니다.
  • 이 함수는 사전 정의된 스피커 음성 “Ana Florence”를 사용하며 출력 언어는 “zh-cn" (중국어) 으로 설정됩니다.
  • Coqui TTS의 tts_to_file () 은 합성을 처리하고 오디오를 디스크에 씁니다.
tts_model = TTS("tts_models/multilingual/multi-dataset/xtts_v2")
tts_model.to(device_tts)

def text_to_speech(text):
    output_path = "audio.wav"
    tts_model.tts_to_file(text=text, file_path=output_path, speaker="Ana Florence", language="zh-cn")
    return output_path

7.모두 정리하세요

🔄 엔드-투-엔드 음성 번역 파이프라인

voice_to_voice () 함수는 모든 단계를 통합합니다.

  1. 입력: 원시 오디오 클립 (사용자 음성) 을 수신합니다.
  2. 확인: 오디오가 제공되지 않은 경우 None을 반환합니다.
  3. 스크립트 작성: Whisper를 사용하여 오디오를 영어 텍스트로 변환합니다.
  4. 번역: LlaMa를 사용하여 영어 텍스트를 중국어로 번역합니다.
  5. 합성: 번역된 텍스트에서 중국어 음성 오디오 클립을 생성합니다.

마지막으로 생성된 오디오 파일의 경로를 반환합니다.

✅ 이제 완전히 작동하는 음성-음성 번역기가 있습니다. 영어 오디오 입력 → 중국어 오디오 출력!

def voice_to_voice(audio):
    if audio is None:  
        return gr.Audio(value=None)  
    output_audio = text_to_speech(translate_text(transcribe_audio(audio)))
    return output_audio

8.그라디오와 함께 시작하세요

이 마지막 단계에서는 다음을 사용하여 음성-음성 번역 파이프라인을 사용자 친화적인 인터페이스로 마무리합니다. 그라디오.

🛠️ 그라디오 인터페이스 정의하기

다음을 처리하기 위해 gr.Interface 인스턴스를 만듭니다.

  • 입력: 사용자 마이크의 실시간 오디오 (gr.Audio (소스="마이크”)).
  • 출력: 중국어로 오디오가 생성되고 재생을 위해 마이크 스타일의 오디오 위젯으로도 렌더링됩니다.
  • 기능: 앞서 정의한 voice_to_voice () 함수가 핵심 처리 파이프라인으로 사용됩니다.
  • 메타데이터:
    • 타이틀: “음성-음성 번역기”
    • 설명: 시스템 동작에 대한 단계별 요약을 제공합니다.
    • 라이브 모드: 실시간 오디오 스트리밍을 지원하도록 활성화되었습니다 (Live=True).

🚀 앱 실행

마지막으로 share=True를 사용하여.launch () 를 호출하여 다음을 수행합니다.

  • 앱의 로컬 서버를 시작합니다.
  • 공개 URL을 생성하여 온라인에서 다른 사람들과 데모를 공유하여 음성-음성 번역기를 테스트하거나 선보일 수 있습니다.
# --- Gradio UI ---
demo = gr.Interface(
    fn=voice_to_voice,
    inputs=gr.Audio(sources="microphone"),
    outputs=gr.Audio(sources=["microphone"]),
    title="Voice-to-Voice Translator",
    description="🎤 Speak in English → 📝 Get Chinese text → 🔊 Listen to Chinese speech.",
    live=True
)

demo.launch(share=True)

그레이스의 프로 팁

  • 지연 시간을 줄이기 위해 별도의 GPU에서 ASR 및 TTS를 실행합니다.
  • 깨끗한 16kHz 오디오 입력을 사용하여 위스퍼 정확도를 개선하세요.
  • 번역 정확도를 위한 온도 및 프롬프트 조정
  • 맞춤형 스피커 또는 접근성 튜닝에 Coqui 음성 복제 사용

리소스

제한 없는 AI 구축

GMI Cloud는 AI 프로젝트를 빠르게 시작할 수 있도록 도와드립니다.GPU를 지원하는 API와 호스팅된 엔드포인트를 사용하면 실험을 위해 인프라를 고민할 필요가 없습니다.

가입하기 GMI 디스코드 커뮤니티 다른 빌더와 소통하고 창작물을 공유할 수 있습니다.

오늘 시작하세요

GMI Cloud를 사용해 보고 AI 요구 사항에 적합한지 직접 확인해 보세요.

시작해 보세요
14일 평가판
장기 커밋 없음
설정 필요 없음
온디맨드 GPU

에서 시작

GPU 시간당 4.39달러

GPU 시간당 4.39달러
프라이빗 클라우드

최저

GPU-시간당 2.50달러

GPU-시간당 2.50달러