Skip to content

Latest commit

 

History

History
338 lines (249 loc) · 9.2 KB

File metadata and controls

338 lines (249 loc) · 9.2 KB

Constitution et Acquisition des Données

La constitution d'un dataset de qualité est fondamentale pour le succès d'un projet de Computer Vision. Cette section détaille notre approche pour collecter et préparer les données d'entraînement.

Stratégie d'Acquisition

Notre stratégie s'articule autour de trois axes principaux :

  1. Collecte automatisée via des outils de scraping web
  2. Diversification des sources et types de contenu
  3. Validation manuelle pour garantir la qualité
.. mermaid::

   flowchart LR
       A[SerpAPI] --> B[Liste d'URLs]
       B --> C[Selenium + Chrome]
       C --> D[Captures d'écran]
       D --> E[~3000 images brutes]
       E --> F[Nettoyage manuel]
       F --> G[~2663 images finales]

Début de Constitution du Dataset

Capture via Selenium + undetected-chromedriver

La capture est effectuée avec un navigateur piloté par Selenium, combiné à undetected-chromedriver pour éviter les blocages par Google ou les systèmes anti-automatisation.

from selenium import webdriver
from undetected_chromedriver import Chrome

# Configuration du navigateur
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--window-size=1280,800')

driver = Chrome(options=options)

Process de Collecte d'URLs

Étape 1 : Génération d'URLs via SerpAPI

# Requêtes utilisées pour la collecte
queries = [
    "actualités france",
    "articles de blog",
    "sites d'information",
    "pages produits e-commerce",
    "documentation technique",
    "forums de discussion"
]

Note

SerpAPI génère des liens de pages existant sur internet à partir de nos requêtes. Pour chaque requête, maximum 100 liens sont collectés et une sauvegarde des liens est effectuée. Le code a été relancé 5 fois pour diversifier les sources.

Étape 2 : Configuration de la Capture

Paramètres de Capture
Paramètre Valeur
Largeur fenêtre 1280 pixels
Hauteur minimum 800 pixels
Hauteur maximum 10000 pixels
Nombre de scrolls max 30
Temps de pause 1 seconde

Étape 3 : Capture avec Scroll Progressif

def capture_with_scroll(driver, url):
    driver.get(url)

    # Scroll progressif et fluide
    total_height = driver.execute_script("return document.body.scrollHeight")
    current_position = 0
    scroll_step = total_height // 30  # Max 30 scrolls

    while current_position < total_height:
        driver.execute_script(f"window.scrollTo(0, {current_position});")
        time.sleep(1)  # Pause pour le chargement
        current_position += scroll_step

    # Capture d'écran complète
    return driver.get_screenshot_as_png()

Étape 4 : Sauvegarde et Métadonnées

Chaque capture est sauvegardée avec :

  • L'image au format PNG
  • L'URL correspondante
  • La timestamp de capture
  • Les dimensions de la page
  • Le statut de chargement
{
    "filename": "capture_001.png",
    "url": "https://example.com/article",
    "timestamp": "2025-06-16T10:30:00Z",
    "dimensions": {"width": 1280, "height": 3500},
    "status": "success"
}

Résultats de la Collecte

Volume de Données Collectées

.. grid:: 3

   .. grid-item-card:: 📊 Images Brutes
      :text-align: center

      ~3000 captures initiales

   .. grid-item-card:: 🧹 Après Nettoyage
      :text-align: center

      2663 images conservées

   .. grid-item-card:: 🎯 Priorisées
      :text-align: center

      Articles et vidéos YouTube

Distribution des Tailles d'Images

Distribution des tailles d'images collectées

Warning

Défis identifiés lors de la collecte :

  • Certaines captures ont de très grandes tailles (> 5000px de hauteur)
  • Les captures très longues posaient des problèmes de RAM à l'ouverture
  • Aucun redimensionnement appliqué par choix (préservation de la résolution)

Types de Contenu Priorisés

  1. Articles de Presse et Blogs
    • Structure claire avec titre, contenu, sidebar
    • Présence fréquente de publicités
    • Bon équilibre des classes d'annotation
  2. Pages de Visualisation YouTube
    • Interface standardisée
    • Éléments spécifiques : likes, vues, commentaires, recommandations
    • Excellent pour tester la précision du modèle
  3. Sites E-commerce
    • Mise en page complexe
    • Nombreux éléments visuels (images produits, prix, avis)
    • Cas d'usage réaliste pour l'application

Méthode de Nettoyage

Le nettoyage manuel s'est concentré sur :

✗ Suppression des erreurs de domaine (pages d'erreur 404, 500)
✗ Élimination des captures vides ou corrompues
✗ Retrait des contenus non-pertinents (captchas, redirections)
✓ Conservation des pages avec structure web classique
✓ Priorisation du contenu textuel riche

Critères de Conservation :

  • Présence de contenu textuel significatif
  • Structure web reconnaissable (header, content, footer)
  • Qualité de capture acceptable (pas de flou majeur)
  • Diversité des mises en page
  • Absence d'éléments perturbateurs (pop-ups bloquants, erreurs)

Traçabilité et Métadonnées

Un système complet de traçabilité a été mis en place :

metadata_structure = {
    "collection_info": {
        "date_start": "2025-01-15",
        "date_end": "2025-02-28",
        "total_queries": 30,
        "urls_collected": 3000,
        "images_captured": 2980,
        "images_kept": 2663
    },
    "quality_metrics": {
        "success_rate": 0.89,
        "avg_loading_time": 3.2,
        "error_types": ["timeout", "404", "captcha", "blocked"]
    }
}

Défis Techniques Rencontrés

Gestion des Sites Modernes

Problèmes et Solutions
Problème Solution Adoptée
Contenu chargé en JavaScript Attente supplémentaire après scroll
Protection anti-bot undetected-chromedriver + rotation User-Agent
Infinite scroll Limitation à 30 scrolls maximum
Pop-ups cookies/RGPD Script de fermeture automatique
Redirections Suivi et validation de l'URL finale

Performance et Optimisation

Gestion de la Mémoire :

# Optimisations appliquées
def optimize_memory():
    # Nettoyage cache navigateur
    driver.delete_all_cookies()
    driver.execute_script("window.localStorage.clear();")

    # Limitation taille images
    max_height = 10000
    if image_height > max_height:
        # Scroll partiel uniquement
        pass

Parallélisation :

  • Utilisation de plusieurs instances Chrome
  • Traitement par lots de 50 URLs
  • Gestion des timeouts et reprises automatiques

Validation de la Qualité

Métriques de Qualité Automatiques

def validate_capture_quality(image_path):
    image = cv2.imread(image_path)

    # Vérifications automatiques
    checks = {
        "min_height": image.shape[0] > 600,
        "min_width": image.shape[1] > 800,
        "not_blank": cv2.countNonZero(cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)) > 1000,
        "has_content": detect_text_presence(image),
        "valid_format": image is not None
    }

    return all(checks.values())

Contrôle Qualité Manuel

Un échantillonnage de 10% des images a été vérifié manuellement pour :

  • Cohérence de la structure de page
  • Lisibilité du contenu textuel
  • Présence des éléments web standard
  • Absence d'artefacts de capture

Tip

Bonnes Pratiques Identifiées :

  • Prioriser la diversité sur la quantité
  • Maintenir une traçabilité complète
  • Valider la qualité à chaque étape
  • Préserver la résolution originale pour l'annotation

Préparation pour l'Annotation

Les images validées sont organisées selon la structure suivante :

dataset_raw/
├── images/
│   ├── capture_001.png
│   ├── capture_002.png
│   └── ...
├── metadata/
│   ├── urls.json
│   ├── capture_info.json
│   └── quality_report.json
└── logs/
    ├── collection.log
    └── errors.log

Cette organisation facilite l'étape suivante d'annotation manuelle via Roboflow et assure une transition fluide vers la phase de modélisation.