Chrimo commited on
Commit
7f62618
·
1 Parent(s): b2bdaef
Files changed (2) hide show
  1. README.md +12 -109
  2. README2.md +109 -0
README.md CHANGED
@@ -1,109 +1,12 @@
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! 🎯
 
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! 🎯