3 passos para extrair e traduzir textos de imagens com Python e GCP

Num ambiente cloud como o da Google, facilmente nos confundimos com as diferentes ferramentas que são oferecidas e fica ainda mais complicado quando precisamos lidar e integrar com elas via códigos Python. Esse conteúdo tem como objetivo trazer alguns exemplos práticos com códigos que o time da BIX Tecnologia vem utilizando e desenvolvendo ao longo do tempo. Com certeza irão facilitar sua vida (assim como facilitou a nossa!)

Motivação

Pense no seguinte cenário: Você é dono de um aplicativo móvel que ajuda turistas a se locomover em outros países. Nos últimos tempos, você notou um aumento de queixas dos usuários que usavam o aplicativo no Japão e decide adicionar uma nova funcionalidade: tradução de placas de trânsito. Assim, os turistas poderão tirar uma foto da placa e saber seu significado e, consequentemente, se locomover de melhor forma. Agora, como fazer isso?

O problema se encaixa perfeitamente num cenário extremamente comum: a área de negócio demanda uma nova feature para o produto e cabe ao time de Data Science dizer se é viável ou não.

Com base nesse problema iremos utilizar algumas ferramentas da Google Cloud para experimentação e, se viavél, deploy desse pipeline de dados.

O pipeline irá consistir em algumas transformações:

  1. Extração do texto das imagens
  2. Tradução do texto para a linguagem desejada
  3. Criação de áudio com o texto traduzido


Estrutura de armazenamento dos dados:


Assim como em nossa máquina local, também podemos criar estruturas de pastas no GCS. Dessa forma, conseguimos organizar de forma mais clara nossos dados e suas fontes.

EXT: Dados Brutos sem transformação

  • Imagens: Fotos tiradas pelos turistas

TRA: Dados transformados

  • Áudios: Áudios com o texto traduzido
  • Textos-Traduzidos: Mapeamento de textos extraídos e traduzidos das fotos

Instalando pacotes que iremos utilizar

pip install google-api-python-client google-cloud-storage google-cloud-vision google-cloud-texttospeech google-cloud-translate google-auth pandas 

Para fazermos a comunicação do nosso código com a GCP, necessitamos um meio de autenticação, assim conseguimos ter as permissões para acessarmos os serviços desejados, e também para questões de faturamento.

Referência.

Passo 0: Subindo as imagens para o GCS

Aqui definimos uma função que tem o objetivo de subir um arquivo para o GCS (Google Cloud Storage). Com base nela, podemos iterar sobre o diretório local e subir todas nossas imagens. Documentação.

Output: ---Upload finalizado--- 

Passo 1: Extrair texto das imagens

Para esse passo, iremos utilizar o serviço Vision API da Google, em que uma de suas features é a detecção de texto em imagens. Documentação.

Imagem utilizada para o teste

Da mesma maneira que anteriormente, definimos uma função que aceita o parâmetro de localização do nosso arquivo no Bucket do GCS e retorna um objeto com as informações referentes a detecção de texto.


#Selecionamos full_text_annotation pois é referente a frase inteira.
teste.full_text_annotation.text
#Output: 
'止まれ\n'

Com base no print que vemos em tela, podemos notar que realmente os caracteres condizem com os que estão na imagem. Agora basta nós iterarmos sobre cada imagem da nossa base e extrair o texto:

Output:['gs://projeto-traducao-aplicativo/EXT/Imagens/1.png',
'gs://projeto-traducao-aplicativo/EXT/Imagens/11.jpg',
'gs://projeto-traducao-aplicativo/EXT/Imagens/12.jpg',
'gs://projeto-traducao-aplicativo/EXT/Imagens/14.jpg',
'gs://projeto-traducao-aplicativo/EXT/Imagens/15.png',
'gs://projeto-traducao-aplicativo/EXT/Imagens/16.jpg',
'gs://projeto-traducao-aplicativo/EXT/Imagens/2.png',
'gs://projeto-traducao-aplicativo/EXT/Imagens/3.jpg',
'gs://projeto-traducao-aplicativo/EXT/Imagens/4.jpg',
'gs://projeto-traducao-aplicativo/EXT/Imagens/5.jpg',
'gs://projeto-traducao-aplicativo/EXT/Imagens/6.jpg',
'gs://projeto-traducao-aplicativo/EXT/Imagens/7.jpg',
'gs://projeto-traducao-aplicativo/EXT/Imagens/8.jpg',
'gs://projeto-traducao-aplicativo/EXT/Imagens/9.jpg']
Output:['止まれ\n',
'自転車を除く\n',
'居住者用車両\nを除く\n',
'じてんしや\n',
'原付\n',
'元禄地震の再来\n想定津波高\n',
'出口\nEXIT\n4\n横浜\nYokohama\n',
'動物注意\n',
'自転車を除く\n一方通行\n開電\n',
'歩行者優先\n111111\n',
'|横断禁止\n',
'一方通行路出口\n',
'通行止\n',
'止まれ\n']

Então, temos todos os textos retirados das imagens!

Passo 2: Traduzir os textos extraidos das imagens

Para esse passo, utilizaremos o serviço Cloud Translation da GCP. Com ele, passamos um texto, seu idioma para tradução e ele retorna o texto traduzido.

Fazendo um teste (com uma imagem mais fácil de entender):

Output:{'detectedSourceLanguage': 'zh-TW',
'input': '動物注意\n',
'translatedText': 'Atenção animal'}

Vemos que a placa realmente condiz com a tradução! Logo, iterando sobre todas nossas imagens:

Output:['Pare',
'Exceto bicicletas',
'Excluindo veículos residentes',
'bicicleta',
'patinetes',
'Altura estimada do tsunami para o retorno do terremoto Genroku',
'Saída SAÍDA 4 Yokohama Yokohama',
'Atenção animal',
'Abertura unilateral exceto para bicicletas',
'Prioridade de pedestres 111111',
'| Sem travessia',
'Saída da estrada Yifangtong',
'fechado para o trânsito',
'Pare']

Em sequência criamos um DataFrame contendo tanto o nome da imagem (id), texto extraido e texto traduzido. Após isso, salvamos esse DataFrame em um arquivo .csv no nosso diretorio /TRA/textos-traduzidos no GCS.

Output:

Passo 3: Criar arquivos de áudio para o turista também conseguir escutar

Agora, iremos utilizar o serviço de Text-to-speech da GCP. Ele consiste em sintetizar textos em áudios, dentro das linguagens disponíveis. Para nosso caso, vamos pegar o texto traduzido para pt-BR e criar arquivos de áudio MP3 também em pt-BR. Primeiro criando a função:

Output: Audio content written to file "0.mp3"

Para finalizar nosso projeto, basta iterar sobre todas as linhas do DataFrame, criando diversos arquivos de audio, e depois, subir esses arquivos para nosso diretório /TRA/Audios no GCS.

Output (GCS):
 


Apenas relembrando o que fizemos no nosso pipeline de dados:

  1. Subimos as fotos desejadas para o GCS (via codigo)
  2. Utilizamos o serviço Cloud Vision API para extrair textos das nossas imagens.
  3. Utilizamos o serviço Cloud Tranlation para transformar nosso texto de Japonês para Português.
  4. Utilizamos o serviço Cloud Text-to-speech para criarmos áudios com o texto da imagem em português

Lembrando que tudo isso foi feito com o intuito de melhorar a experiência do usuário no aplicativo móvel. Talvez não fosse necessário usar toda essa tecnologia de inteligência artificial se não fosse uma questão demandada pelo negócio! Data Science veio para otimizar métricas de negócio, não para escrevermos mais linhas de código…

Disclaimer: Essa foi uma abordagem primária a um problema hipotético. Talvez num futuro, em que os usuários demandassem mais acurácia nas traduções, ainda utilizariamos o serviço de extração de textos de imagens mas incluiríamos um tradutor manual para essa etapa do processo (numa futura iteração do projeto).

.

.

.

Com isso, finalizamos nosso pipeline de Data Science! O próximo passo seria integrar os objetos MP3 e os textos traduzidos com o aplicativo móvel.

Quer saber de quais maneiras a ciência de dados pode ser ajudar a alavancar os resultados da sua empresa? Entre em contato conosco! Vamos bater um papo sobre os benefícios da data science voltados para as características do seu negócio!

Escrito por Gabriel Boehme