Blob-Porträt: Gradientenabstieg für ein Foto
Malt ein Foto mit 2D-Gaußschen Blobs. Es startet mit 1.500 zufälligen Blobs, rendert sie bei jedem Schritt, misst den Fehler im Vergleich zum Foto (L1 + SSIM) und bewegt jeden Blob ein wenig, um den Fehler zu reduzieren (Adam). Neue winzige Blobs entstehen dort, wo der Fehler am größten ist. Es ist kein Bildgenerator beteiligt: Das Bild wird gelernt.
Schritte
-
Foto holen. Verwende die beigefügte Datei. Notiere die Position des Motivs, um
--focussetzen zu können (der Bereich, der das meiste Nah-Training erhält, normalerweise das Gesicht). -
Installation. Python 3.10+.
pip install -r requirements.txt # torch, numpy, pillowFalls der PyTorch-Index blockiert ist, funktioniert auch einfaches
pip install torchvon PyPI. -
Wähle ein Preset je nach verfügbarer Hardware und Zeit:
Preset Schritte max. Blobs 2-Kern CPU GPU quick300 15.000 ~8 Min ~1 Min default1.600 45.000 ~35 Min ~5 Min full6.000 100.000 Stunden ~20-40 Min Auf einer CPU führe
defaultim Hintergrund aus und überwache das Log; blockiere nicht darauf. -
Ausführen.
python scripts/blobfit.py photo.jpg --out result/ --preset default \ --aspect 4:5 --focus 0,5,0,4,0,45,0,5--aspectschneidet auf w:h um die Mitte zu („none“ behält die eigene Form des Fotos).--focus cx,cy,w,hist in 0-1 des zugeschnittenen Bildes. Für ein zentriertes Selfie deckt0,5,0,4,0,45,0,5das Gesicht ab.--steps/--blobsüberschreiben das Preset.- Das Gerät wird automatisch erkannt: CUDA, dann Apple MPS, dann CPU.
-
Überprüfe das Ergebnis vor der Auslieferung. Öffne
compare.jpgundzoom.jpgund betrachte sie.stats.jsonenthält den PSNR: etwa 28-30 dB ist eine weiche Ähnlichkeit (quick), 38 dB+ ist bei normaler Größe kaum zu unterscheiden. Wenn das Gesicht unscharf ist, starte erneut mit mehr Schritten oder verschiebe--focusauf das Gesicht. -
Ausliefern. Sende
compare.jpg,render.pngundtraining.gif. Sage, wie viele Blobs und Schritte, den PSNR und dass es trainiert, nicht generiert wurde.
Ausgaben
| Datei | Beschreibung |
|---|---|
render.png | das Blob-Gemälde in voller angepasster Größe |
compare.jpg | echtes Foto neben der Code-Version |
zoom.jpg | Nahaufnahme-Beweis um die Augen |
training.gif | Rauschen zum Bild, ein Frame pro Meilenstein |
blobs.npz | jeder Blob: Position, Skalierung, Winkel, Farbe, Stärke (zum erneuten Rendern oder für Animationen) |
stats.json | Schritte, Blob-Anzahl, PSNR, Sekunden, Gerät |
Ehrliche Grenzen
- Es kopiert ein Foto. Es kann keine neue Ansicht oder ein neues Gesicht erfinden.
- Die Qualität hängt von den Schritten ab: kurze CPU-Läufe werden unscharf; feine Hautkörnung benötigt das Preset
full. - Die Hintergrundfarbe wird von den Rändern des Fotos übernommen, sodass Blobs nur malen müssen, was sich davon unterscheidet.