Процент пикселей с изображением собаки
Финальная задача при разборе данных аннотаций собак — определить, какой процент пикселей каждого изображения занимает одна или несколько собак. Для этого вам понадобятся различные техники, освоенные в курсе: вы вычислите нужные значения и добавите их как столбцы для дальнейшего анализа.
Чтобы рассчитать процент пикселей, сначала вычислите общее число пикселей для каждой собаки, а затем просуммируйте их по изображению. Площадь ограничивающего прямоугольника рассчитывается по формуле:
(Xend - Xstart) * (Yend - Ystart)
ПРИМЕЧАНИЕ: Возможным перекрытием ограничивающих прямоугольников в данном случае можно пренебречь.
Для расчёта процента разделите общее число «собачьих» пикселей на общий размер изображения и умножьте на 100.
DataFrame joined_df находится в том же состоянии, в котором вы его использовали последний раз. pyspark.sql.functions импортирован под псевдонимом F.
Это упражнение является частью курса
Очистка данных с помощью PySpark
Инструкции к упражнению
- Определите функцию Python, которая принимает список кортежей (объекты с данными о собаках) и вычисляет общее количество «собачьих» пикселей на изображении.
- Создайте UDF на основе этой функции и используйте её для добавления нового столбца
'dog_pixels'в DataFrame. - Создайте ещё один столбец —
'dog_percent', — представляющий долю'dog_pixels'на изображении в процентах. Убедитесь, что значения находятся в диапазоне от 0 до 100%. Используйте строковое имя столбца (то есть"columnname", а неdf.columnname). - Выведите первые 10 строк, в которых более 60% пикселей занимают
'dog_pixels'. Используйте строку в стиле SQL (то есть'columnname > ____').
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# 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
____