본문 바로가기

AI

DeepL 번역 API 써보기 - RAPID API 허브를 통하면 가능

----------------------------------------------------------------------------------------------------------------------

 2023.08.16.부터 DeepL이 대한민국도 공식 지원을 하고 있습니다. DeepL API Free 개발자 등록을 하면 월 50만자까지 무료로 이용이 가능합니다. 

 

DeepL Python Library도 제공하고 있으므로 어렵지 않게 구현이 가능하게 되었네요.~ subtitle-extractor에서는 DeepL API 파일 번역을 이용한 자동 번역을 추가했습니다. => 파일번역 방식은 횟수 제한이 있어서 사용하지 않는 것이 좋겠습니다. 대신 글자 단위 DeepL API 번역을 지원하는 subtitle-xtranslator.py 를 이용해 주시기 바랍니다. 

 

API 사용법은 워낙 간단하여 따로 글을 쓰지 않을 예정입니다. 

----------------------------------------------------------------------------------------------------------------------

 

DeepL의 번역은 자연스럽기로 유명합니다. 물론 완벽하지는 않지만, 현존하는 번역기 중 가장 우수하다는 것은 다들 인정하는 것 같습니다. 

 

현재 3천 글자를 클립보드로 복사해서 번역한다든지, 문서(docx, pdf 등) 번역 등을 무료로 쓸 수 있기는 하지만 API를 통해 자동으로 번역하는 것은 우리 나라에 제공하지 않고 있습니다. 아시아에서는 싱가포르와 일본에서 서비스 중입니다. 

 

우연히 각종 API의 허브인 곳에서 서비스한다고 해서 신청해서 테스트해 보았습니다. 아마 개별 각 서비스 제공사가 API를 함께 제공하는 모양입니다. 

 

https://rapidapi.com/splintPRO/api/dpl-translator

 

 

신용카드를 등록을 해야 하며 저의 경우에는 0.5달러가 결제되었습니다. 보통 시험 결제 후 돌려주는데 아직 안 돌려주네요? 언젠가 줄 거라고 믿고^^ => 한참 후에 취소되었습니다. 

  • Basic 플랜은 무료라고 볼 수 있는데 월 30만자(초과 시 중지, 1회 호출당 최대 3천자)를 나누어서 100번 호출할 수 있습니다. 100회를 초과하면 0.003달러를 과금한다고 합니다.
  • 그 다음 Pro 플랜은 4.99달러에 9백만자라서 느낌상 싸다는 생각이 듭니다. 구글이 월 50만자 무료에 이후 백만자당 20달러 요율로 계산하는 것에 비하면 싼 거겠죠? 

바로 API key를 발급해 주는데 호출하는 방법도 일반적이었습니다. 

 

제가 테스트한 코드는 다음과 같습니다. API key는 보안상 환경변수로 설정해서 넘겨주고, 구글 클라우드 번역과 달리 string의 list는 받지를 않고 plain text만 받네요.  

# Set-Item -Path env:DEEPL_RAPIDAPI_KEY -Value "your_api_key"
def translate_text_deepl_rapidapi(audio, target, text):
    try:
        api_key = os.environ['DEEPL_RAPIDAPI_KEY'] 
        print(_("[Info] DeepL-Rapidapi will be used."))
    except KeyError:
        print(_("[Error] Please set DEEPL_RAPIDAPI_KEY environment variables."))
        sys.exit(1)
        
    url = f'https://dpl-translator.p.rapidapi.com/translate'

    text = text
    target_language = target.upper() 
    source_language = audio.upper() 

    payload = {
        'text': text,
        'source': source_language,
        'target': target_language
    }
    
    headers = {
        "content-type": "application/json",
        "X-RapidAPI-Key": api_key,
        "X-RapidAPI-Host": "dpl-translator.p.rapidapi.com"
    }   

    response = requests.post(url, json=payload, headers=headers)
    if response.status_code != 200:
        raise Exception(response.text)
    
    data = response.json()
    try:
        translated_texts = data['text'] 
        translated_list = translated_texts.split('\n')
    except KeyError:
        print(data)
        sys.exit(1)
    
    return translated_list

응답은 다음과 같이 왔습니다. 

{
  "text": "번역 예시 텍스트입니다.",
  "alternative_texts": [
    "다음은 번역 예시 텍스트입니다.",
    "번역을 위한 예시 텍스트입니다.",
    "번역을 위한 예시 텍스트입니다."
  ]
}

주 번역 이외에 대체하는 번역 3가지를 주는 것이 장점인 듯합니다. 

 

다만 단점이 있습니다...

  • 응답 시간이 꽤 길더군요. 3천 글자를 넘겼더니 3초~12초까지 걸렸습니다. 1천자 이하로 넘기면 더 빨리 응답하는데, 여기에서는 월 호출 횟수 제한이 있어서... 
  • 파일 번역이 안되는 것도 단점이 될 수 있겠습니다. 

비디오/오디오 자막 추출하고 번역하는 것에 가끔씩 시간을 썼는데 덕분에 DeepL도 나름대로 같이 구현할 수 있었습니다. 

 

https://github.com/sevengivings/subtitle-xtranslator

 

GitHub - sevengivings/subtitle-xtranslator: A Python script to extract text from audio/video and translate subtitle using Google

A Python script to extract text from audio/video and translate subtitle using Google Cloud, Naver Papago and DeepL-Rapidapi translation API. - GitHub - sevengivings/subtitle-xtranslator: A Python ...

github.com

위 링크의 파이썬 스크립트는 Whisper 혹은 stable-ts도 같이 설치해서 사용하는 것으로 자세한 안내도 포함되어 있습니다. 설치할 때 ffmpeg은 별도로 설치를 해주어야 하고, 파이썬 관련 라이브러리는 pip install -r requirements.txt 를 통해 한번에 설치가 가능합니다. 결과적인 사용법은 어렵지 않은데 처음에는 좀 복잡하게 느껴지는 것이 사실입니다. 

 

https://github.com/sevengivings/subtitle-extractor

 

GitHub - sevengivings/subtitle-extractor: A Python script for AI speech recognition of video or audio file using Whisper or stab

A Python script for AI speech recognition of video or audio file using Whisper or stable-ts and translation subtitle using DeepL app or web file translation. - GitHub - sevengivings/subtitle-extrac...

github.com

 

 

만약 이미 Whisper로 추출된 자막을 갖고 있다면 위 링크에 있는 부속 스크립트를 사용할 수 있습니다. -> 예: subtitle-translator-deepl-rapidapi.py

  • DeepL API를 간접적으로 유료(월 100회 호출, 합계 30만자 무료)로 사용할 수 있는 곳 - DeepL Translator API: Pricing & Cost (splintPRO) | RapidAPI  에서 Basic 플랜으로 가입하고 Apps를 하나 만들어서 api key를 얻어야 합니다.  
  • subtitle-translator-deepl-rapidapi.py는 자막(.srt)에서 시간정보와 자막을 분리한 후 짧은 자막(예: 1글자)을 제거하고 번역한 후 다시 합치는 기능을 갖고 있습니다. 
  • 사용법은 파워쉘에서는 Set-Item -Path env:DEEPL_RAPIDAPI_KEY -Value "your_api_key" 를 통해 환경 변수에 api key를 선언해 준 후, python .\subtitle-translator-deepl-rapidapi.py '.\입력파일.srt' 1 과 같이 해주면 됩니다. 숫자 1은 1글자짜리는 제거하겠다는 의미입니다.