Cómo generar texto a partir de imágenes con Python

¿A las imágenes importantes les falta el texto alternativo de la imagen en su sitio web?

En la Búsqueda de Google: Estado de la Unión en mayo pasado, John Mueller y Martin Splitt dedicaron aproximadamente una cuarta parte del discurso a temas relacionados con la imagen. Google Search: State of the Union

Anunciaron una gran lista de mejoras en la búsqueda de imágenes de Google y predijeron que sería una gran oportunidad sin explotar para el SEO.

SEO Clarity, un proveedor de herramientas de SEO, publicó un informe muy interesante al mismo tiempo Entre otros hallazgos, encontraron que más de un tercio de los resultados de búsqueda web incluyen imágenes. very interesting report

How to Generate Text from Images with Python

Las imágenes son importantes para los visitantes de búsqueda no solo porque son visualmente más atractivas que el texto, sino que también transmiten un contexto al instante que requeriría mucho más tiempo al leer el texto.

Google cree que las mejoras de imagen en los motores de búsqueda ayudarán a los usuarios a visitar páginas que coincidan con sus intenciones.

Ahora, tengo buenas y malas noticias para ti con respecto a esta nueva oportunidad.

La mala noticia es que para mejorar la capacidad de clasificación de sus imágenes, debe hacer el tedioso trabajo de agregar metadatos de texto en forma de texto alternativo de calidad y texto circundante.

¡Pero la buena noticia es que vamos a aprender cómo automatizar ese tedioso trabajo con Python!

Este es nuestro plan de acción:

  • Usaremos DeepCrawl para rastrear un sitio web y encontrar imágenes importantes a las que les falta el texto ALT de la imagen.
  • Entrenaremos un modelo usando Pythia que puede generar leyendas de imágenes.
  • Escribiremos una función de Python para iterar sobre las imágenes y generar sus leyendas.
  • Aprenderemos algunos trucos para mejorar la calidad de los subtítulos y producir unos más personalizados.
  • Aprenderemos sobre los conceptos de aprendizaje profundo que hacen esto posible.
  • Compartiré recursos para aprender más y proyectos comunitarios interesantes.

Introduciendo Pitia

Los avances que están ocurriendo en la comunidad de aprendizaje profundo son emocionantes e impresionantes ¡Es muy difícil mantenerse al día!

🏎 Más pequeño, más rápido, más barato, más liviano: presentamos DilBERT, una versión destilada de BERT por @SanhEstPasMoi https://t.co/MuVpaQB4Le @SanhEstPasMoi

— Hamlet Batista (@hamletbatista) 28 de agosto de 2019 August 28, 2019

Solo mire el modelo Megatron lanzado por NVIDIA el mes pasado con 8.300 millones de parámetros y 5 veces más grande que GPT2, el poseedor del récord anterior.

Pero, lo que es más importante, repasemos algunas de las cosas increíbles que ahora son posibles.

How to Generate Text from Images with Python

No dude en consultar este sitio de demostración centrado en hacer preguntas sobre el contenido de las imágenes.

¿Bien adivina que? Es uno de los proyectos de aprendizaje profundo de Facebook y lo pondremos a trabajar en este artículo. Pythia

Extracción de imágenes sin texto alternativo con DeepCrawl

How to Generate Text from Images with Python

Vamos a generar subtítulos para este agradable sitio que tiene todo lo que pueda necesitar sobre alpacas. nice site

How to Generate Text from Images with Python

Cuando configure el rastreo, asegúrese de incluir recursos de imagen (tanto internos como externos).

Seleccione una extracción personalizada predefinida para extraer imágenes sin atributo de texto alternativo.

How to Generate Text from Images with Python

Una vez que finalice el rastreo, exporte la lista de URL de imágenes como un CSV después de que finalice el rastreo.

Generación de subtítulos a partir de las imágenes usando Pythia

Dirígete a la página de Pythia GitHub y haz clic en el enlace de demostración de subtítulos de imagen Está etiquetado como «Subtítulos de imagen BUTD». GitHub page

BUTD significa «Bottom Up and Top Down», que se analiza en el artículo de investigación que explica la técnica utilizada. research paper

Si sigue el enlace, accederá a un bloc de notas de Google Colab, pero es de solo lectura. Debe seleccionar Archivo > Hacer una copia en Drive.

Ahora, los siguientes pasos son la parte más difícil.

How to Generate Text from Images with Python

En Tiempo de ejecución, seleccione Ejecutar todo.

Desplácese hacia abajo hasta la última celda del cuaderno y espere a que finalice la ejecución.

Copie y pegue la imagen de ejemplo en una celda separada y ejecútela con Shift+Enter.

image_text = init_widgets(

    "http://images.cocodataset.org/train2017/000000505539.jpg"

)

How to Generate Text from Images with Python

Debería ver un widget con un aviso para subtitular una imagen usando su URL ¡Presiona el botón que dice Subtitular esa imagen!

How to Generate Text from Images with Python

La leyenda dice claramente «una jirafa y dos cebras caminando por un camino».

Veamos un par de imágenes de productos a las que les falta texto alternativo en nuestro sitio de ropa de alpaca.

How to Generate Text from Images with Python

Estamos revisando esta página específicamente. this page

How to Generate Text from Images with Python

La leyenda generada dice «una mujer parada frente a un fondo blanco».

How to Generate Text from Images with Python

La leyenda generada dice «un jarrón blanco sobre una mesa», lo cual es incorrecto, ¡pero no completamente loco!

¡Resultados muy impresionantes sin escribir una línea de código!

Iterando sobre todas las imágenes que faltan subtítulos con Python

Necesitamos agregar el siguiente código al final del cuaderno de demostración de Pythia que clonamos de su sitio.

Comencemos cargando el archivo que exportamos de DeepCrawl.

from google.colab import files

uploaded = files.upload()

Vamos a cargar el archivo en pandas para descubrir cómo extraer las URL de las imágenes usando una URL de ejemplo.

Podemos hacer pequeñas modificaciones a la función al hacer clic en el botón para crear su función generar subtítulos Esta función tomará la URL de una imagen como entrada y generará un título.

How to Generate Text from Images with Python

Aquí hay un ejemplo El pie de foto dice «una mujer con un vestido rojo que sostiene un oso de peluche». No es 100% exacto, pero tampoco terrible.

Este código nos ayudará a subtitular todas las imágenes para esa URL de ejemplo.

How to Generate Text from Images with Python

Esto es lo que dicen los nuevos subtítulos:

  • “una mujer sonriendo con una sonrisa en su rostro”
  • “una pila de jarrones junto a una pila de rocas”
  • “una mujer sonriendo mientras sostiene un cigarrillo en la mano”

Los ejemplos son cercanos pero decepcionantes. Pero, ¡el siguiente tenía toda la razón!

La leyenda dice «un par de ovejas paradas una al lado de la otra», sobre lo que nadie puede discutir, pero en realidad son alpacas, no ovejas.

How to Generate Text from Images with Python

Finalmente, hagamos algunos cambios para poder generar subtítulos para todas las URL de imágenes que exportamos desde DeepCrawl.

Puede ver en el resultado algunas URL con atributos adicionales como este.

<img style="display: block; margin-left: auto; margin-right: auto;" src="https://alpacas.com/pub/media/wysiwyg/panel/shippingusa.jpg" alt="" />

El siguiente fragmento de código nos ayudará a eliminar esos atributos adicionales y obtener las URL de las imágenes.

image_urls = [re.sub('<img .+ src="', '', url).strip() for url in images if url]

image_urls = [re.sub('" alt=""\s*/>', '', url).strip() for url in image_urls if url]

Esto nos da una lista limpia con 144 URL de imágenes.

unique_images = set(image_urls)

A continuación, convertimos la lista en un conjunto de 44 URL únicas.

Finalmente, iteramos sobre cada imagen y generamos un título para ella como lo hicimos mientras probamos en una URL.

Algunas imágenes no se subtitularon debido al tamaño de la imagen y a lo que espera la red neuronal Capturé, ignoré e informé esas excepciones.

Así es como se ve la salida parcial.

La leyenda dice «una mujer de pie junto a un grupo de ovejas».

How to Generate Text from Images with Python

How to Generate Text from Images with Python

La leyenda dice «un estante lleno de muchos artículos de diferentes colores»

Los subtítulos generados no son particularmente precisos porque entrenamos a Pythia en un conjunto de datos de subtítulos genéricos Específicamente, el conjunto de datos COCO, que significa Common Objects in Context. COCO dataset

Para producir mejores subtítulos, debe generar su propio conjunto de datos personalizado Compartiré algunas ideas y algunos de mis primeros resultados en la siguiente sección.

El poder del entrenamiento en un conjunto de datos personalizado

Para obtener mejores subtítulos, debe crear un conjunto de datos de imágenes y subtítulos utilizando sus propias imágenes. El proceso para hacer esto está fuera del alcance de este artículo, pero aquí hay un tutorial que puede seguir para comenzar. tutorial

La idea principal es que necesita extraer imágenes e, idealmente, cinco subtítulos por imagen, cambiarles el tamaño para usar un tamaño estandarizado y formatear los archivos como lo espera el formato COCO.

{
    "info": {...},
    "licenses": [...],
    "images": [...],
    "annotations": [...],
    "categories": [...], <-- Not in Captions annotations
    "segment_info": [...] <-- Only in Panoptic annotations
}

Una idea que he utilizado con éxito para los clientes de comercio electrónico es generar un conjunto de datos personalizado utilizando imágenes de productos y los correspondientes resúmenes de reseñas de cinco estrellas como subtítulos.

El objetivo no es solo generar texto alternativo de imagen, sino también titulares potenciales basados ​​en beneficios.

Permítanme compartir algunos ejemplos cuando comencé a jugar con esto el año pasado. Usé reseñas de 3 a 5 estrellas para obtener suficientes datos.

How to Generate Text from Images with Python

How to Generate Text from Images with Python

Aquí hay un par de divertidos para mostrarle que hacer este tipo de trabajo puede ser muy divertido. Creo que desperté a mi esposa cuando me eché a reír con estos.

How to Generate Text from Images with Python

How to Generate Text from Images with Python

Comprender cómo funciona la pitia

How to Generate Text from Images with Python

Es muy interesante cómo una red neuronal produce subtítulos a partir de imágenes.

En mis artículos anteriores sobre aprendizaje profundo, mencioné el enfoque general de codificador-decodificador utilizado en la mayoría de las tareas de aprendizaje profundo. Es lo mismo con la leyenda de la imagen, excepto que tenemos dos tipos diferentes de redes neuronales conectadas aquí.

Una red neuronal convolucional toma una imagen y puede extraer características sobresalientes de la imagen que luego se transforman en vectores/incrustaciones. convolutional neural network

Una red neuronal recurrente toma las incrustaciones de imágenes e intenta predecir las palabras correspondientes que pueden describir la imagen. recurrent neural network

Pythia utiliza un enfoque más avanzado que se describe en el documento «Atención de abajo hacia arriba y de arriba hacia abajo para subtítulos de imágenes y preguntas y respuestas visuales». “Bottom Up and Top Down Attention for Image Captioning and Visual Question and Answering”

En lugar de utilizar una CNN tradicional que se utiliza en tareas de clasificación de imágenes para alimentar el codificador, utiliza una red neuronal de detección de objetos (Faster R-CNN) que puede clasificar objetos dentro de las imágenes.

Creo que esta es la razón principal por la que es capaz de producir pies de foto de alta calidad.

Comprender la atención neuronal

How to Generate Text from Images with Python

La atención neuronal ha sido uno de los avances más importantes en las redes neuronales. Neural attention

En términos simples, el mecanismo de atención permite que la red se concentre en las partes correctas de la entrada que pueden ayudar a completar la tarea de transformación en cuestión.

En el ejemplo anterior, puede ver, por ejemplo, que la red asocia «jugar» con la imagen visual del frisbee y el fondo oscuro con el hecho de que están jugando en la oscuridad.

La atención neuronal es un componente clave de la arquitectura de Transformers que impulsa BERT y otros codificadores de última generación. Transformers architecture

Recursos y Proyectos Comunitarios

Cubrí este tema de generación de texto a partir de imágenes y texto en profundidad durante un seminario web reciente para DeepCrawl Puede encontrar el resumen aquí y también mis respuestas a las preguntas de los asistentes. recap here

Originalmente aprendí a construir un sistema de subtítulos desde cero porque era el proyecto final del primer módulo de la Especialización en aprendizaje automático avanzado de Coursera. Advanced Machine Learning Specialization

Las clases son increíblemente desafiantes, incluso más cuando no eres un ingeniero de aprendizaje automático a tiempo completo. Pero la experiencia me enseñó mucho sobre lo que es posible y la dirección que los investigadores están tomando.

El entusiasmo por Python continúa creciendo en nuestra comunidad Cada vez veo más gente preguntando cómo empezar y compartiendo sus proyectos.

Primero, un gran agradecimiento a Parker, quien se tomó la molestia de lograr que el equipo legal de su empresa aprobara la publicación de este código que desarrolló internamente. Parker

Es un script que lee los datos de la API de estadísticas y los almacena en una base de datos para ayudarlo a visualizarlos en Tableau.

Aquí hay algunos ejemplos más y la lista sigue creciendo:

Recopilador de datos con ajuste de CTR personalizado y cálculo de puntaje (CTRdelta * Impresiones) Hecho para rastrear y analizar el efecto de los enlaces externos.

Construya sobre un envoltorio GSC y use scrapper para que pueda ingresar el enlace externo y una fecha. https://t.co/5M500uG9kT https://t.co/5M500uG9kT

— Gefen Hermesh (@Ghermesh) 31 de julio de 2019 July 31, 2019

Tal vez este informe de paridad de contenido para comparar computadoras de escritorio y dispositivos móviles para la IMF o para comparar sitios durante la migración se ajuste a su artículo 🙂 https://t.co/zm5KyjYTFQ https://t.co/zm5KyjYTFQ

— Nacho Mascort (@NachoMascort) 31 de julio de 2019 July 31, 2019

No encontré una manera fácil de hacerlo en Excel, así que aquí hay una forma en #python para ver a los competidores que también están clasificados por sus palabras clave: https://t.co/u8lJRJY1X9 #python

— KarinaKumyK (@karinakumykova) 31 de julio de 2019 July 31, 2019

Tarde, pero igual 🙂

Se prepara aquí: https://t.co/MPb18mG8ay https://t.co/MPb18mG8ay

Léame todavía está en progreso, pero las operaciones básicas están ahí (lo terminaré en la próxima hora).

— Filip Podstavec ⛏ (@filippodstavec) 5 de septiembre de 2019 September 5, 2019

Más recursos:

Créditos de imagen

Todas las capturas de pantalla tomadas por el autor, septiembre de 2019

Leer el articulo original en Search Engine Journal.

¡Danos un Voto!

¿Tienes una pregunta?

Luis Narciso
Sobre SEO
(Posicionamiento Web)

Frank Fajardo
Sobre Diseño Web, Anuncios, Diseño y Redes Sociales