grapp / README.md
adrescop's picture
Version web : app.py et README
fddeb71 verified
|
Raw History Blame Contribute Delete
6.59 kB
---
title: GRAPP
emoji: 🍇
colorFrom: pink
colorTo: purple
sdk: static
pinned: false
license: mit
short_description: Choisir son vin sans se prendre la grappe
---
# 🍇 GRAPP — L'app pour choisir ton vin sans te prendre la grappe
> Même si t'y connais rien, GRAPP t'aide à trouver LE vin que tu kiffes, super facilement.
**Problème.** En 60 ans, la consommation de vin des Français a chuté de 70 %. Les jeunes trouvent le vin élitiste,
compliqué et intimidant (« c'est cher », « je préfère la bière », « au bar je commande une blonde, c'est plus facile »).
Devant une carte des vins de resto, ils ne savent pas quoi choisir. Le vin pèse pourtant 15 % de la production agricole
française en valeur, et 1 exploitation agricole sur 5 a une activité viticole.
**Solution.** GRAPP (concept et direction artistique : projet de fin d'études de Manon Thomas, M2 DA, ECV Paris 2025)
transforme la carte des vins en conseil personnalisé, sans jargon :
| Module | Ce que ça fait | IA utilisée |
|---|---|---|
| 🥂 **Tchin Tchin !** | 1) photo de la carte du resto → GRAPP repère les vins proposés et leurs prix ; 2) quiz en 7 questions ; 3) top 3 avec un **% de match** et le *pourquoi* | OCR Tesseract + correspondance floue ; recommandation hybride (profil + embeddings de phrases Hugging Face) |
| 💖 **Mes p'tits favoris** | Garde tes vins pépites et te propose des vins du même style | Similarité d'embeddings |
| 💡 **Dico Vino** | Pose ta question comme tu veux (« pourquoi ma bouche gratte ? ») → explication cool du mot (ici : tanins) | Recherche sémantique |
### Ce qui va au-delà du cours
- **Pipeline multimodal** : image → texte (OCR) → entités (vins) → recommandation.
- **Correspondance floue** robuste aux erreurs d'OCR (« Cétes du Rhone » → Côtes du Rhône, « ler Cru » → 1er Cru).
- **Recommandation hybride explicable** : score pondéré entre critères du quiz et similarité sémantique d'une phrase libre,
avec les raisons affichées à l'utilisateur.
- **Modèle Hugging Face multilingue** (`paraphrase-multilingual-MiniLM-L12-v2`) avec **repli automatique** sur TF-IDF
hors ligne : l'app tourne toujours.
---
## 📘 Guide d'utilisation
### 1. Installer (une seule fois)
Il faut **Python 3.10+**.
```bash
cd GRAPP
python -m venv .venv
source .venv/bin/activate # Windows : .venv\Scripts\activate
pip install -r requirements.txt
```
Pour lire les photos de cartes, installer aussi le moteur **Tesseract** :
- macOS : `brew install tesseract tesseract-lang`
- Windows : installeur sur https://github.com/UB-Mannheim/tesseract/wiki
- Linux : `sudo apt install tesseract-ocr tesseract-ocr-fra`
> Sans Tesseract, tout marche sauf la lecture de photo : on colle alors le texte de la carte.
> Au premier lancement, le modèle Hugging Face (~470 Mo) se télécharge automatiquement.
### 2. Lancer
```bash
streamlit run app.py
```
L'app s'ouvre dans le navigateur (http://localhost:8501).
### 3. Utiliser
1. **Tchin Tchin !** → choisis *Photo*, *Carte d'exemple (démo)* ou *Coller le texte*, puis **Lire la carte**
(ou « Pas de carte, on passe au quiz »).
2. Réponds aux **7 questions** (plan du jour, verre ou bouteille, couleur, bulles, sucre, corps, goûts, budget, envie en une phrase).
3. GRAPP affiche ton **top 3** avec le % de match. ❤️ pour garder un vin, 🔁 pour des vins du même style.
4. **Mes p'tits favoris** : tes vins enregistrés (dans `data/favoris.json`).
5. **Dico Vino** : tape un mot ou une question.
Scénario de démo conseillé pour la vidéo : *Carte d'exemple* → Apéro entre potes → bouteille → Rouge → Sans bulles →
Sec → Léger → Fruité, 30 € → « un truc frais avec de la charcuterie » ⇒ Chinon / Beaujolais-Villages en tête.
### 4. Vérifier que tout marche
```bash
python tests/test_grapp.py # ou : python -m pytest -q
```
### 5. (Optionnel) Ajouter de vraies bouteilles notées — Kaggle
Télécharger `winemag-data-130k-v2.csv` depuis https://www.kaggle.com/datasets/zynicide/wine-reviews dans `data/`, puis :
```bash
python scripts/enrichir_kaggle.py
```
Chaque vin recommandé affiche alors les bouteilles réelles les mieux notées de son appellation.
### 6. Mettre l'app en ligne (lien public, gratuit)
**Hugging Face Space statique + stlite :** `index.html` lance le même `app.py` directement dans le navigateur
du visiteur grâce à [stlite](https://github.com/whitphx/stlite) (Streamlit compilé en WebAssembly via Pyodide). Pas de serveur, donc gratuit.
1. Sur https://huggingface.co → *New Space* → nom `grapp`, SDK **Static**.
2. *Files* → *Upload files* : glisse tout le contenu du dossier GRAPP (dossiers compris) → *Commit*.
3. Lien : `https://huggingface.co/spaces/<ton-pseudo>/grapp`.
Différences avec la version locale : pas de Tesseract dans le navigateur (la carte d'exemple utilise le texte déjà
extrait, `data/carte_exemple.txt` ; pour une autre carte, on colle son texte), et la recherche sémantique utilise le
mode TF-IDF. Pour la version complète en ligne : `Dockerfile` (Hugging Face Docker, payant) ou Streamlit Community Cloud
(gratuit, via GitHub, utilise `packages.txt`).
> En ligne, les favoris sont gardés le temps de la visite.
---
## 🗂️ Contenu du projet
```
app.py Interface Streamlit (charte graphique du dossier PFE)
grapp/engine.py Moteur de recommandation, embeddings, Dico Vino
grapp/carte.py OCR de la carte + correspondance floue + prix
data/vins.csv 75 profils de vins par appellation (couleur, bulles, sucre, corps, acidité, tanins, arômes, accords, prix)
data/dico.csv 34 définitions du Dico Vino
assets/carte_exemple.png Carte des vins fictive pour la démo
scripts/build_dataset.py Régénère data/vins.csv
scripts/generer_carte_exemple.py Régénère la carte d'exemple
scripts/enrichir_kaggle.py Enrichissement optionnel avec Wine Reviews (Kaggle)
tests/test_grapp.py Tests automatiques
SOURCES.md Bibliothèques, modèles, données et sources citées
PROMPTS.md Où et comment l'IA générative a été utilisée, avec les prompts
```
## Limites
- La base contient des **profils typiques d'appellation** (75), pas chaque domaine : deux vins d'une même appellation peuvent différer.
- Les prix sont **indicatifs** (France, caviste) ; GRAPP utilise le prix de la carte quand il le lit.
- À consommer avec modération. L'abus d'alcool est dangereux pour la santé. App réservée aux 18 ans et plus.