Vous aimez l’art et les couleurs et vous souhaitez explorer le monde visuel par le biais de la programmation ? Dans ce projet, je vous montrerai comment créer l’empreinte chromatique de certaines villes de France à l’aide de Python et de l’API Flickr. Préparez-vous à un voyage plein de couleurs vibrantes et de créativité !

Introduction: Dans ce tutoriel, vous apprendrez à utiliser Python pour effectuer une recherche sur Flickr et créer une roue des couleurs à partir des images trouvées. La roue des couleurs sera une représentation visuelle des couleurs moyennes des photos liées à la recherche Flickr.
Conditions préalables :
- Python 3 installé sur votre ordinateur.
- Les bibliothèques Requests et Pillow (l’implémentation de PIL) sont installées. Vous pouvez les installer en lançant pip install requests pillow dans votre terminal.
Étape 1 : Obtenir les clés de l’API Flickr
- Pour utiliser l’API Flickr, nous devons obtenir les clés de l’API. Vous pouvez les obtenir en vous enregistrant en tant que développeur sur le site web de Flickr (https://www.flickr.com/services/api/).
- Une fois que vous avez obtenu les clés API (API Key et API Secret), remplacez « TU_API_KEY » et « TU_API_SECRET » dans le code Python par vos propres clés.
Étape 2 : Écrire le code pour rechercher et télécharger les photos
import requests
from io import BytesIO
from PIL import Image, ImageDraw
import webbrowser
# Flickr API Keys
api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"
# Perform a search on Flickr
def search_photos(query):
url = "https://api.flickr.com/services/rest/"
params = {
"method": "flickr.photos.search",
"api_key": api_key,
"text": query,
"sort": "relevance",
"per_page": 24,
"format": "json",
"nojsoncallback": 1
}
response = requests.get(url, params=params)
data = response.json()
return data["photos"]["photo"]
# Download a photo from Flickr
def download_photo(photo):
url = "https://farm{farm}.staticflickr.com/{server}/{id}_{secret}.jpg".format(**photo)
response = requests.get(url)
return Image.open(BytesIO(response.content))
Dans le code ci-dessus, nous utilisons les clés API pour effectuer une recherche sur Flickr et obtenir les données des photos liées à la recherche. Ensuite, nous téléchargeons les photos à l’aide de l’URL fournie par Flickr et les convertissons en objets images à l’aide de PIL.

Étape 3 : Création de la roue des couleurs
# Create a color wheel based on the downloaded photos
def create_color_wheel(photos):
size = (800, 800)
wheel = Image.new("RGB", size)
draw = ImageDraw.Draw(wheel)
angle = 0
angle_increment = 360 / len(photos)
for photo in photos:
image = download_photo(photo)
image = image.resize((100, 100))
averaged_image = image.resize((1, 1), Image.ANTIALIAS)
average_color = averaged_image.getpixel((0, 0))
draw.pieslice([(0, 0), size], angle, angle + angle_increment, fill=average_color)
angle += angle_increment
wheel.show()
# Perform a search on Flickr and create the color wheel
search_term = input("Enter your search term on Flickr: ")
photos = search_photos(search_term)
create_color_wheel(photos)

Ce code effectue une recherche sur Flickr sur la base d’un terme saisi par l’utilisateur, télécharge les 100 premières photos associées et crée une roue de couleurs en utilisant les couleurs moyennes de chaque photo. Vous pouvez modifier le nombre de photos (« per_page« ), mais notez que l’API de Flickr a une limite de requête. Le cercle chromatique obtenu est affiché dans une fenêtre contextuelle.

Une visualisation de Bogota et de l’Amazonie en Colombie ne pouvait manquer. On peut voir le contraste et la dominance des couleurs de la brique et du béton de la capitale par rapport aux tons verts naturels de l’Amazonie.
Le traitement des images et la segmentation des couleurs pixel par pixel feront l’objet d’autres exercices sur lesquels je travaille. Je ne saurais terminer cette publication sans remercier le professeur Néstor Peña qui m’a constamment influencé par son travail et m’a rapproché du monde de la DataViz.
Vous pouvez trouver le code complet dans un Jupyter Notebook sur GitHub :
https://github.com/javiladino/flicker_fingerprint

