Prozentualer Anteil Hundepixel
Die letzte Aufgabe beim Parsen der Hund-Annotationsdaten besteht darin, den prozentualen Anteil der Pixel in jedem Bild zu bestimmen, die einen Hund (oder mehrere Hunde) darstellen. Du wirst verschiedene Techniken aus diesem Kurs nutzen, um diese Information zu berechnen und als Spalten für spätere Analysen hinzuzufügen.
Um den prozentualen Anteil zu berechnen, ermittle zuerst die Gesamtzahl der Pixel, die jeden Hund repräsentieren, und summiere sie für das Bild. Du kannst die Bounding Box mit der Formel berechnen:
(Xend - Xstart) * (Yend - Ystart)
HINWEIS: Du kannst in diesem Fall die Möglichkeit überlappender Bounding Boxes ignorieren.
Für den Prozentsatz teilst du die Gesamtzahl der „dog“-Pixel durch die Gesamtgröße des Bildes und multiplizierst das Ergebnis mit 100.
Das DataFrame joined_df entspricht dem letzten Stand deiner Verwendung. pyspark.sql.functions ist als F aliasiert.
Diese Übung ist Teil des Kurses
Datenbereinigung mit PySpark
Anleitung zur Übung
- Definiere eine Python-Funktion, die eine Liste von Tupeln (die Hund-Objekte) entgegennimmt und die Gesamtzahl der „dog“-Pixel pro Bild berechnet.
- Erstelle eine UDF aus der Funktion und nutze sie, um eine neue Spalte namens
'dog_pixels'im DataFrame zu erzeugen. - Erstelle eine weitere Spalte,
'dog_percent', die den prozentualen Anteil von'dog_pixels'im Bild angibt. Achte darauf, dass dieser Wert zwischen 0–100 % liegt. Verwende dabei nur den Spaltennamen als String (also „columnname“ statt df.columnname). - Zeige die ersten 10 Zeilen mit mehr als 60 %
'dog_pixels'im Bild an. Verwende dafür einen SQL-Style-String (also 'columnname > ____').
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Calculate total pixels occupied by dogs in the image
def dogPixelCount(doglist):
totalpixels = ____
for dog in doglist:
totalpixels += (dog[____] - ____[1]) * (____[____] - ____)
return totalpixels
# Define a UDF for the pixel count
udfDogPixelCount = ____
# Add a new column 'dog_pixels' containing the pixel count for dogs in each image
joined_df = ____
# Add a column 'dog_percent' representing the percentage of the image occupied by dogs
joined_df = joined_df.____('dog_percent', (____ / (____)) * ____)
# Show the first 10 annotations with more than 60% dog
____