¿Te encanta el arte y los colores? ¿Quieres explorar el mundo visual a través de la programación? En este proyecto, te mostraré cómo crear la huella digital cromática de algunas ciudades de Francia utilizando Python y la API de Flickr. ¡Prepárate para un viaje lleno de colores vibrantes y creatividad!

Introducción: En este tutorial, aprenderás cómo utilizar Python para realizar una búsqueda en Flickr y crear una rueda de color utilizando las imágenes encontradas. La rueda de color mostrará una representación visual de los colores promedio de las fotos relacionadas con la búsqueda en Flickr.
Requisitos previos:
- Python 3 instalado en tu computadora.
- Las bibliotecas
requestsyPillow(la implementación dePIL) instaladas. Puedes instalarlas ejecutandopip install requests pillowen tu terminal.
Paso 1: Obtener las claves de API de Flickr
- Para utilizar la API de Flickr, necesitaremos obtener las claves de API. Puedes obtenerlas registrándote como desarrollador en el sitio web de Flickr (https://www.flickr.com/services/api/).
- Una vez que hayas obtenido las claves de API (API Key y API Secret), reemplaza
"TU_API_KEY"y"TU_API_SECRET"en el código Python con tus propias claves.
Paso 2: Escribir el código para buscar y descargar las fotos
import requests
from io import BytesIO
from PIL import Image, ImageDraw
# Llaves de API de Flickr
api_key = "TU_API_KEY"
api_secret = "TU_API_SECRET"
# Realiza una búsqueda en Flickr
def buscar_fotos(busqueda):
url = "https://api.flickr.com/services/rest/"
params = {
"method": "flickr.photos.search",
"api_key": api_key,
"text": busqueda,
"sort": "relevance",
"per_page": 24,
"format": "json",
"nojsoncallback": 1
}
response = requests.get(url, params=params)
data = response.json()
return data["photos"]["photo"]
# Descarga una foto de Flickr
def descargar_foto(foto):
url = "https://farm{farm}.staticflickr.com/{server}/{id}_{secret}.jpg".format(**foto)
response = requests.get(url)
return Image.open(BytesIO(response.content))
En el código anterior, utilizamos las claves de API para realizar una búsqueda en Flickr y obtener los datos de las fotos relacionadas con la búsqueda. Luego, descargamos las fotos utilizando la URL proporcionada por Flickr y las convertimos en objetos de imagen utilizando PIL.

Paso 3: Crear la rueda de color
# Crea una rueda de color basada en las fotos descargadas
def crear_rueda_color(fotos):
size = (800, 800)
rueda = Image.new("RGB", size)
draw = ImageDraw.Draw(rueda)
angulo = 0
angulo_incremento = 360 / len(fotos)
for foto in fotos:
imagen = descargar_foto(foto)
imagen = imagen.resize((100, 100))
imagen_promedio = imagen.resize((1, 1), Image.ANTIALIAS)
color_promedio = imagen_promedio.getpixel((0, 0))
draw.pieslice([(0, 0), size], angulo, angulo + angulo_incremento, fill=color_promedio)
angulo += angulo_incremento
rueda.show()
# Realiza una búsqueda en Flickr y crea la rueda de color
busqueda = input("Ingresa el término de búsqueda en Flickr: ")
fotos = buscar_fotos(busqueda)
crear_rueda_color(fotos)

Este código realiza una búsqueda en Flickr basada en un término ingresado por el usuario, descarga las primeras 100 fotos relacionadas y crea una rueda de color utilizando los colores promedio de cada foto. Puedes modificar la cantidad de fotografías («per_page») pero ten en cuenta que la API de Flickr tiene un límite de solicitudes. La rueda de color resultante se muestra en una ventana emergente.

No podría faltar una visualización de Bogotá y el Amazonas en Colombia. Podemos ver el contraste y la dominancia de colores que registra el ladrillo y el cemento de la capital contra los tonos verdes naturales del amazonas.
El procesamiento de imágenes y la segmentación de colores por pixel será objeto de otros ejercicios en los que estoy trabajando. Y no puedo terminar la publicación sin agradecer al profesor Néstor Peña quién me influencia constantemente con su trabajo y me aproximó al mundo del DataViz.
Puedes encontrar el código completo en un Jupyter Notebook en GitHub:
https://github.com/javiladino/flicker_fingerprint

