Делаем планировщик задач
К моему удивлению, далеко не все знают про пакет schedule, который позволяет планировать задачи и повторять их через промежуток времени.
Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще schedule не требует внешних зависимостей и сам в целом легковесный.
Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#python#schedule
📰 AMD GAIA 0.16 Introduces C++17 Agent Framework For Building AI PC Agents In Pure C++
AMD's GAIA open-source framework for building AI agents that run locally on Ryzen AI hardware via the Radeon iGPUs and/or NPUs is up to version 0.16. With this new GAIA release is support for developing AI agents purely in C++ with no longer needing to depend upon Python...
🔗 Source: https://www.phoronix.com/news/AMD-GAIA-0.16
#amd#opensource#python
Курсы Spatial Thoughts и Geospatial Python Tutorials
Spatial Thoughts (https://spatialthoughts.com) — образовательная платформа, основанная Уджавалом Ганди (Ujaval Gandhi). Она предлагает курсы по анализу пространственных данных на Python:
🎓Python Foundation for Spatial Analysis
🎓Mapping and Data Visualization with Python
Материалы курсов бесплатны, за прохождение курса с инструктором придется заплатить.
🔗Дополняет учебные курсы сайт Geospatial Python Tutorials (https://www.geopythontutorials.com). Он содержит примеры применения пакетов GeoPandas, Xarray, Dask, SamGeo и мн. др. для решения практических задач. Вот, например, извлечение информации из нескольких новостей о конфликтах между людьми и слонами в Индии, и геокодирование мест конфликтов — все с помощью ChatGPT.
В качестве среды для работы рекомендуется Google Colab.
#python#ИИ
Анализ видео: визуализация
Последний пост серии, первые два по ссылкам:
1. Подготовка данных
2. Анализ данных
Для виза снова используем cv2. Если данные записаны в таблицу xlsx, то понадобится модуль ast для корректного считывания синтаксиса списков.
При считывании объединяем данные в одномерный список (colors) и создаем пустой массив:
# суммарное число цветов
colors_length = len(colors)
# высота изображения в пикселях
height = 500;
# создаем пустой массив
# height: число строк
# colors_length: число столбцов
# 3: массив цвета (r, g, b)
img_array = np.zeros((height, colors_length, 3), np.uint8)
После этого заполняем массив цветами и с помощью cv2 создаем изображение:
# заполняем массив
for x in range(colors_length):
img_array[:,x] = colors[x]
# записываем в файл
cv2.imwrite('file_name.png', img_array)
Подробнее о параметрах файла палитры и том, как с ним работать, — в карточках.
P.S. И как обычно, полный код этой части в комментариях.
#датавиз#python
Анализ видео: цвет
На прошлом этапе мы записали по одному кадру видео в секунду в список 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#Москва