Le merchandising est un enjeu majeur pour les entreprises, mais il présente plusieurs défis :
- Fiabilité des mesures : L’évaluation de la profondeur des rayons est difficile et les produits peuvent être déplacés.
- Échantillonnage incomplet : Les marchandiseurs se concentrent souvent sur quelques produits, réduisant la représentativité des données collectées.
- Nombre limité de magasins couverts : En raison du temps nécessaire pour chaque visite, peu de magasins sont analysés quotidiennement.
- Méthode subjective : Chaque marchandiseur peut avoir une interprétation différente de la répartition des linéaires.
Nous avons développé une solution innovante qui automatise la collecte et l’analyse des données de merchandising. L’utilisateur prend simplement une photo des rayons d’un point de vente et notre système utilise YOLO (You Only Look Once) pour analyser automatiquement la part de linéaire des produits du client et des concurrents.
L’architecture de notre solution est conçue pour garantir une collecte, un traitement et une analyse efficace des données merchandising, tout en assurant une évolutivité et une adaptabilité à d'autres produits. Elle est composée des éléments suivants :
Notre architecture repose sur une approche modulaire et se divise en trois couches principales :
-
Couche Client (Front-end)
- Interface mobile où le client peut soumettre des images de linéaires et configurer les produits à analyser (produit cible et concurrents).
- Interface utilisateur simple pour visualiser les résultats d’analyse sous forme de pourcentages et graphiques.
-
Couche Application (Back-end & Services d’IA)
- Un serveur Django qui gère l’authentification, la gestion des utilisateurs et le stockage des images.
- Un module d’analyse basé sur YOLO qui détecte et identifie les produits sur les images soumises.
- Un module de web scraping qui collecte automatiquement des images de produits concurrents pour entraîner le modèle YOLO.
-
Couche Stockage (Base de Données & Dataset IA)
- Une base de données PostgreSQL qui stocke les informations des utilisateurs, des points de vente et des produits.
- Un espace de stockage pour conserver les images des rayons analysées et les datasets entraînés.
Nous avons structuré notre base de données pour assurer une gestion efficace des informations clés. Voici les modèles principaux :
L’utilisateur peut être un Admin ou un Merchandiser.
class User(AbstractUser):
ROLE_CHOICES = [('admin', 'Admin'), ('merchandiser', 'Merchandiser')]
role = models.CharField(max_length=20, choices=ROLE_CHOICES, default='merchandiser')Le merchandiser est associé à une liste de points de vente qu’il doit visiter quotidiennement.
class Merchandiser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
full_name = models.CharField(max_length=255)
phone_number = models.CharField(max_length=20)
email = models.EmailField(unique=True)
localisation = models.CharField(max_length=255)Chaque point de vente est identifié par un ID et contient des commandes, la visibilité des produits et l’espace occupé par les produits.
class PointDeVente(models.Model):
id = models.AutoField(primary_key=True)
localisation = models.CharField(max_length=255)
width = models.FloatField()
height = models.FloatField()
length = models.FloatField()Une commande est associée à un point de vente et contient une liste de produits commandés.
class Command(models.Model):
id = models.AutoField(primary_key=True)
point_de_vente = models.ForeignKey(PointDeVente, on_delete=models.CASCADE)
date_commande = models.DateField(auto_now_add=True)Chaque produit a une marque, un type et des dimensions. Il possède aussi une liste de concurrents.
class Product(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
type = models.CharField(max_length=255)
length = models.FloatField()
height = models.FloatField()
width = models.FloatField()
price = models.FloatField()
concurrents = models.ManyToManyField('self', blank=True)-
Soumission d’une image par le client
- Le client télécharge une image du rayon via l’interface mobile.
- L’image est stockée dans le serveur et envoyée au modèle YOLO pour analyse.
-
Détection et analyse de la linéarité
- YOLO identifie les produits du client et les produits concurrents dans l’image.
- L’algorithme calcule les pourcentages de linéarité de chaque marque.
-
Affichage des résultats
- Les résultats (visibilité du produit, concurrents, position) sont stockés en base de données.
- L’interface web permet de visualiser ces données sous forme de graphiques et tableaux.
Cette architecture assure une solution robuste, évolutive et efficace pour améliorer le suivi du merchandising et optimiser la stratégie commerciale des entreprises. 🚀
Entrée : Image du rayon d’un point de vente
Sortie : Pourcentages de visibilité des produits détectés
1. Charger le modèle YOLO pré-entraîné
2. Redimensionner l’image et la normaliser
3. Passer l’image dans le modèle pour obtenir les prédictions (bounding boxes, labels, scores de confiance)
4. Pour chaque produit détecté :
a. Calculer la surface occupée (largeur * hauteur du bounding box)
b. Calculer le pourcentage de linéaire par rapport à l’ensemble du rayon
5. Retourner les résultats sous forme de rapport
Entrée : Nom du produit du client et des marques concurrentes
Sortie : Base de données d’images de produits
1. Définir les sources de données (sites e-commerce, moteurs de recherche)
2. Construire une requête de recherche pour chaque produit
3. Récupérer les URL des images trouvées
4. Télécharger et stocker les images dans la base de données
5. Nettoyer les images et les préparer pour l'entraînement du modèle YOLO
- Téléchargement d’images : Interface intuitive pour charger des images.
- Visualisation des résultats : Affichage interactif des pourcentages de linéaire et des placements des produits.
- Exportation des rapports : Génération de rapports PDF et Excel avec les résultats d’analyse.
Notre solution permet :
- Une réduction significative du temps de traitement par point de vente.
- Une meilleure représentativité des données avec une couverture plus large des produits.
- Une objectivité accrue grâce à une détection automatisée et standardisée.
- Une scalabilité permettant d’ajouter facilement de nouveaux produits.
- NextJS
- TailwindCSS
- Python 3.10+
- Django Framework
- YOLOv5 (PyTorch)
- playwright (pour le crawling des données)
- SQLite (Base de données)
git clone https://github.com/Imeneallouche/Shelf.git
cd Shelf
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py runserver
npm run dev
Notre solution révolutionne le merchandising en automatisant la collecte et l’analyse des données grâce à l’IA et au web scraping (crawling plus en moins). Cette approche permet aux entreprises d’optimiser leur stratégie et de prendre des décisions basées sur des données précises et objectives.
🚀 Notre système est adaptable à tout type de produit et permet une scalabilité future.

