docs(architecture): ajout choix techniques et modèle de données
This commit is contained in:
@@ -18,6 +18,12 @@ Objectif : générer une représentation visuelle du ciel à partir de données
|
|||||||
Entrée : CSV Hipparcos pré-traité
|
Entrée : CSV Hipparcos pré-traité
|
||||||
Sortie : carte du ciel visuelle (image/rendu Streamlit)
|
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
|
## 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.
|
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)
|
Entrée : image test (fichier image)
|
||||||
Sortie : liste de coordonnées (x, y) des étoiles détectées dans l'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
|
## 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.
|
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).
|
> 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
|
## Ce qui est explicitement hors scope v1
|
||||||
|
|
||||||
- Matching entre pipelines (A/B, B/C, A/C)
|
- Matching entre pipelines (A/B, B/C, A/C)
|
||||||
- Classification multi-classes (identification précise de l'objet Messier)
|
- Classification multi-classes (identification précise de l'objet Messier)
|
||||||
- Toute entrée caméra live (v1 = images statiques uniquement)
|
- 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
|
## Décisions techniques actées
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user