Spaces:
Sleeping
Sleeping
File size: 3,466 Bytes
b510add 6cd05a0 b510add 6cd05a0 b510add | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | ---
title: YELY AI Module
emoji: ⛽
colorFrom: blue
colorTo: green
sdk: docker
pinned: false
license: mit
app_port: 7860
short_description: Solution d'IA basée sur la vision par ordinateur
---
# YELY — Module IA de vérification pompiste
Module autonome livré pour le cahier des charges YELY : lecture automatique
du terminal de pompe (prix, volume, prix du litre), calcul et vérification
de cohérence, exposés via une API.
Contrairement à la version précédente du prototype (qui s'appuyait sur
PaddleOCR/EasyOCR, des OCR génériques), ce module utilise un **modèle CRNN
entraîné sur nos propres données** (`models/crnn_fuel_pump_best.pt`) —
voir `docs/LIMITATIONS.md` pour un bilan honnête de sa précision actuelle
et des pistes d'amélioration.
## Structure
```
yely_ai_module/
├── app/
│ ├── main.py # API FastAPI (/analyze)
│ ├── preprocessing.py # détection écran + découpage en lignes
│ ├── recognizer.py # chargement du CRNN + inférence
│ ├── postprocess.py # normalisation numérique, calculs, cohérence
│ ├── rules.py # moteur de règles métier (blocage/succès)
│ └── config.py # seuils configurables (config.yaml)
├── models/
│ └── crnn_fuel_pump_best.pt # modèle sérialisé (livrable)
├── train/ # scripts d'entraînement (reproductibilité)
├── tests/ # tests unitaires (postprocess, règles)
├── web/ # interface web de démo (déploiement Netlify)
├── docs/ # documentation par module + limites identifiées
├── Dockerfile # déploiement Hugging Face Spaces
└── requirements.txt
```
## Installation
```bash
cd yely_ai_module
pip install -r requirements.txt
```
## Lancer l'API
```bash
uvicorn app.main:app --host 0.0.0.0 --port 8000
```
Ne pas utiliser `--reload` en usage normal : ça redémarre tout le worker
(et donc recharge le modèle CRNN, ~30-60s) à chaque modification de fichier.
## Appeler l'API
```bash
curl -X POST http://127.0.0.1:8000/analyze \
-F "image=@photo_pompe.jpg" \
-F "fuel_price=700" \
-F "driver_id=chauffeur-42" \
-F "pompiste_id=pompiste-7" \
-F "station_id=station-3"
```
### Réponse
```json
{
"success": true,
"image_quality": "valid",
"detected_liters": 14.28,
"detected_amount": 10000.0,
"fuel_price": 700.0,
"calculated_amount": 9996.0,
"calculated_liters": null,
"is_consistent": true,
"confidence_score": 0.93,
"message": "Données vérifiées avec succès.",
"driver_id": "chauffeur-42",
"pompiste_id": "pompiste-7",
"station_id": "station-3",
"transaction_datetime": "2026-07-05T20:00:00+00:00",
"photo_reference": "<uuid>.jpg"
}
```
Champs conformes au §13 du cahier des charges. Le `fuel_price` fourni par
l'appelant (système YELY) fait toujours autorité sur un prix lu à l'écran
(règle métier n°1).
## Tests
```bash
pytest tests/
```
## Ré-entraîner le modèle
```bash
cd train
python prepare_doctr_dataset.py # si le dataset a changé
python finetune_doctr.py --epochs 60
```
Voir `docs/LIMITATIONS.md` avant de ré-entraîner : le principal facteur
limitant est la diversité du jeu de données, pas les hyperparamètres.
## Déploiement
Voir `docs/WORKFLOW.md` §6 : frontend (`web/`) sur Netlify, API sur
Hugging Face Spaces (ce dépôt, via le `Dockerfile` à la racine).
|