docs(architecture): ajout choix techniques et modèle de données

This commit is contained in:
2026-08-25 14:56:27 +02:00
parent 82bdc36a46
commit a8605b6481
+40
View File
@@ -18,6 +18,12 @@ Objectif : générer une représentation visuelle du ciel à partir de données
Entrée : CSV Hipparcos pré-traité
Sortie : carte du ciel visuelle (image/rendu Streamlit)
### Choix techniques
- **Projection** : implémentation manuelle (pas de lib dédiée type WCS d'astropy) - choix pédagogique assumé, type de projection (stéréographique, orthographique...) à arrêter en phase de pseudo-code
- **Pré-traitement du catalogue** : `astropy` (parsing du format Hipparcos brut)
- **Rendu graphique** : `plotly` (via `st.plotly_chart`) - interactivité native (zoom, hover, pan) sans développement custom, adapté à un scatter plot de quelques centaines à quelques dizaines de milliers de points.
## Pipeline B - Détection d'étoiles sur image réelle
Objectif : identifier la position d'étoiles (blobs lumineux) dans une image test fixe, sans référence au catalogue.
@@ -30,6 +36,11 @@ Objectif : identifier la position d'étoiles (blobs lumineux) dans une image tes
Entrée : image test (fichier image)
Sortie : liste de coordonnées (x, y) des étoiles détectées dans l'image
### Choix techniques
- **Détection de blobs** : `cv2.SimpleBlobDetector` (OpenCV) - filtrage qualité (taille, circularité, convexité, inertie) déjà géré nativement par le detector
- **Clustering de nettoyage de bruit** : retiré du scope v1. `SimpleBlobDetector` gère déjà l'essentiel du filtrage qualité en interne ; un clustering de déduplication spatiale (regrouper plusieurs détections voisines correspondant à la même étoile) ne sera réintroduit que si ce problème est observé concrètement en pratique sur des images de test réelles.
## Pipeline C - Classification Messier / non-Messier
Objectif : déterminer si une image donnée, cadrée sur un objet du ciel profond, représente un objet du catalogue Messier ou non. **Indépendant du pipeline B** : ne prend pas en entrée les blobs détectés dans une image de test, mais des vignettes dédiées, préparées et labellisées à l'avance.
@@ -57,11 +68,40 @@ Objectif : déterminer si une image donnée, cadrée sur un objet du ciel profon
> Note : l'identification formelle de l'objet (nom, caractéristiques) en cas de classification positive est explicitement hors scope v1. C'est une amélioration identifiée pour une itération ultérieure (passage à une classification multi-classe).
### Choix techniques (C1/C2)
- **Modèle** : `MobileNet` (fine-tuning) - préféré à ViT-tiny, ce dernier étant réputé plus gourmand en données ; le dataset attendu (scraping sur 110 objets Messier + négatifs NGC) restera probablement de taille modeste (centaines d'images), un CNN pré-entraîné avec biais inductifs adaptés aux images est donc plus robuste sur ce volume
- **Framework** : `PyTorch` - préféré à Keras/TensorFlow malgré une prise en main plus verbeuse (boucle d'entraînement explicite), choix motivé par la priorité de compréhension en profondeur du mécanisme de fine-tuning plutôt que la vitesse de mise en oeuvre.
## Ce qui est explicitement hors scope v1
- Matching entre pipelines (A/B, B/C, A/C)
- Classification multi-classes (identification précise de l'objet Messier)
- Toute entrée caméra live (v1 = images statiques uniquement)
- Clustering de nettoyage du bruit en pipeline B (sauf besoin avéré en pratique)
## Modèle de données - catalogue Hipparcos pré-traité
**Fichier** : `dataset_hipparcos.csv`
**Séparateur** : `;`
**Encodage** : UTF-8
| Colonne | Type | Description |
|---------------|----------------|-----------------------------------------------------------------------------------------------------------|
| `hip_id` | int | Identifiant Hipparcos (clé unique) |
| `ra_deg` | float | Ascension droite, en degrés décimaux (converti depuis le format heures/minutes/secondes natif : 1h = 15°) |
| `dec_deg` | float | Déclinaison, en degrés décimaux (-90 à +90) |
| `magnitude` | float | Magnitude apparente (échelle inversée : plus la valeur est basse, plus l'objet est brillant) |
| `proper_name` | string ou NULL | Nom propre de l'étoile si disponible (absent pour la grande majorité des entrées du catalogue) |
Exemple de ligne (Sirius / Alpha Canis Majoris) :
```
hip_id;ra_deg;dec_deg;magnitude;proper_name
32349;101.2875;-16.71611112;-1.46;Sirius
```
> Note d'implémentation : les valeurs décimales ci-dessus utilisent un point comme séparateur (format attendu par `float()` en Python / `pandas.read_csv` par défaut), à ne pas confondre avec la notation à virgule utilisée à l'oral pendant la conception.
## Décisions techniques actées