test
Browse files- README.md +12 -109
- README2.md +109 -0
README.md
CHANGED
|
@@ -1,109 +1,12 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
- Automatische Schema-Erstellung beim Start
|
| 14 |
-
- Light-Tests (Score-Mapping + DB Roundtrip)
|
| 15 |
-
|
| 16 |
-
## Projektstruktur
|
| 17 |
-
|
| 18 |
-
```
|
| 19 |
-
.
|
| 20 |
-
├── app.py # Gradio UI & Callback-Logik
|
| 21 |
-
├── db.py # Datenbank-Modelle & Hilfsfunktionen
|
| 22 |
-
├── model.py # CLIP-Laden, Embeddings, Score-Berechnung
|
| 23 |
-
├── precompute_embeddings.py # Skript zum Vorberechnen der Bild-Embeddings
|
| 24 |
-
├── images.csv # Bildpool (image_id, image_url, clip_model, embedding_path)
|
| 25 |
-
├── embeddings/ # .npy-Embeddings (initial leer, Skript befüllt)
|
| 26 |
-
├── tests/ # Pytest-Tests
|
| 27 |
-
├── requirements.txt
|
| 28 |
-
├── runtime.txt # Python-Version für HF Spaces (3.10)
|
| 29 |
-
├── .env.example # Beispiel für lokale Entwicklung
|
| 30 |
-
└── README.md
|
| 31 |
-
```
|
| 32 |
-
|
| 33 |
-
## Vorbereitung
|
| 34 |
-
|
| 35 |
-
1. **Python 3.10** installieren (lokal oder via venv/conda).
|
| 36 |
-
2. Repository klonen und Abhängigkeiten installieren:
|
| 37 |
-
```bash
|
| 38 |
-
pip install -r requirements.txt
|
| 39 |
-
```
|
| 40 |
-
3. `.env` anlegen (siehe `.env.example`) oder `DATABASE_URL` direkt exportieren.
|
| 41 |
-
```bash
|
| 42 |
-
export DATABASE_URL=postgresql+psycopg2://user:pass@host:5432/dbname
|
| 43 |
-
```
|
| 44 |
-
|
| 45 |
-
## Embeddings vorrechnen
|
| 46 |
-
|
| 47 |
-
Das Skript lädt jedes Bild aus `images.csv`, berechnet das CLIP-Embedding und speichert es unter `embedding_path`.
|
| 48 |
-
|
| 49 |
-
```bash
|
| 50 |
-
python precompute_embeddings.py --csv images.csv --model-name ViT-B-32 --pretrained openai
|
| 51 |
-
```
|
| 52 |
-
|
| 53 |
-
Hinweise:
|
| 54 |
-
- Die Bild-URLs müssen öffentlich erreichbar sein.
|
| 55 |
-
- Beim ersten Lauf wird das Modell automatisch geladen (~1x pro Space).
|
| 56 |
-
- Embedding-Dateien (`.npy`) werden im `embeddings/` Ordner gespeichert. Diese Dateien **müssen** ins Repo eingecheckt oder im Space verfügbar sein.
|
| 57 |
-
|
| 58 |
-
## Lokale Entwicklung
|
| 59 |
-
|
| 60 |
-
1. Embeddings berechnen (siehe oben).
|
| 61 |
-
2. App starten:
|
| 62 |
-
```bash
|
| 63 |
-
python app.py
|
| 64 |
-
```
|
| 65 |
-
3. Gradio öffnet standardmäßig `http://127.0.0.1:7860`.
|
| 66 |
-
|
| 67 |
-
## Tests
|
| 68 |
-
|
| 69 |
-
```bash
|
| 70 |
-
pytest
|
| 71 |
-
```
|
| 72 |
-
|
| 73 |
-
## Deployment auf Hugging Face Spaces
|
| 74 |
-
|
| 75 |
-
1. **Space anlegen**
|
| 76 |
-
- Typ: *Gradio*
|
| 77 |
-
- Runtime: Python 3.10 (`runtime.txt` ist bereits enthalten)
|
| 78 |
-
|
| 79 |
-
2. **Secrets setzen**
|
| 80 |
-
- Im Space `Settings` → `New secret`
|
| 81 |
-
- Schlüssel: `DATABASE_URL`
|
| 82 |
-
- Wert: PostgreSQL-Verbindungsstring (z. B. von Neon/Supabase)
|
| 83 |
-
|
| 84 |
-
3. **Embeddings bereitstellen**
|
| 85 |
-
- Lokal `precompute_embeddings.py` ausführen
|
| 86 |
-
- Die erzeugten `.npy`-Dateien unter `embeddings/` committen und zum Space pushen (z. B. via `git add embeddings/*.npy`)
|
| 87 |
-
- Alternativ die Dateien manuell im Space hochladen
|
| 88 |
-
|
| 89 |
-
4. **Code pushen**
|
| 90 |
-
- Repo-Inhalt in den Space pushen (oder per `Add file` hochladen)
|
| 91 |
-
|
| 92 |
-
5. **Space starten**
|
| 93 |
-
- Beim Start erstellt `app.py` automatisch das DB-Schema (`users`, `scores` + Indizes)
|
| 94 |
-
- UI erscheint mit deutschem Leaderboard
|
| 95 |
-
|
| 96 |
-
## Datenbankschema
|
| 97 |
-
|
| 98 |
-
- `users`: speichert `username` (kanonisch, lowercase) und `display_name`
|
| 99 |
-
- `scores`: enthält `username`, `canonical_username`, `image_id`, `score`, `similarity`, `text`, `created_at`
|
| 100 |
-
- Mehrere Scores pro Benutzer sind erlaubt, keine Deduplication
|
| 101 |
-
|
| 102 |
-
## Hinweise
|
| 103 |
-
|
| 104 |
-
- Scores werden deterministisch berechnet (gleicher Text + Bild → gleicher Score)
|
| 105 |
-
- Keine IP- oder personenbezogene Daten werden geloggt
|
| 106 |
-
- Für produktiven Einsatz unbedingt abgesicherte Postgres-Instanz verwenden
|
| 107 |
-
- Bei neuen Bildern `images.csv` erweitern, Skript erneut laufen lassen und `.npy`-Dateien committen
|
| 108 |
-
|
| 109 |
-
Viel Spaß beim Scoren! 🎯
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: My Game Space
|
| 3 |
+
emoji: 🕹️
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: green
|
| 6 |
+
sdk: gradio
|
| 7 |
+
sdk_version: "4.21.0"
|
| 8 |
+
app_file: app.py
|
| 9 |
+
pinned: false
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
README2.md
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# CLIP Score Challenge
|
| 2 |
+
|
| 3 |
+
Eine produktionsnahe Gradio-App, die Benutzertexte gegen einen festen Bildpool bewertet. Die App nutzt CLIP (open-clip ViT-B-32, Pretrained "openai") für Text- und Bild-Embeddings und speichert alle Scores in einer externen PostgreSQL-Datenbank.
|
| 4 |
+
|
| 5 |
+
## Features
|
| 6 |
+
|
| 7 |
+
- Fester Bildpool aus `images.csv` (nur externe URLs, keine Uploads)
|
| 8 |
+
- Vorberechnete Bild-Embeddings (Kosinus-Ähnlichkeit → Score 0–1000)
|
| 9 |
+
- Deutschsprachige UI mit Leaderboard (global, pro Bild, eigene letzten Scores)
|
| 10 |
+
- Persistenz via PostgreSQL (SQLAlchemy + psycopg2)
|
| 11 |
+
- Keine Moderation, kein Rate-Limit
|
| 12 |
+
- Skript zur Vorberechnung der Embeddings
|
| 13 |
+
- Automatische Schema-Erstellung beim Start
|
| 14 |
+
- Light-Tests (Score-Mapping + DB Roundtrip)
|
| 15 |
+
|
| 16 |
+
## Projektstruktur
|
| 17 |
+
|
| 18 |
+
```
|
| 19 |
+
.
|
| 20 |
+
├── app.py # Gradio UI & Callback-Logik
|
| 21 |
+
├── db.py # Datenbank-Modelle & Hilfsfunktionen
|
| 22 |
+
├── model.py # CLIP-Laden, Embeddings, Score-Berechnung
|
| 23 |
+
├── precompute_embeddings.py # Skript zum Vorberechnen der Bild-Embeddings
|
| 24 |
+
├── images.csv # Bildpool (image_id, image_url, clip_model, embedding_path)
|
| 25 |
+
├── embeddings/ # .npy-Embeddings (initial leer, Skript befüllt)
|
| 26 |
+
├── tests/ # Pytest-Tests
|
| 27 |
+
├── requirements.txt
|
| 28 |
+
├── runtime.txt # Python-Version für HF Spaces (3.10)
|
| 29 |
+
├── .env.example # Beispiel für lokale Entwicklung
|
| 30 |
+
└── README.md
|
| 31 |
+
```
|
| 32 |
+
|
| 33 |
+
## Vorbereitung
|
| 34 |
+
|
| 35 |
+
1. **Python 3.10** installieren (lokal oder via venv/conda).
|
| 36 |
+
2. Repository klonen und Abhängigkeiten installieren:
|
| 37 |
+
```bash
|
| 38 |
+
pip install -r requirements.txt
|
| 39 |
+
```
|
| 40 |
+
3. `.env` anlegen (siehe `.env.example`) oder `DATABASE_URL` direkt exportieren.
|
| 41 |
+
```bash
|
| 42 |
+
export DATABASE_URL=postgresql+psycopg2://user:pass@host:5432/dbname
|
| 43 |
+
```
|
| 44 |
+
|
| 45 |
+
## Embeddings vorrechnen
|
| 46 |
+
|
| 47 |
+
Das Skript lädt jedes Bild aus `images.csv`, berechnet das CLIP-Embedding und speichert es unter `embedding_path`.
|
| 48 |
+
|
| 49 |
+
```bash
|
| 50 |
+
python precompute_embeddings.py --csv images.csv --model-name ViT-B-32 --pretrained openai
|
| 51 |
+
```
|
| 52 |
+
|
| 53 |
+
Hinweise:
|
| 54 |
+
- Die Bild-URLs müssen öffentlich erreichbar sein.
|
| 55 |
+
- Beim ersten Lauf wird das Modell automatisch geladen (~1x pro Space).
|
| 56 |
+
- Embedding-Dateien (`.npy`) werden im `embeddings/` Ordner gespeichert. Diese Dateien **müssen** ins Repo eingecheckt oder im Space verfügbar sein.
|
| 57 |
+
|
| 58 |
+
## Lokale Entwicklung
|
| 59 |
+
|
| 60 |
+
1. Embeddings berechnen (siehe oben).
|
| 61 |
+
2. App starten:
|
| 62 |
+
```bash
|
| 63 |
+
python app.py
|
| 64 |
+
```
|
| 65 |
+
3. Gradio öffnet standardmäßig `http://127.0.0.1:7860`.
|
| 66 |
+
|
| 67 |
+
## Tests
|
| 68 |
+
|
| 69 |
+
```bash
|
| 70 |
+
pytest
|
| 71 |
+
```
|
| 72 |
+
|
| 73 |
+
## Deployment auf Hugging Face Spaces
|
| 74 |
+
|
| 75 |
+
1. **Space anlegen**
|
| 76 |
+
- Typ: *Gradio*
|
| 77 |
+
- Runtime: Python 3.10 (`runtime.txt` ist bereits enthalten)
|
| 78 |
+
|
| 79 |
+
2. **Secrets setzen**
|
| 80 |
+
- Im Space `Settings` → `New secret`
|
| 81 |
+
- Schlüssel: `DATABASE_URL`
|
| 82 |
+
- Wert: PostgreSQL-Verbindungsstring (z. B. von Neon/Supabase)
|
| 83 |
+
|
| 84 |
+
3. **Embeddings bereitstellen**
|
| 85 |
+
- Lokal `precompute_embeddings.py` ausführen
|
| 86 |
+
- Die erzeugten `.npy`-Dateien unter `embeddings/` committen und zum Space pushen (z. B. via `git add embeddings/*.npy`)
|
| 87 |
+
- Alternativ die Dateien manuell im Space hochladen
|
| 88 |
+
|
| 89 |
+
4. **Code pushen**
|
| 90 |
+
- Repo-Inhalt in den Space pushen (oder per `Add file` hochladen)
|
| 91 |
+
|
| 92 |
+
5. **Space starten**
|
| 93 |
+
- Beim Start erstellt `app.py` automatisch das DB-Schema (`users`, `scores` + Indizes)
|
| 94 |
+
- UI erscheint mit deutschem Leaderboard
|
| 95 |
+
|
| 96 |
+
## Datenbankschema
|
| 97 |
+
|
| 98 |
+
- `users`: speichert `username` (kanonisch, lowercase) und `display_name`
|
| 99 |
+
- `scores`: enthält `username`, `canonical_username`, `image_id`, `score`, `similarity`, `text`, `created_at`
|
| 100 |
+
- Mehrere Scores pro Benutzer sind erlaubt, keine Deduplication
|
| 101 |
+
|
| 102 |
+
## Hinweise
|
| 103 |
+
|
| 104 |
+
- Scores werden deterministisch berechnet (gleicher Text + Bild → gleicher Score)
|
| 105 |
+
- Keine IP- oder personenbezogene Daten werden geloggt
|
| 106 |
+
- Für produktiven Einsatz unbedingt abgesicherte Postgres-Instanz verwenden
|
| 107 |
+
- Bei neuen Bildern `images.csv` erweitern, Skript erneut laufen lassen und `.npy`-Dateien committen
|
| 108 |
+
|
| 109 |
+
Viel Spaß beim Scoren! 🎯
|