grapp / README.md
adrescop's picture
Version web : app.py et README
fddeb71 verified
|
Raw History Blame Contribute Delete
6.59 kB
metadata
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+.

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 :

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

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

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 :

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 (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.