Percentage hondpixels
De laatste taak bij het parsen van de hond-annotatiegegevens is het bepalen van het percentage pixels in elke afbeelding dat een hond (of honden) weergeeft. Je gebruikt de verschillende technieken die je in deze cursus hebt geleerd om deze informatie te berekenen en als kolommen toe te voegen voor latere analyse.
Om het percentage pixels te berekenen, bereken je eerst het totale aantal pixels dat elke hond vertegenwoordigt en tel je die per afbeelding bij elkaar op. Je kunt de bounding box berekenen met de formule:
(Xend - Xstart) * (Yend - Ystart)
LET OP: Je kunt in dit geval de mogelijkheid van overlappende bounding boxes negeren.
Voor het percentage deel je het totale aantal "hond"-pixels door de totale grootte van de afbeelding en vermenigvuldig je dat met 100.
De joined_df DataFrame is zoals je die het laatst hebt gebruikt. pyspark.sql.functions is als alias F.
Deze oefening maakt deel uit van de cursus
Data opschonen met PySpark
Oefeninstructies
- Definieer een Python-functie die een lijst met tuples (de hondobjecten) neemt en het totale aantal "hond"-pixels per afbeelding berekent.
- Maak een UDF van de functie en gebruik die om een nieuwe kolom
'dog_pixels'op de DataFrame te maken. - Maak nog een kolom,
'dog_percent', die het percentage'dog_pixels'in de afbeelding weergeeft. Zorg dat dit tussen 0–100% ligt. Gebruik alleen de stringnaam van de kolom (dus "kolomnaam" in plaats van df.kolomnaam). - Toon de eerste 10 rijen met meer dan 60%
'dog_pixels'in de afbeelding. Gebruik hiervoor een SQL-stijl string (dus 'kolomnaam > ____').
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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
____