Декоратор override
@overrideиспользуется для переопределения методов в классах-наследниках. Он позволяет указать, что метод в подклассе переопределяет метод базового класса.
Это может быть полезно для:
— Повышения читабельности кода, так как сразу видно, какие методы переопределены.
— Выявления ошибок: если имя метода в дочернем классе не совпадает с именем в родительском, будет выдана ошибка.
— Проверки типов аргументов: декоратор гарантирует, что типы аргументов совпадают с базовым методом.
#python#decorators
Анализ видео: цвет
На прошлом этапе мы записали по одному кадру видео в секунду в список captures_array. Имея данные о кадрах в формате rgb, мы можем определить преобладающие оттенки.
Для этого используем метод кластеризации, а точнее kmeans. Он позволяет разбить массив на нужное число групп по близости значений и выделить их центры (центроиды). Эти значения являются доминирующими оттенками кадра. На мой взгляд, детальность данных будет достаточная, если выделить пять центроидов (k). Этот алгоритм нужно применить в цикле к каждому кадру (capture):
# определяем размеры массива
shape = capture.shape
# пересобираем в одномерный массив
ar = capture.reshape(np.product(shape[:2]), shape[2]).astype(float)
# находим заданное число центроидов
centroids,_ = kmeans(ar, k)
В итоге получаем палитру каждого кадра фильма в хронологическом порядке. Как ее визуализировать, расскажу в следующем посте.
P.S. Полный код оставила в комментариях.
#датавиз#python
Анализ видео: подготовка данных
Я использую python, но общая логика алгоритма может пригодиться и для других языков.
Сначала нужно покадрово считать видео. Сделаем это с помощью библиотеки OpenCV (cv2):
import cv2
# видео целиком
video = cv2.VideoCapture('file_name.mp4')
# частота кадров
fps = int(video.get(cv2.CAP_PROP_FPS))
# число кадров во всем видео
frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
Теперь можно запустить цикл и собрать один кадр за каждую секунду. В цикле повторяется такой код:
ret, frame = video.read()
Каждую итерацию считывается следующий кадр. В ret записывается информация о корректности считывания (True/False), frame — кадр в формате массива с rgb каждого пикселя.
Имея частоту видео, мы можем записать только один кадр в секунду. Такого объема данных достаточно для анализа. В итоге получаем список с числом кадров равным длительности видео в секундах. Что делать с ним дальше расскажу в следующем посте.
P.S. В комментариях полный код этой части.
#датавиз#python
🔥 Сегодня
**Moscow Python Meetup**
📅 22 февраля / 18:00 / Москва, ул. Льва Толстого, д.16, конференц-зал «Экстрополис»
💵 Бесплатно
📝 Регистрация тут: https://goo.gl/sqFZUE
53я встреча сообщества Moscow Python. С докладами выступят разработчики из «Лаборатории Касперского», Сбербанка и Яндекса. Они расскажут об asyncio, мобильной разработке на Питоне и о применении JupyterHub.
🔗 Программа: https://goo.gl/kKpQqv
🔗 Сайт: https://goo.gl/8Woxvh
#python#Москва
✅ Завтра
**Moscow Python Meetup**
📅 22 февраля / 18:00 / Москва, ул. Льва Толстого, д.16, конференц-зал «Экстрополис»
💵 Бесплатно
📝 Регистрация тут: https://goo.gl/sqFZUE
53я встреча сообщества Moscow Python. С докладами выступят разработчики из «Лаборатории Касперского», Сбербанка и Яндекса. Они расскажут об asyncio, мобильной разработке на Питоне и о применении JupyterHub.
🔗 Программа: https://goo.gl/kKpQqv
🔗 Сайт: https://goo.gl/y82XG7
#python#Москва
¿Que puede hacer este bot?
@PypiStatsBot
Con este bot puede obtener estadísticas para los paquetes de Python de pypistats.org
Idioma: inglés
(Visto en @botsgram_cu)
#python#programación