1. Основы Python для Data Science, Computer Vision и обработка изображений с OpenCV
Основы Python для Data Science, Computer Vision и обработка изображений с OpenCV
Когда инженер NASA в 1997 году отправил марсоход Pathfinder на Марс, камера аппарата снимала изображения размером 256×256 пикселей — меньше, чем аватарка в соцсети. Сегодня алгоритмы детекции военной техники обрабатывают снимки с дронов в 4K-разрешении, находя танк на расстоянии нескольких километров. Но прежде чем нейросеть научится «видеть», ей нужно дать данные в правильном формате. Именно поэтому путь к military-vehicle detection начинается с Python, числовых вычислений и работы с изображениями — фундамента, на котором стоит всё остальное.
Почему Python и почему именно для Computer Vision
Python стал стандартом в Data Science не из-за скорости — C++ выполняет вычисления быстрее в 10–100 раз. Причина в экосистеме: библиотеки NumPy, OpenCV, PyTorch и Albumentations образуют единый стек, где данные перетекают между инструментами без потерь. Представьте, что вы переводите текст с английского на русский через три разных словаря — если каждый словарь использует свою систему транскрипции, вы потеряете смысл. В Python-стеке для Computer Vision все библиотеки «говорят на одном языке» — массивах NumPy.
NumPy — это библиотека для быстрых числовых вычислений с многомерными массивами. Когда вы загружаете фотографию танка, OpenCV представляет её как массив NumPy размером (высота × ширина × 3), где три канала — это красный, зелёный и синий (RGB). Каждый пиксель — число от 0 до 255.
Микропример: если вы представляете шахматную доску как матрицу 8×8, где 1 — белая клетка, 0 — чёрная, то это и есть двумерный массив NumPy. Изображение — это просто такая матрица, но с тремя слоями (каналами цвета) вместо одного.
ООП в Python: зачем это нужно в CV-проектах
Объектно-ориентированное программирование в Data Science — это не дань моде, а способ управлять сложностью. Когда вы строите пайплайн детекции военной техники, у вас есть загрузчик данных, аугментатор, модель, постпроцессор результатов. Каждый из них — это класс с чёткими обязанностями.
Класс — это шаблон для создания объектов. Он описывает, какие данные (атрибуты) и какие действия (методы) связаны вместе.
Зачем так, а не просто функция? Представьте, что у вас 50 скриптов для обработки данных. Если размер изображения меняется, при использовании функций вам нужно править каждую. С классом — меняете одно значение в __init__, и все скрипты работают с новым размером. В проектах military-vehicle detection это критично: изображения с дронов, спутников и наземных камер имеют разное разрешение, и параметры предобработки должны быть централизованы.
OpenCV: библиотека, которая научила компьютеры видеть
OpenCV (Open Source Computer Vision Library) — это библиотека с более чем 2500 алгоритмами обработки изображений. Она написана на C++, но имеет полноценные Python-биндинги. Именно OpenCV стоит между «сырым» изображением и нейросетью.
Чтение, конвертация и базовые операции
Первая ловушка, в которую попадают новички: OpenCV загружает изображения в формате BGR (Blue-Green-Red), а не в привычном RGB. Если не конвертировать — цвета будут инвертированы.
Микропример: представьте, что вы перепутали местами провода в наушниках — левый канал играет справа, правый слева. Звук есть, но восприятие искажено. BGR вместо RGB — та же проблема, только с цветами.
Изменение размера и нормализация
Нейросети принимают входы фиксированного размера. Для SSD MobileNetV4 стандартный вход — 300×300 или 320×320 пикселей. Но cv2.resize делает больше, чем просто масштабирование: при уменьшении изображения алгоритм интерполяции решает, какой цвет присвоить каждому новому пикселю.
| Метод интерполяции | Скорость | Качество | Когда использовать |
|---|---|---|---|
| cv2.INTER_NEAREST | Быстрый | Низкое | Маски сегментации |
| cv2.INTER_LINEAR | Средний | Хорошее | Стандарт для обучения |
| cv2.INTER_CUBIC | Медленный | Отличное | Визуализация результатов |
| cv2.INTER_AREA | Средний | Лучшее при уменьшении | Даунсэмплинг больших снимков |
Нормализация — это масштабирование значений пикселей в диапазон, который нейросеть обрабатывает стабильнее. Без нормализации градиенты при обучении могут «взрываться» (становиться слишком большими) или «затухать» (стремиться к нулю), и модель не обучится.
Рисование на изображениях: разметка и визуализация
Когда модель детекции нашла танк на снимке, результат нужно визуализировать — нарисовать рамку и подписать класс. OpenCV делает это за одну строку:
Микропример: это как рисовать рамку вокруг объекта на фотографии в Paint — только вместо мыши вы указываете координаты числом, и процесс повторяется автоматически для тысяч изображений.
Работа с цветовыми пространствами
Для military-vehicle detection полезно знать не только RGB. HSV (Hue-Saturation-Value) отделяет цвет от яркости, что помогает фильтровать объекты по камуфляжу. Например, оливково-зелёный камуфляж танка имеет определённый диапазон оттенков (Hue), который можно выделить, даже если освещение меняется.
Это не заменяет нейросеть, но полезно для предварительного анализа: если вы знаете, что ищете технику в зелёном камуфляже на фоне пустыни, HSV-фильтр может сузить область поиска.
Работа с путями и пакетная обработка
Реальный датасет military-vehicle detection — это тысячи изображений в структурированных папках. Python-модуль pathlib делает навигацию по файловой системе элегантной:
Микропример: pathlib — это как GPS-навигатор для файлов. Вместо того чтобы вручную прописывать путь C:\data\train\tanks\img001.jpg, вы говорите «найди все JPG в папке data» и получаете список.
Связка NumPy + OpenCV: как данные текут через пайплайн
Вот как выглядит минимальный пайплайн предобработки одного изображения для SSD-детектора:
Обратите внимание на шаг 5: PyTorch ожидает формат (batch, channels, height, width), а OpenCV и NumPy работают с (height, width, channels). Эта перестановка осей — одна из самых частых ошибок новичков. Запомните: OpenCV = «картинка снаружи», PyTorch = «каналы снаружи».
Что запомнить из этой главы
cv2.cvtColor, иначе цвета будут инвертированы при визуализации