import initial

This commit is contained in:
Vincent Bourdon
2026-06-10 10:21:18 +02:00
commit 5a03f8a38d
59 changed files with 4777 additions and 0 deletions
@@ -0,0 +1,54 @@
# Amélioration du pipeline de conversion image → nonogram
## Objectif
Produire des grilles de nonogram à la fois jouables (≤ 6 blocs par ligne/colonne) et reconnaissables (ressemblance avec l'image source), à partir de photos Pexels/Unsplash ou d'images locales.
## Problème actuel
Le pipeline actuel (edge detection Canny + blend + Otsu) génère trop de pixels isolés sur les photos, produisant des clues illisibles (ex: 15 blocs sur une ligne de 32 cellules) et une grille méconnaissable.
## Pipeline cible
```
Image bytes
→ Grayscale + resize (inchangé)
→ Bilateral filter (d=9, sigmaColor=75, sigmaSpace=75)
→ Posterize 2 niveaux (seuillage médian sur histogramme)
→ Binarisation Otsu
→ Fermeture morphologique kernel 3×3 (combler micro-trous)
→ Suppression composantes connexes < min_component_size (défaut: 2px)
→ [Boucle] Vérification complexité clues
si max_blocks_per_line > max_clue_blocks :
fermeture morphologique kernel += 1
max 3 itérations
→ Grid
```
## Paramètres configurables
| Paramètre | Défaut | Description |
|---|---|---|
| `max_clue_blocks` | 6 | Max blocs acceptables par ligne/colonne |
| `min_component_size` | 2 | Taille min composante connexe (px) |
| `max_cleanup_iterations` | 3 | Nb max d'itérations de nettoyage supplémentaire |
## Nouvelle source locale
`LocalFileImageSource` — implémente `ImageSource`, lit un fichier depuis le disque.
CLI : nouvelle option `--local-image <path>` mutuellement exclusive avec `--theme`.
## Tests
- **Unitaires** : bilateral filter, cleanup morpho, boucle complexité sur grilles synthétiques
- **Intégration** : image simple → vérifie max blocs/ligne ≤ 6
- **Fixture** : `tests/fixtures/simple_icon.png` généré programmatiquement (forme simple)
## Fichiers modifiés
- `src/logimage/infrastructure/image/pillow_converter.py` — pipeline complet
- `src/logimage/infrastructure/image/local_file_source.py` — nouvelle source
- `src/logimage/cli/main.py` — option `--local-image`
- `tests/infrastructure/test_pillow_converter.py` — nouveaux tests
- `tests/fixtures/simple_icon.png` — image de test