Rembg - Kann die KI auch weiße Kaninchen?

Python
Creative Coding
Pillow
Autor:in

Jörg Kantel

Veröffentlichungsdatum

11. Februar 2024

Gestern hatte ich mir noch einmal Rembg vorgeknöpft, denn mich interessierte natürlich brennend die Frage, ohne deren Antwort Ihr vermutlich auch nicht mehr ruhig schlafen könnt: Kann die gekünstelte Intelligenzia auch weiße Kaninchen freistellen? Spoiler: Sie kann – wenn auch mit Abstrichen.

Die Frage ist nicht so unsinnig, wie es zunächst scheint. Denn vermutlich ist die KI, die hinter Rembg werkelt, mit Bildern von Menschen trainiert worden. Daher ist die Frage »Kann das Teil auch etwas anderes als Menschen freistellen?« durchaus berechtigt. Um es der KI nicht allzu schwer zu machen, habe ich als Testobjekt ein anthropomorphes weißes Kaninchen ausgewählt, dessen Bilder ich schon im Oktober letzten Jahres von der AI Comic Factory habe generieren lassen.

Dabei hat sich die KI ganz wacker geschlagen. Die Fehler in den freigestellten Bildern sind sicher zum großen Teil darauf zurückzuführen, daß der Konstrast zwischen Vorder- und Hintergrund zu gering war:

  

Trotzdem scheint die KI bei den freigestellten Kaninchen doch größere Probleme als bei Bildern von Menschen zu haben (so werden zum Beispiel die »Ohren« des Sessels als zum Kaninchen gehörend erkannt) – auch wenn sie ebenfalls im Comic-Stil gezeichnet sind. Jedenfalls scheinen auch bei Rembg durchaus noch Tests notwendig zu sein, vor allem wenn man so alltägliche Gegenstände wie Hexenbesen, Giftflaschen oder Zauberbücher freistellen will.

Für diese Tests habe ich eine Erweiterung in meinem Skript eingebaut, die ich beim User Gravitar in seinem Video »Python Tutorial deutsch, Objekte in Photos freistellen« gefunden habe: Er läßt beide Bilder in einer Art »Vorher - Nacher«-Ansicht in einem Fenster anzeigen. Das mußte ich natürlich stante pede meinem Skipt ebenfalls gönnen:

import rembg
import numpy as np
from PIL import Image
import os

DATAPATH = os.path.join(os.getcwd(), "images")

input_path = os.path.join(DATAPATH, "whiterabbit03_02.png")
output_path = os.path.join(DATAPATH, "whiterabbit03_02_output.png")

# Load the input image
input_image = Image.open(input_path)

# Convert the input image to a numpy array
input_array = np.array(input_image)

# Apply background removal using rembg
output_array = rembg.remove(input_array)

# Create a PIL Image from the output array
output_image = Image.fromarray(output_array)

# Save the output image
output_image.save(output_path)
result = Image.new('RGBA', (input_image.width * 2, input_image.height))
result.paste(input_image, (0, 0))
result.paste(output_image, (input_image.width, 0))
result.show()

print("I did it, Babe!")

Gravatar ist die Idee zu diesem Video durch meinen Beitrag hier in diesem ~Blog~ Kritzelheft gekommen, worauf er auch in seinem Video hinweist. Das war nicht das erste Mal und ich freue mich natürlich immer über Feedback. Und noch ein Hinweis: PIL war ursprünglich der Name der Python Image Library, die lange Jahre so etwas wie ein Standard für Bildbearbeitung in Python war. Aus Lizenzgründen war sie jedoch nie Bestandteil der Standardbibliothek, sondern mußte separat installiert werden. Seit etlichen Jahren wird sie jedoch nicht mehr weiterentwickelt und läuft daher auch nicht mehr unter Python 3. Um diesem unerfreulichen Umstand abzuhelfen, hat eine Gruppe von Enthusiasten eine »befreundete« (friendly) Fork Pillow ins Leben gerufen, die weitestgehen aufrufkompatibel zu PIL sein will. Jedoch sollte man – um Verwirrung zu vermeiden – nicht mit import PIL arbeiten, sondern mit from PIL import Image.


Bilder: Die Kaninchenbilder wurden im Original mit der AI Comic Factory erstellt. Prompt: »a white rabbit with a pocket watch in his hand, wearing jacket and west, and a marabou with looking glasses, sitting on a coffeetable in the zoo«, Style: Franco-Belgian