Procentowy udział pikseli psa
Ostatnim krokiem przetwarzania danych z adnotacjami psów jest wyznaczenie procentowego udziału pikseli reprezentujących psa (lub psy) w każdym obrazie. Wykorzystaj techniki poznane w tym kursie, aby obliczyć te informacje i dodać je jako kolumny do dalszej analizy.
Aby obliczyć procentowy udział pikseli, najpierw wyznacz łączną liczbę pikseli reprezentujących każdego psa, a następnie zsumuj je dla całego obrazu. Pole ograniczającego prostokąta (bounding box) obliczysz według wzoru:
(Xend - Xstart) * (Yend - Ystart)
UWAGA: W tym przypadku możesz pominąć możliwość nakładania się prostokątów ograniczających.
Procentowy udział oblicz, dzieląc łączną liczbę pikseli „psa" przez całkowity rozmiar obrazu i mnożąc wynik przez 100.
DataFrame joined_df jest w takim stanie, w jakim go ostatnio używano. Biblioteka pyspark.sql.functions jest dostępna pod aliasem F.
To ćwiczenie jest częścią kursu
Czyszczenie danych w PySpark
Instrukcje do ćwiczenia
- Zdefiniuj funkcję Pythona, która przyjmuje listę krotek (obiekty psów) i oblicza łączną liczbę pikseli „psa" w obrazie.
- Utwórz UDF z tej funkcji i użyj go do dodania do DataFrame nowej kolumny
'dog_pixels'. - Utwórz kolejną kolumnę,
'dog_percent', reprezentującą procentowy udział'dog_pixels'w obrazie. Upewnij się, że wartości mieszczą się w przedziale 0–100%. Odwołaj się do kolumny wyłącznie przez jej nazwę jako ciąg znaków (tzn."nazwakolumny", a niedf.nazwakolumny). - Wyświetl pierwsze 10 wierszy, w których udział
'dog_pixels'przekracza 60%. Użyj zapytania w stylu SQL (tzn.'nazwakolumny > ____').
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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
____