Utilizar GCP Cloud Translation API en Python

Seguimos explorando servicios de AI en diferentes Cloud Providers como nuestra misión “multi-cloud” demanda.

En este caso estaremos llamando a la API de traducción de GCP “Cloud Translation API” utilizando Python.

Cloud Translation API

Cloud Translation API de Google Cloud Platform (GCP) es un servicio que permite a los desarrolladores integrar la traducción automática de texto. Utiliza la tecnología de aprendizaje automático de Google para ofrecer traducciones rápidas y precisas entre miles de pares de idiomas.

Versiones:

  • Cloud Translation API Basic (v2): Esta es la versión más establecida y ofrece funcionalidades básicas de traducción automática. Es ideal para aplicaciones que necesitan traducciones simples de texto. Esta versión utiliza el modelo de traducción estadística y de aprendizaje automático de Google.
  • Cloud Translation API Advanced (v3): Esta versión es más nueva y ofrece características adicionales en comparación con la Basic. Incluye la detección automática de idiomas, la capacidad de traducir texto en formatos como HTML conservando el formato original, y una mejor calidad de traducción utilizando los últimos modelos de aprendizaje profundo de Google. También proporciona funciones para personalizar las traducciones y optimizarlas para dominios o vocabularios específicos.

Demo

Vamos a estar utilizando la Cloud Translation API en su versión Avanzada. La utilizaremos para incorporarla a una aplicación de Python que traducirá los posteos a partir de web scraping.

Habilitar la API

En primera instancia, como con todos los servicios de GCP, debemos habilitar la API.

Para esto:

  • Buscaremos “translation api” en el buscador general.
  • Luego haremos click sobre “Cloud Translation API”.
  • En caso de que no se encuentre activada, en lugar de “manage” dirá “Enable” y debemos hacer click en esta opción.
  • En nuestro caso, ya se encuentra habilitada.
  • Luego haremos click en Manage.

Crear Application Default Credentials (ADC)

Ahora crearemos las credenciales para la autorización de nuestra API:

  • Luego de hacer click en Manage, nos llevará a la sección de APIs & Services.
  • Iremos a la sección de “Credenciales”.
  • Haremos click en “+ Create Credentials”.
  • Seleccionaremos “Service Account”.
  • Le daremos un nombre, se autocompletará el ID y ingresaremos una descripción.
  • Daremos los permisos necesarios.
  • Para este caso el permiso minimo que debemos dar será “Cloud Translation API User
  • No daremos acceso a ningun usuario para impersonar la SA.

Creación de SA Key

Ahora crearemos la Key de Autenticación para nuestra Service Account:

  • Seguiremos en “APIs & Services”, en la sección credenciales, haremos click sobre la SA recien creada.
  • Una vez en nuestra SA, iremos a la sección “Keys”.
  • Luego, haremos click en “Add Key”
  • Crearemos la KEY en formato JSON.
  • Se descargará el archivo de las credenciales.
  • Este archivo debemos almacenarlo de manera segura.
  • En este caso lo enviaremos a la folder del repositorio y lo excluiremos de git utilizando el archivo gitignore.
  • Esto no es recomendado para producción, debe ser almacenado en un repositorio de secretos.
  • El archivo JSON de nuestra SA, será el parametro fundamental para el login.

Configuración de Login para nuestro codigo

El cliente de conexión de GCP buscará la variable de entorno “GOOGLE_APPLICATION_CREDENTIALS”.

  • En este caso, la agregaremos como variable de entorno en PowerShell.
$env:GCP_PROJECT_ID="<project_id>"
$env:GOOGLE_APPLICATION_CREDENTIALS="<path/to/file.json>"

Paquetes de Python

Para que nuestro codigo funcione debemos instalar los paquetes requeridos por las librerías a utilizar.

  • Instalamos los siguientes paquetes de PIP:
pip install google-cloud-translate==2.0.1
pip install --upgrade google-cloud-translate
  • El paso de realizar el upgrade del paquete es fundamental para su correcto funcionamiento.
  • Si no realizamos el upgrade, el codigo no funcionará segun lo esperado.

Codigo de Python para el request

Utilizamos el siguiente codigo en nuestro modulo de traducción para llamar a la API de GCP a través de Python:

from google.cloud import translate

class Translator_gcp:
    def __init__(self, text, project_id):
        self.text = text
        self.project_id = project_id

    def translate_text(self):
        """Translating Text."""

        client = translate.TranslationServiceClient()

        location = "global"

        parent = f"projects/{self.project_id}/locations/{location}"

        response = client.translate_text(
            request={
                "parent": parent,
                "contents": [self.text],
                "mime_type": "text/plain",  # mime types: text/plain, text/html
                "source_language_code": "es",
                "target_language_code": "en-US",
            }
        )

        # Display the translation for each input text provided
        for translation in response.translations:
            print(f"Translated text: {translation.translated_text}")

        return response.translations[0].translated_text
  • En este caso, en el Return estoy utilizando la extracción del texto traducido plano de la respuesta. Esto lo hago con los fines de mi aplicación.

Llamado del modulo en archivo main.py

Para llamar a este modulo desde el main.py utilizo el siguiente bloque de codigo:

project_id = os.getenv('GCP_PROJECT_ID')
GOOGLE_APPLICATION_CREDENTIALS = os.getenv('GOOGLE_APPLICATION_CREDENTIALS')

    content_en = []
    print("2. Translation in progress...") 
    for element in content:
        if element['type'] != 'image':  # Skip translation for images
            # translated_text = Translator_azure.translate(element['content']) ##Translate Azure AI 
            translator_gcp = Translator_gcp(element['content'], project_id) ## Translate with GCP Translation API
            translated_text = translator_gcp.translate_text()
            content_en.append({'type': element['type'], 'content': translated_text})
        else:
            content_en.append(element)  # Add images as-is
    print("2. Translation finished...") 

Pueden ver el codigo completo en https://github.com/mdiloreto/translate-blog-html-and-post-to-medium

Prueba del codigo

Ahora probamos nuestra app:

El texto es traducido correctamente utilizando la API de Cloud Transaltion Advanced de GCP 🙂


Posted

in

, ,

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.