HH maczarr.de

Rembg zum Entfernen des Hintergrunds von Bildern via Docker auf dem Synology-NAS verwenden

Von Zeit zu Zeit muss ich mal ein Bild freistellen. Früher hab ich das auch im Job gemacht und kann mich noch gut erinnern, was das manchmal für ein fitzeliger Kram war, wenn die Aufnahme – sagen wir mal – nicht ideal war. Aber für "einfache" Fälle hatte auch Photoshop schon vor Jahren den "Zauberstab". Häufig reichte einmal klicken, Entf drücken und fertig.
Die Bilder, die ich heute freistelle, mache ich nur für mich privat (z.B. für ein YouTube-Cover-Bild) und nehme das Bild auch explizit dafür auf. Ich weiß also bereits bei der Aufnahme, dass ich es freistellen will und kann entsprechend einen halbwegs neutralen Hintergrund verwenden.
Seit Kurzem habe ich für die Aufgabe des Freistellens ein Tool, das genau für diesen einen Zweck gemacht ist, es heißt Rembg.

Rembg installieren

Lokal installieren wollte ich es nicht, aber das war auch gar nicht nötig, da es direkt bereit für Docker daher kommt. Ich probierte es einmal kurz auf meinem Rechner aus und war begeistert vom Ergebnis. Kurzerhand installierte ich es auf meinem Synology NAS.

Die Doku nennt als Startbefehl:

docker run -p 5000:5000 danielgatis/rembg s

Das kleine s am Ende ist wichtig, da rembg damit im Server-Modus gestartet wird. Wie ich so einen Start-Parameter im NAS mit angebe musste ich erstmal herausfinden. Eigentlich ist das der Hauptgrund, weshalb ich diesen Artikel schreibe, da die sonstige Installation sehr einfach ist. Im Netz habe ich von vielen immer wieder nur als Antwort gefunden, dass man sich dafür per SSH auf dem NAS einloggen und den Container von Hand starten soll, aber das Web-Interface vom Synology NAS hat eine Option dafür – nur nicht so ganz offensichtlich.

Docker-Container mit zusätzlichem Befehl auf dem Synology NAS starten

In der Image-Ansicht wählt man das rembg-Image aus und klickt auf "Starten". Im Menü wählt man nun "Erweiterte Einstellungen" aus. Im neuen Overlay geht man oben zum letzten Menüpunkt "Umgebung" und ganz am Ende steht unter der Überschrift "Ausführungsbefehl" zuerst als Entrypoint "rembg" und dann "Befehl" gefolgt von einem leeren Eingabefeld. Hier kann man nun einfach das oben genannte s eintragen, unten rechts auf "Übernehmen" klicken und den Container starten. Das war's!

Anschließend startet der Container und der Server ist über den unter "Port-Einstellungen" definierten Port erreichbar.

Rembg von der Kommandozeile nutzen

Auf der GitHub-Seite sind ein paar Möglichkeiten genannt, wie man sein freizustellendes Bild nun an rembg schicken kann. Aber genau mein Anwendungsfall war leider nicht dabei: eine lokale Datei an den entfernten Server senden und das freigestellte Bild zurück bekommen. Die Beispiele, die in die Richtung gingen, gaben ein via http erreichbares Bild an, aber ich wollte natürlich nicht immer ein Bild in einen lokal laufenden Webserver werfen müssen, um es freistellen zu lassen. Egal – aus den gezeigten Beispielen konnte ich das Prinzip erkennen und mir meine eigene kleine Script-Funktion schreiben, sodass ich nun einfach removebg input.jpg output.png tippen kann und wenige Sekunden später auf meiner Platte das freigestellte output.png landet. Meine Funktion dafür ist:

function removebg() {
curl --form file="@${1}" http://$Synology-IP:$rembg-Port > $2
}

Dafür müssen natürlich $Synology-IP und $rembg-Port entsprechend ersetzt werden und curl muss vorhanden sein.

Neben dem Server-Modus kann rembg auch in eigene Python-Applikationen als Bibliothek eingebunden werden.