Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions docs/03-TECHNICAL-SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,9 @@ Photo (takePictureAsync)
OCR (référentiel photo, `W×H` capturé) vers l'écran (proportions, `resizeMode`) ;
- **Perf** (§8) : traitement borné hors bandeau UI, import paresseux conservé.

> **Statut M-12 : à venir (backlog)** — issues M12-01..08 (#205-#212).
> **Statut M-12 : livré ✅** — issues M12-01..08 (#205-#212) closés, intégrés à
> la release **v1.0.0** (modules `ocrImagePreprocessor`, `ocrResultMapper`,
> `ocrCandidateAnalyzer`, `ocrProposals`, écran `/scan/ocr-review`, PR #214/#215).

---

Expand Down Expand Up @@ -292,10 +294,11 @@ Priorités :
```
Plugins (`app.json`) : `["expo-mlkit-ocr", { "iosEngine": "auto" }]` et `["expo-build-properties", { "ios": { "deploymentTarget": "16.4" } }]`.

> **M-12 (engagé)** : `expo-image-manipulator` **installé** (prétraitement, M12-01 —
> **M-12 (livré)** : `expo-image-manipulator` **installé** (prétraitement, M12-01 —
> redimensionnement ≤ 2600 px + ré-encodage JPEG 0.85) ; les **bounding boxes**
> sont exposées nativement par `expo-mlkit-ocr` (niveau *ligne*, M12-02), sans
> wrapper : `mapRecognitionResult` les projette en `OcrTextZone`.
> wrapper : `mapRecognitionResult` les projette en `OcrTextZone`. Les zones sont
> proposées à la sélection en **liste cliquable** (M12-05, test physique).

---

Expand Down
9 changes: 5 additions & 4 deletions docs/04-FONCTIONAL-SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -268,9 +268,10 @@ Valeurs validées → recherche (si suffisant) ← US-OCR-07
- l'application **ne présente jamais** une identification comme certaine ;
- la fiabilisation est **mesurée** sur un jeu de couvertures réelles (jeu de données + taux d'erreurs, cf. `12-TESTING.md`).

> **Statut M-12 : à venir (backlog)** — issues M12-01..08 (#205-#212), user
> stories US-OCR-01..08 (`08-USER-STORIES.md` §11). Voir aussi
> `03-TECHNICAL-SPEC.md` §5.5.
> **Statut M-12 : livré ✅** — issues M12-01..08 (#205-#212) closés et intégrés
> à la release **v1.0.0** ; corrections test physique (PR #215) et synthèse dans
> `12-TESTING.md` §5.4. User stories US-OCR-01..08 (`08-USER-STORIES.md` §11).
> Voir aussi `03-TECHNICAL-SPEC.md` §5.5.

---

Expand Down Expand Up @@ -556,7 +557,7 @@ L'application vérifie, **selon le format choisi dans la popup** :
| Caméra / OCR | ✅ |
| — Surcouche de scan ciblé | ✅ (v0.7.1, US-ID-08) |
| — Validation / correction des infos détectées | ✅ (v0.7.1, US-ID-09) |
| — OCR v2 interactif & fiabilisation | 🚧 (v1.1.0, M-12 — §5.6, US-OCR-01..08) |
| — OCR v2 interactif & fiabilisation | ✅ (v1.0.0, M-12 — §5.6, US-OCR-01..08) |
| Saisie manuelle | ✅ |
| Résultat Possédé / Absent | ✅ |
| Gestion des doublons | ✅ |
Expand Down
17 changes: 9 additions & 8 deletions docs/05-ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -290,16 +290,17 @@ module natif est **paresseux** (dans `recognize`) : sur CI / hors Development Bu
retourne `null` sans bloquer les tests. `NoopOcrEngine` reste disponible comme repli.
<b>La reconnaissance brute se valide sur téléphone physique</b> (Development Build).

**Évolution M-12 — OCR interactif & fiabilisation (à venir, US-OCR-01..08)** :
- `OcrFrameResult` ({ text }) évolue vers un résultat avec **zones** (`blocks` /
`lines` / `elements` + `boundingBox`) — gap à confirmer dans `expo-mlkit-ocr`
(issue M12-02 #206) ;
- `ocrImagePreprocessor` (prétraitement éphémère : redimensionnement + contraste)
branché avant `recognize` (issue M12-01 #205) ;
**Évolution M-12 — OCR interactif & fiabilisation (livré, US-OCR-01..08)** :
- `OcrFrameResult` transporte le texte **et** les **zones** (`blocks`→`lines`,
niveau **ligne**, chacune avec sa `boundingBox` en pixels image d'origine) —
mappées par `ocrResultMapper` (issue M12-02 #206) ;
- `ocrImagePreprocessor` (prétraitement éphémère : redimensionnement ≤ 2600 px +
ré-encodage JPEG, jamais d'écriture sur stockage) branché avant `recognize`
(issue M12-01 #205) ;
- `ocrCandidateAnalyzer` produit des **candidats par champ** avec score de
confiance (règles métier : pages/prix/année/numéro) (issue M12-03 #207) ;
- nouvel écran `/scan/ocr-review` : overlay photo + zones cliquables + conversion
de coordonnées image→écran (issues M12-05 ../09) ;
- écran `/scan/ocr-review` : photo + **liste des textes détectés** cliquables
(choix validé sur device à la place de l'overlay tap-image, M12-05/06) ;
- intégration des valeurs validées à `identificationService.searchByOcrFields`
(issue M12-07 #211).

Expand Down
29 changes: 14 additions & 15 deletions docs/08-USER-STORIES.md
Original file line number Diff line number Diff line change
Expand Up @@ -686,9 +686,9 @@ Chaque story est identifiée par un code (ex. `US-DB-01`) et possède :
> Évolution du flux OCR de l'Épique 4 : l'application lit la couverture,
> **analyse des candidats** (titre, numéro/tome, année, pages, prix…) avec un
> **niveau de confiance**, **propose automatiquement** les champs fiables et
> ne fait **intervenir Marc que pour les zones ambiguës**, sélectionnées en
> touchant directement la photo. Cible : après v1.0.0 (**M-12 → v1.1.0**,
> issue #205-#212).
> ne fait **intervenir Marc que pour les zones ambiguës**, sélectionnées parmi
> la liste des textes détectés. Cible : livrée dans la **v1.0.0** (**M-12 / M-12R**,
> issues #205-#212, #215).

### US-OCR-01 — Préparer la photo avant la lecture (prétraitement)
> En tant que **Marc**, je veux **que la photo de la couverture soit retravaillée (redimensionnement, contraste) avant la reconnaissance** afin de **maximiser les chances de lecture, même sur une couverture stylisée**.
Expand All @@ -698,7 +698,7 @@ Chaque story est identifiée par un code (ex. `US-DB-01`) et possède :
- aucune image n'est enregistrée (analyse éphémère, R14.2) ;
- la lecture est plus fiable qu'à l'écran nu sur les couvertures fortement stylisées.

**Statut (M-12)** : backlog — [M12-01 (#205)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/205).
**Statut (M-12)** : livré ✅ ([M12-01 (#205)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/205), v1.0.0).

**Priorité** : haute.

Expand All @@ -710,7 +710,7 @@ Chaque story est identifiée par un code (ex. `US-DB-01`) et possède :
- les positions sont exprimées dans un référentiel exploitable par l'écran ;
- le moteur reste abstrait (`OcrEngine`) et la CI reste verte sans module natif.

**Statut (M-12)** : backlog — [M12-02 (#206)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/206).
**Statut (M-12)** : livré ✅ ([M12-02 (#206)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/206), v1.0.0).

**Priorité** : haute.

Expand All @@ -722,7 +722,7 @@ Chaque story est identifiée par un code (ex. `US-DB-01`) et possède :
- les règles métier discriminent : `192 PAGES` ≠ numéro, `€8,50` = prix, `2026` = année, `TOME 12` / `N° 125` = numéro ;
- le module est testable sans dépendance matérielle.

**Statut (M-12)** : backlog — [M12-03 (#207)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/207).
**Statut (M-12)** : livré ✅ ([M12-03 (#207)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/207), v1.0.0).

**Priorité** : haute.

Expand All @@ -734,20 +734,19 @@ Chaque story est identifiée par un code (ex. `US-DB-01`) et possède :
- en cas de candidats à confiance proche, **aucune** proposition automatique (validation utilisateur requise) ;
- les propositions restent **toujours** modifiables.

**Statut (M-12)** : backlog — [M12-04 (#208)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/208).
**Statut (M-12)** : livré ✅ ([M12-04 (#208)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/208), v1.0.0).

**Priorité** : moyenne.

### US-OCR-05 — Choisir la bonne zone sur la photo
> En tant que **Marc**, je veux **voir la photo avec les zones de texte détectées et toucher directement la bonne zone** afin de **dire à l'application où se trouve l'information** quand un champ est ambigu ou multiple.
> En tant que **Marc**, je veux **voir la photo avec les textes détectés et choisir le bon texte** afin de **dire à l'application où se trouve l'information** quand un champ est ambigu ou multiple.

**Critères d'acceptation** :
- après la capture, un écran intermédiaire affiche la photo + les zones OCR en overlay ;
- les zones suivent fidèlement la photo quel que soit l'écran (conversion des coordonnées) ;
- chaque zone est **cliquable** ;
- après la capture, un écran intermédiaire affiche la photo + les textes détectés ;
- chaque texte détecté est **cliquable** (choix par liste, validé sur device — le tap direct sur l'image étant imprécis) ;
- aucune image n'est enregistrée.

**Statut (M-12)** : backlog — [M12-05 (#209)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/209).
**Statut (M-12)** : livré ✅ ([M12-05 (#209)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/209), v1.0.0).

**Priorité** : haute.

Expand All @@ -760,7 +759,7 @@ Chaque story est identifiée par un code (ex. `US-DB-01`) et possède :
- les champs non identifiés restent vides (jamais de blocage) ;
- la correction prend au plus 2-3 gestes par champ.

**Statut (M-12)** : backlog — [M12-06 (#210)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/210).
**Statut (M-12)** : livré ✅ ([M12-06 (#210)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/210), v1.0.0).

**Priorité** : haute.

Expand All @@ -772,7 +771,7 @@ Chaque story est identifiée par un code (ex. `US-DB-01`) et possède :
- information absente → saisie manuelle **pré-remplie** avec ce qui est connu (pas de blocage) ;
- plusieurs candidats possibles → l'utilisateur choisit (jamais de choix automatique hasardeux).

**Statut (M-12)** : backlog — [M12-07 (#211)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/211).
**Statut (M-12)** : livré ✅ ([M12-07 (#211)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/211), v1.0.0).

**Priorité** : moyenne.

Expand All @@ -785,7 +784,7 @@ Chaque story est identifiée par un code (ex. `US-DB-01`) et possède :
- les règles métier (US-OCR-03) et les seuils (US-OCR-04) sont ajustés à partir des mesures ;
- la synthèse est documentée (`docs/12-TESTING.md`).

**Statut (M-12)** : backlog — [M12-08 (#212)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/212).
**Statut (M-12)** : livré ✅ ([M12-08 (#212)](https://github.com/donovan-dev-web/PicsouCollectionApp/issues/212), v1.0.0).

**Priorité** : moyenne.

Expand Down
58 changes: 44 additions & 14 deletions docs/09-ISSUE.md
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,8 @@ Les milestones correspondent aux **phases de la roadmap** (`11-ROADMAP.md`).
| `M-10R2` | 2ᵉ passe retours test physique | SafeZone drawer, permission caméra + onboarding 1er lancement, popup résultat, form valider header, paramètres sous-menus, header fiche, tri collection, OCR numéro, écran Recherche → v0.9.2 (livrée, PR #176) |
| `M-09` | Tests terrain & publication | Validation réelle, retours physique → v0.9.3 (M09-01 panneau recherche #177) |
| `M-11` | Review & Qualité v1.0.0 | Audit doc ↔ code, revue, refactor, tests, retrait Play Store, publication APK GitHub → v1.0.0 (#181-#190) |
| `M-12` | OCR interactif & fiabilisation (v1.1.0) | Prétraitement de la photo, OCR texte + bounding boxes, analyse de candidats par champ (titre, numéro/tome, année, pages, prix) avec confiance, propositions automatiques, sélection interactive des zones, correction rapide, intégration à la recherche, jeu de test réel → **après v1.0.0** (#205-#212) |
| `M-12` | OCR interactif & fiabilisation (v1.1.0) | Prétraitement de la photo, OCR texte + bounding boxes, analyse de candidats par champ (titre, numéro/tome, année, pages, prix) avec confiance, propositions automatiques, sélection interactive des zones, correction rapide, intégration à la recherche, jeu de test réel → livré dans **v1.0.0** (#205-#212) |
| `M-12R` | Corrections test physique M-12 | Corrections post-test physique M-12 (PR #215) : panneau d'infos caméra retiré, popup résultat reconstruite, zones cliquables → liste de textes, réticule retiré, code-barres en 1ʳᵉ partie de formulaire, écran Recherche édition + numéro → **v1.0.0** |

### Règle d'attribution
- Chaque milestone a une **date de fin cible** (indicative) et une **description** ;
Expand Down Expand Up @@ -293,22 +294,25 @@ M-10/M-10R/M-10R2 terminées, correction issues ouvertes pendant la Phase 9
|---|---|---|---|
| M09-01 | Collection : panneau de recherche repliable (bouton Rechercher) | #177 | En cours (PR #178) |

**Milestone M-12 « OCR interactif & fiabilisation » (v1.1.0)** — après v1.0.0 ·
milestone GitHub #17 · issues **#205 à #212** · ajoutées au project #5 (To Do, P1)
**Milestone M-12 « OCR interactif & fiabilisation » (v1.1.0)** — réalisé avant la
release finale et **livré dans v1.0.0** · milestone GitHub #17 (clos) · issues
**#205 à #212** · project #5

| Issue | Titre | GitHub | Statut |
|---|---|---|---|
| M12-01 | OCR : prétraitement de la photo avant reconnaissance | #205 | À faire |
| M12-02 | OCR : récupérer texte + bounding boxes (ML Kit) | #206 | À faire |
| M12-03 | OCR : analyse de candidats par champ + score de confiance | #207 | À faire |
| M12-04 | OCR : propositions automatiques et seuil de confiance | #208 | À faire |
| M12-05 | OCR : écran interactif — overlay photo + zones cliquables | #209 | À faire |
| M12-06 | OCR : sélection d'une zone pour un champ + correction rapide | #210 | À faire |
| M12-07 | OCR : brancher les valeurs validées à la recherche / l'ajout | #211 | À faire |
| M12-08 | OCR : jeu de test réel, mesure des erreurs, ajustement des règles | #212 | À faire |

Voir `08-USER-STORIES.md` §11 (US-OCR-01..08). Backlog : non engagé tant que
**M-11 / v1.0.0** n'est pas clôturé.
| M12-01 | OCR : prétraitement de la photo avant reconnaissance | #205 | Done |
| M12-02 | OCR : récupérer texte + bounding boxes (ML Kit) | #206 | Done |
| M12-03 | OCR : analyse de candidats par champ + score de confiance | #207 | Done |
| M12-04 | OCR : propositions automatiques et seuil de confiance | #208 | Done |
| M12-05 | OCR : écran interactif — zones de texte cliquables (liste) | #209 | Done |
| M12-06 | OCR : sélection d'une zone pour un champ + correction rapide | #210 | Done |
| M12-07 | OCR : brancher les valeurs validées à la recherche / l'ajout | #211 | Done |
| M12-08 | OCR : jeu de test réel, mesure des erreurs, ajustement des règles | #212 | Done |

Livré : 8 issues closes (PR #214 M-12 ; PR #215 M-12R corrections du test
physique) → incluses dans la release **v1.0.0** (#189). Voir
`08-USER-STORIES.md` §11 (US-OCR-01..08) et `12-TESTING.md` §5.4 (synthèse de la
passe device).

### 6.2 Décisions de conception et causes racines (retours terrain)

Expand Down Expand Up @@ -370,6 +374,32 @@ Les retours test physique ont produit des choix structurants conservés ici.
(Possédé/Absent) ; **non trouvé** → repli `/scan/manual` pré-rempli. Le bouton
« Ajouter » de l'accueil reste un ajout.

**M-12 / M-12R (v1.0.0)**

*Décisions (implémentation et test physique M-12)*
- **M12-01 Prétraitement** : `expo-image-manipulator` en local, borné
(≤ 2600 px, ré-encodage JPEG 0.85) et **éphémère** (aucune image stockée) ;
le contraste n'est pas exposé nativement → reporté (documenté §8).
- **M12-02 Granularité** : niveau **ligne** ML Kit (texte + bounding boxes en
pixels de l'image d'origine) ; mappé par `mapRecognitionResult` → `OcrTextZone`.
- **M12-05 Sélection des zones** : remplacement de l'overlay cliquable sur la
photo par une **liste des textes détectés** (choix validé sur device : tap
image imprécis sur couvertures) — la photo reste affichée, chaque zone reste
cliquable.
- **M12-R1 Panneau caméra** : le panneau d'informations détectées (Nom /
Numéro / Édition-Date) affiché en standard est **retiré** (bruit visuel).
- **M12-R2 Popup résultat** : recalculée sur le modèle « carte centrée » du scan
code-barres (backdrop + feuille, lisible sur petits écrans).
- **M12-R4 Réticule** : le réticule jaune est retiré des surcouches OCR et
code-barres (non informatif, inutile sans overlay).
- **M12-R5 Formulaire** : le champ **code-barres** rejoint la 1ʳᵉ partie du
formulaire d'ajout (visible sans ouvrir la section Détails).
- **M12-R6 Recherche** : liste déroulante **« Édition »** (défaut : toutes les
éditions) + **numéro**, recherche directe dans la collection (fini le champ
« nom » inefficace en brocante).
- **CSV v2** : une ligne = une édition ; les doublons d'exemplaires sont
**ignorés** à l'import et retirés de l'exemple (`collection-exemple.csv`).

---

## 7. Branches (Git Flow)
Expand Down
Loading
Loading