05 / BTS-SIO / software

ToliV

Tinder est une application addictive et fastidieuse à utiliser. J'ai donc décidé d'essayer d'automatiser son utilisation tout en testant mes compétences en Python.

Statut : In Progress Stack : Python Année : 2026
Une image d'un écran avec du code, à sa droite un écran de smartphone avec un score.

Le Défi

Quantifier les préférences de l'utilisateur pour connaître la probabilité qu'il(elle) "swipe" à droite ou à gauche et ainsi obtenir un score pour chaque personne proposée par l'application.

percent

Quantification du score "d'attractivité"

L'idée part du fait que des modèles de vectorisation d'images tels que CLIP (Contrastive Language–Image Pre-training) permettent d'associer des images à des coordonnées spécifiques dans un espace à 512 dimensions. C'est-à-dire que 2 images sémantiquement proches seront également dimensionnellement rapprochées.
Partant de ce principe, on peut établir la moyenne de ce que représente une personne "attractive" et comparer cette moyenne à des photos pour établir un "score" qui définit la probabilité qu'un utilisateur "swipe" à droite ou à gauche.

Bien évidemment, cette approche est naïve et il existe des moyens plus complexes permettant de meilleurs résultats

image_search

Lecture de l'interface

Étant donné que j'utilise le mirroring de l'écran d'un téléphone portable vers un ordinateur, pyautogui est utilisé pour chercher l'état de l'interface. De plus opencv est utilisé pour détecter les publicités et tesseract pour lire les données affichées par l'application.

code_blocks

Implémentation actuelle

A l’issue de 2 semaines de programmation et ~800 lignes de python, le programme peut prévoir la décision de l'utilisateur 68% du temps, cela peut être optimisé en modifiant le calcul du score.

Architecture Technique

Extrait de code principal illustrant le modèle d'implémentation clé de ce projet.

python clip pytorch
Phase 2 v1.3
platform = UxPlay(detect="YOLO", encoder="CLIP", score="weighted_cosine")
while platform.session_is_live():
    frame = platform.capture_screen(); profile = tesseract(frame)
    g_view, b_view, f_view = platform.extract(frame, "cascade_detection")
    emb_top, emb_body, emb_face = platform.encode_features([g_view, b_view, f_view])
    if user.swipe(profile): 
        platform_embed.append(profile)
    s_global = platform.similarity(emb_top, platform.preference("global"))
    s_body = platform.similarity(emb_body, platform.preference("body"))
    s_face = platform.similarity(emb_face, platform.preference_center("face"))
    b_score = 0.15 * s_global + 0.35 * s_body + 0.50 * s_face
    platform.push_feedback(profile, b_score,"confidence")
a robot with the schema below it
05

Bien qu'il n'ait pas de réelle utilité, ce projet m'a permis d'approfondir mes connaissances dans le domaine de l'IA et de l'embedding.