Pourcentage de pixels « dog »
La dernière étape pour analyser les annotations de chiens consiste à déterminer le pourcentage de pixels dans chaque image qui représente un chien (ou plusieurs). Vous devrez mobiliser les différentes techniques vues dans ce cours pour calculer cette information et l'ajouter sous forme de colonnes pour une analyse ultérieure.
Pour calculer le pourcentage de pixels, calculez d'abord le nombre total de pixels représentant chaque chien, puis faites-en la somme pour l'image. Vous pouvez calculer la boîte englobante avec la formule :
(Xend - Xstart) * (Yend - Ystart)
REMARQUE : vous pouvez ignorer ici la possibilité de boîtes englobantes qui se chevauchent.
Pour le pourcentage, calculez le nombre total de pixels « dog » divisé par la taille totale de l'image, puis multipliez par 100.
Le DataFrame joined_df est dans le même état que lors de sa dernière utilisation. pyspark.sql.functions est référencé par l'alias F.
Cet exercice fait partie du cours
Nettoyer des données avec PySpark
Instructions
- Définissez une fonction Python qui prend une liste de tuples (les objets chien) et calcule le nombre total de pixels « dog » par image.
- Créez une UDF à partir de cette fonction et utilisez-la pour créer une nouvelle colonne appelée
'dog_pixels'dans le DataFrame. - Créez une autre colonne,
'dog_percent', représentant le pourcentage de'dog_pixels'dans l'image. Assurez-vous que cette valeur est comprise entre 0 et 100 %. Utilisez uniquement le nom de la colonne sous forme de chaîne (c.-à-d. « columnname » plutôt que df.columnname). - Affichez les 10 premières lignes ayant plus de 60 % de
'dog_pixels'dans l'image. Utilisez une chaîne de style SQL pour cela (c.-à-d. 'columnname > ____').
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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
____