НачатьНачать бесплатно

Процент пикселей с изображением собаки

Финальная задача при разборе данных аннотаций собак — определить, какой процент пикселей каждого изображения занимает одна или несколько собак. Для этого вам понадобятся различные техники, освоенные в курсе: вы вычислите нужные значения и добавите их как столбцы для дальнейшего анализа.

Чтобы рассчитать процент пикселей, сначала вычислите общее число пикселей для каждой собаки, а затем просуммируйте их по изображению. Площадь ограничивающего прямоугольника рассчитывается по формуле:

(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
____
Редактировать и запускать код