Содержание
- В «hard» модуле учащиеся получают знания о том, как устроены современные камеры машинного зрения, как происходит низкоуровневая обработка данных, как работает видеопроцессор и проектируется видеосистема.
- В «soft» модуле рассказывается о методах и алгоритмах цифровой обработки изображений, видеоаналитике, анализе видеоданных, изучаются вопросы машинного обучения применительно к компьютерному зрению.
- Модуль «real applications» посвящен вопросам внедрения изученных технологий в реальные приложения. Рассказывается о примерах удачных реализаций, разбираются типовые ошибки, описываются возможные трудности и пути их преодоления.
Лекционные курсы синхронизированы с практическими занятиями, где учащиеся на практике применяют полученные знания и получают практический результат.
Общая информация
Место проведения: СПбГЭТУ «ЛЭТИ», Кафедра Телевидения и Видеотехники (ТВ) Язык обучения: английский Продолжительность: 2 недели Даты проведения: 5 июля – 9 июля 2021 Результат: сертификат СПбГЭТУ «ЛЭТИ», 4 ECTS Минимальные требования: студенты старших курсов и аспиранты с базовыми знаниями математики и физики и навыками программирования на языках высокого уровня. Школа состоится в случае набора полной группы студентов. |
Стоимость обучения: |
10000 рублей |
Летняя онлайн школа |
включает обучение, экскурсионную программу, учебные материалы, миграционное сопровождение |
Подать заявку
Ключевые моменты
1. Компьютерное зрение сегодня – один из самых популярных научных трендов. Автономная навигация, беспилотные автомобили, распознавание лиц и пр. находится сейчас в активной повестке на любых образовательных платформах.
2. Мы учим основным взаимосвязанным аспектам: хард и софт. Обычно предлагают что-то одно.
3. Оптимальный баланс между теоретической подготовкой и практикой. Обучающие действительно смогут попробовать себя в роли инженеров КЗ.
4. Опытные преподаватели, являющиеся действующими исполнителями НИРов с ведущими телекоммуникационными компаниями. Курсы содержат самую современную и актуальную информацию. Некоторых данных еще даже нет в “учебниках”.
5. По аналогичной тематике планируется открытие англоязычной магистерской программы, с помощью которой можно получить фундаментальную подготовку в данной тематике.
Модули
Модуль 1 – Смарт-технологии и машинное обучение в компьютерном зрении
В модуль входят курсы:
Машинное обучение и глубокое обучение в компьютерном зрении (ТВ) Смарт-технологии цифровой обработки изображений (ТВ).
Лекционный материал посвящен методам и алгоритмам видеоаналитики, цифровой фильтрации изображений, созданию панорамных изображений, вопросам машинного обучения, синтезу изображений с учетом персональных особенностей пользователей. На практических занятиях, семинарах и во время самостоятельной работы студенты обучаются решать задачи и разрабатывать алгоритмы в сфере систем компьютерного зрения, получают / закрепляют навыки программирования (С++, Python) и использования специализированных библиотек (OpenCV, Keras, TensorFlow и т.д.).
Модуль 2 – Сенсоры и видеопроцессоры для компьютерного зрения
В модуль входят курсы:
Современные сенсоры для машинного зрения (ТВ)
Разработка видеопроцессора на базе ПЛИС (ТВ).
Лекционный материал посвящен: принципам проектирования систем компьютерного зрения; анализу свойств оптического изображения (спектральных, энергетических, динамических и др.); сенсорам изображения (КМОП-сенсоры, TOF-сенсоры, мультиспектральные сенсоры, UV..LWIR сенсоры), а также интерфейсам передачи данных в системах компьютерного зрения. В рамках обучения студенты получают практические навыки в области построения систем компьютерного зрения, а именно расчета параметров для функционирования системы и построения моделей в различных программных средах (Matlab, Wolfram Mathematica, Altium Designer, Quartus Prime), разработки систем управления и обработки изображений на ПЛИС (FPGA) в САПР Quartus Prime.
Модуль 3 – Компьютерное зрение в реальных приложениях
В модуль входит курс: Компьютерное зрение в реальных приложениях (ТВ)
В рамках модуля рассматриваются вопросы применения полученных навыков и изученных методов и алгоритмов на практике. Рассматриваются типовые решения для различных отраслей, разбираются нюансы внедрения технологий.
О школах
Зимние школы 2020
Открытие зимних школ 2020
Летние школы 2019
Открытие летних школ 2019
Зимние школы 2019
О кафедре
Кафедра Телевидения и Видеотехники (ТВ) была организована в 1945 году в составе радиотехнического факультета ЛЭТИ в связи с необходимостью подготовки специалистов в области электронных телевизионных систем.
Сегодня на кафедре активно ведутся работы по созданию перспективных видеосистем для космической и медицинской отраслей, по разработке гиперспектральных и мультиспектральных камер. Выполняются исследования и разработки в области компьютерного зрения, анализа данных, видеоаналитики, интеллектуальных видеокомпьютерных комплексов. Выпускники кафедры получают серьезную теоретическую и практическую подготовку в области радиотехники, схемотехники, разработки телевизионных систем, компьютерного зрения, видеоаналитики, машинного обучения и цифровой обработки изображений.
Направления научно-исследовательской работы кафедры:
- космические телевизионные системы (высокочувствительные телевизионные камеры на КМОП-сенсорах для перспективных направлений авиа- и космических технологий (обзорные камеры, камеры стыковки, камеры посадки и др.);
- интеллектуальные видеосистемы медицинского назначения (системы поддержки врачебных решений в кольпоскопии, эндоскопии, лапароскопии, дерматоскопии, анализ глазного дна и др);
- гиперспектральные и мультиспектральные системы;
Smart технологии формирования изображений для смартфонов, планшетов и других современных гаджетов;
В настоящее время на кафедре создается одноименная магистерская программа.
Информация о преподавателях:
Обухова Наталия Александровна
д.т.н., заведующая кафедрой ТВ, СПб ГЭТУ «ЛЭТИ»
Баранов Павел Сергеевичн
к.т.н., доцент каф. ТВ, СПб ГЭТУ «ЛЭТИ»
Мотыко Александр Александрович
к.т.н., доцент каф. ТВ, СПб ГЭТУ «ЛЭТИ»
Сирый Руслан Сергеевич
Аспирант каф. ТВ, СПб ГЭТУ «ЛЭТИ»
Поздеев Александр Анатольевич
Аспирант и ассистент каф. ТВ, СПб ГЭТУ «ЛЭТИ»
Андреев Денис Сергеевич
Аспирант и ассистент каф. ТВ, СПб ГЭТУ «ЛЭТИ»
Контакты
Международный студенческий офис
Пон.-Пят.: 10:00-17:00 (приём 10:00-16:30) |
197376, Россия, Санкт-Петербург, ул. Профессора Попова, дом 5, корпус 3, 2 этаж (офис 3243) |
+7 (812) 234-35-53 |
2343553@mail.ru |
- Цена: 40.09$ + доставка
Какой ардуинщик не хотел подключить камеру к ардуино и получать изображение также легко и просто, как мигать светодиодом? Вот и я из тех, кто хотел, но увы все нет так просто. Однако не ардуино единым ограничивается DIY и есть множество куда более мощных микроконтроллеров способных справиться с этой задачей. В очередной раз изучая новинки с сфере DIY, я наткнулся на интересный проект — OpenMV. Вот официальная страница проекта — openmv.io. OpenMV Cam это небольшая плата с низким энергопотреблением, содержащая видеокамеру и микроконтроллер, предназначенная для бюджетной реализации машинного зрения. OpenMV работает под управлением MicroPython, который позволяет программировать OpenMV с использованием Python (точнее, Python 3). Это облегчает работу за счет применения языка высокого уровня с большим количеством уже готовых библиотек компьютерного зрения. Также с помощью Python можно управлять портами ввода-вывода OpenMV. Характеристики OpenMV Процессор STM32F765VI ARM Cortex M7 с рабочей частотой 216 МГц; 512 Кбайт оперативной памяти; 2 МБ флеш-памяти; Все порты ввода/вывода с напряжением логического уровня 3,3В толерантны к 5В; Процессор имеет следующие интерфейсы ввода/вывода: Интерфейс USB с полной скоростью (12 Мбит) для подключения к компьютеру. При подключении OpenMV отображается в системе как виртуальный COM-порт и USB-накопитель. Разъем μSD Card, обеспечивающий скорость чтения/записи в 100 Мбит/с, что дает возможность OpenMV записывать видео и легко переносить объекты машинного зрения с карты μSD. Шина SPI, которая может работать на скорости до 54 Мбит, позволяя передавать изображение на LCD, по WiFi на другой микроконтроллер или передавать композитное видео по радиоканалу 5,8 ГГц. Шина I2C, шина CAN и асинхронная последовательная шина (TX / RX) для взаимодействия с другими микроконтроллерами и датчиками. 12-разрядный АЦП и 12-разрядный ЦАП. Три порта вывода ввода/вывода для управления серводвигателями. Прерывания и ШИМ доступны на всех портах ввода/вывода (на плате имеется 10 контактов ввода/вывода). RGB LED и два мощных ИК-светодиода с длиной волны излучения 850 нм. Матрица OV7725 способна выдавать 8-битные изображения в оттенках серого разрешением 640×480 или 16-битные изображения RGB565 разрешением 640×480, FPS при разрешении выше 320×240 составляет 60 кадров в секунду и 120 кадров в секунду, при разрешении ниже 320×240. Большинство простых алгоритмов будут работать с частотой выше 30 FPS. Камера OpenMV поставляется с 2.8-миллиметровым объективом на стандартном креплении M12. Можно использовать более специализированные объективы. Возможности OpenMV: Разделение кадров для обнаружения движение в сцене. Отслеживание цвета — до 16 цветов за один раз в изображении. Отслеживание маркеров — обнаружение групп цветов вместо независимых цветов. Обнаружение лиц с помощью Haar Cascades. Трекинг глаз. Оптический поток. Обнаружение/декодирование QR-кодов. Декодирование линейных штрих-кодов. Отслеживание AprilTag. Обнаружение линий, кругов, прямоугольников. Обнаружение шаблонов изображений. Захват изображения — разрешение до 640×480 в оттенках серого/RGB565 формат изображений — BMP/JPG/PPM/PGM. Запись видео — разрешение до 640×480 в оттенках серого/RGB565, формат видео — MJPEG или GIF (или RAW-видео). OpenMV поддерживает предварительно обученные нейронные сети, позволяющие реализовать распознавание лиц, текста и пр. На официальном сайте OpenMV продается по цене 65$, на Aliexpress много предложений по цене от 60$ и выше, нет никакой уверенности, что это оригинальные платы. Интересное предложение по цене около 40$ удалось найти на Banggood, после этого уже не было никакой возможности внутренней жабе противостоять желанию попробовать OpenMV в деле. Также пришлось смириться с тем, что цена в 40$ является акционной и никакие другие скидки не действуют. OpenMV поставляется в простом антистатическом пакете. В комплекте сама камера OpemMV, шилд для прототипирования с набором гребенок с возможностью сквозного подключения, а также добротный USB-MicroUSB кабель. При первом осмотре платы в глаза сразу бросились спаянные между собой ножки микроконтроллера, на странице товара получить вразумительный ответ не удалось. Пришлось смотреть схему с официального сайта, которая убедила, что так и должно быть. Версия платы M7 от 15.10.2016г. Размер OpenMV — 36×45 мм. OpenMV программируется с помощью IDE OpenMV, которая имеет текстовый редактор, средство просмотра кадрового буфера, позволяющее видеть то, что видит камера, последовательный терминал для отладки и отображение гистограммы для облегчения отслеживания цвета. OpenMV IDE поддерживает русский язык и интуитивно понятна. При первом подключении платы к OpenMV IDE, она предлагает обновить встроенную прошивку до актуальной версии, занимает процесс обновления не более пары минут. Одним из не очень приятных моментов является то, что OpenMV IDE просит зарегистрировать вашу плату OpenMV, регистрация естественно не бесплатная. Сообщение о необходимости регистрации появляется трижды при каждом подключении платы, после их закрытия функциональность никак не ограничивается. OpenMV IDE содержит множество примеров. Детектирование линий, кругов, лиц работает удовлетворительно. Пример отслеживания глаз почему-то не заработал. Я впервые столкнулся с языком Python и для меня не стало проблемой разобраться в примерах и редактировать их на свое усмотрение. Пример сохраненного изображения с камеры (в оригинальном разрешении). Примеры обнаружения линий и кругов (в оригинальном разрешении) Неожиданным моментом стало сильное искажение цветов в режиме изображения RGB565, и высокая чувствительность камеры к ИК-излучению. Я предположил, что на камере не установлен ИК-фильтр, хотя на странице товара об этом ничего не сказано и другие обзоры данного товара этого не подтверждают. С одной стороны это даже является плюсом, так как благодаря наличию на плате ИК-светодиодов есть возможность использования OpenMV в темноте, с другой стороны минус, так как примеры по отслеживанию цвета естественно не работают. Я также задумался дополнительно приобрести или вытащить откуда-нибудь объектив с ИК-фильтром. Пример детектирования лица работает с разрешением 240*160 и FPS порядка 22, при этом следует учесть, что параллельно выводится буфер кадра и это замедляет обработку. При блокировке буфера кадра, FPS возрастает более чем в 2 раза, это справедливо для всех алгоритмов. OpenMV поддерживает широкий набор периферии: дисплей, wi-fi модуль, ИК-матрицы, AV-шилд, сервоприводы и прочее. Однако цены на дополнительные модули на официальном сайте на мой взгляд весьма не гуманны, а на других площадках ничего найти не удалось. Так Wi-Fi-шилд основан на ATWINC1500 и стоит 30$ на официальном сайте, поэтому возникает закономерное желание использовать более дешевые ESP8266 и ESP32. На Aliexpress в продаже есть wi-fi шилд на базе ESP8266, но по цене он не уступает оригинальному, схему же и прошивку продавец не дает. Я планирую купить отдельно ATWINC1500, благо он есть в продаже по цене около 12$ и сделать Wi-Fi-шилд самостоятельно. Официальный LCD-шилд основан ан 1,8 TFT с разрешением 160*128 на базе контроллера ST7785, у меня есть в наличии есть лишь дисплей 2,2″ 320*240 на контроллере ILI9343, поддержка которого реализована пользователями OpenMV. К сожалению заставить работать данный дисплей с OpenMV мне не удалось. У меня в наличии имеется ИК-матрица AMG8833 с разрешением 8*8, поддержка которой заявлена в OpenMV. На прото-шилде был собрана простая подключения AMG8833 к OpenMV по шине I2C. К сожалению, при сборке схемы я не учел необходимость соосного расположения камеры и ИК-матрицы. Есть несколько примеров работы с AMG8833: с выводом на дисплей, с наложением термального изображения на изображение камеры и прочие. Примеры работают, как ожидалось. К сожалению, в примерах не реализована интерполяции изображения с AMG8833, реализовать которую можно лишь на низком уровне, редактируя соответствующую библиотеку. Я еще только изучаю возможности OpenMV и языка Python, в планах разработка собственных плат расширения. Я хочу реализовать на OpenMV следующие проекты: 1. Самонаводящаяся водяная/лазерная пушка. 2. Счетчик машин (с измерением скорости при использовании допплеровского радара). 3. GPRS-камера с использованием GPRS-модема. 4. Тепловизионная камера для удаленного наблюдения. Резюмируя можно отметить главные достоинства OpenMV: 1. Низкий порог вхождения. 2. Обширная документация и большое количество примеров. 3. Широкий набор периферийных устройств. 4. Открытая архитектура. Одним из главных недостатков, на мой взгляд, является высокая цена на саму OpenMV и на платы расширения, однако открытость ПО и железа в некоторой степени компенсирует этот недостаток. Также на рынке появились достойные конкуренты OpenMV — Esp32-Cam, Sipeed Maix и прочие, которые однозначно заслуживают внимания. P.S Недавно на Kickstarter успешно завершилась компания по сбору средств на новую, более мощную версию OpenMV — OpenMV H7, сердцем которой является микроконтроллер STM32H743VI. OpenMV H7 уже доступна для предзаказа на официальном сайте, надеюсь и копии от китайских производителей не заставят себя долго ждать. OpenMV стала некоторого рода стандартом в машинном зрении для микроконтроллеров и портирована сторонними разработчиками на другие платформы, такие как i.mx1060 (NXP), k210 (Sipeed).
Обзор самых популярных Python-библиотек с простым и понятным способом преобразования изображений
Введение
Наш сегодняшний мир переполнен данными, большая часть которых состоит из изображений. Однако для работы с изображениями требуется их обработка. Обработка изображений — это процесс анализа и работы с цифровым изображением, направленный на улучшение качества картинки или извлечения информации для дальнейшего использования.
Общие задачи сводятся к отображению изображения и выполнению основных операций (кадрирование, отражение, вращение, сегментация, классификация, извлечение признаков, восстановление и распознавание). Python является отличным средством для решения подобных задач. Благодаря доступности и растущей популярности Python в качестве языка научно-технического программирования, внутри экосистемы появилось множество первоклассных инструментов для обработки изображений.
Давайте рассмотрим популярные Python-библиотеки для работы с изображениями.
1. scikit-image
scikit-image — это Python-пакет с открытым кодом, который работает с массивами NumPy
. Он реализует алгоритмы и утилиты для использования в исследовательских, образовательных и промышленных приложениях. Это весьма простая и понятная библиотека даже для новичков в экосистеме Python. Данная библиотека содержит высококачественный и рецензированный код, написанный активным сообществом добровольцев.
Ресурсы
Библиотека хорошо задокументирована с обилием практических примеров. Ознакомиться с документацией можно здесь.
Примеры
Пакет импортируется как skimage
, а большинство функций находится внутри подмодулей. Несколько примеров использования skimage
:
- Фильтрация изображений
import matplotlib.pyplot as plt %matplotlib inline from skimage import data,filters image = data.coins() # … или любой массив NumPy! edges = filters.sobel(image) plt.imshow(edges, cmap=’gray’)
- Сопоставление шаблонов через функцию match_template
Больше примеров доступно в галерее.
2. NumPy
NumPy — это одна из основных Python-библиотек с поддержкой массивов. Изображение представляет собой стандартный массив NumPy, содержащий пиксели точек данных. Таким образом, при выполнении основных NumPy-операций (срезы, маски, прихотливое индексирование) мы можем изменять пиксельные значения изображения. Само изображение можно загрузить через skimage
и отобразить с помощью Matplotlib
.
Ресурсы
Все ресурсы и документация доступны на официальной странице NumPy.
Пример
Маскирование изображения через NumPy:
import numpy as np from skimage import data import matplotlib.pyplot as plt %matplotlib inline image = data.camera() type(image) numpy.ndarray #Изображение - это массив NumPy mask = image < 87 image[mask]=255 plt.imshow(image, cmap=’gray’)
3. SciPy
SciPy — это такой же важный научный модуль в Python, как и NumPy. Он подходит для решения основных задач по обработке и прочей работе с изображениями. В частности, в подмодуле scipy.ndimage
доступны функции, которые работают в n-мерных массивах NumPy. Текущий пакет включает в себя функции для линейной и нелинейной фильтрации, бинарной морфологии, интерполяции В-сплайнами и измерений объектов.
Ресурсы
Полный список функций в пакете scipy.ndimage
доступен в документации.
Пример
Использование SciPy для размытия изображений с помощью фильтра Гаусса:
from scipy import misc,ndimage face = misc.face() blurred_face = ndimage.gaussian_filter(face, sigma=3) very_blurred = ndimage.gaussian_filter(face, sigma=5) #Результаты plt.imshow()
4. PIL/ Pillow
PIL (Python Imaging Library) — это бесплатная Python-библиотека для открытия, работы и сохранения различных форматов изображений. К сожалению, ее разработка окончательно остановилась, а последнее обновление вышло в 2009. К счастью, есть Pillow — активно развивающийся форк PIL с простой установкой. Он работает на всех основных операционных системах и поддерживает Python 3. Библиотека содержит базовый функционал для обработки изображений, включая точечные операции, фильтры с набором встроенных ядер свертки и преобразование цветового пространства.
Ресурсы
В документации описан процесс установки и примеры использования каждого модуля библиотеки.
Пример
Улучшение изображения через ImageFilter в Pillow:
from PIL import Image, ImageFilter #Read image im = Image.open( 'image.jpg' ) #Display image im.show() from PIL import ImageEnhance enh = ImageEnhance.Contrast(im) enh.enhance(1.8).show("30% more contrast")
5. OpenCV-Python
OpenCV (Open Source Computer Vision Library) — одна из самых популярных библиотек для приложений по компьютерному зрению.OpenCV-Python — это Python-версия интерфейса для OpenCV. Наличие кода на C/C++ в бэкенде гарантирует быстроту библиотеки, а Python-обертка во фронтенде обеспечивает легкость настройки и развертывания. Благодаря этому OpenCV-Python является отличным решением для высоконагруженных вычислительных программ по компьютерному зрению.
Ресурсы
Руководство по OpenCV2-Python поможет быстрее освоиться в библиотеке.
Пример
Наглядный пример использования OpenCV-Python при наложении изображения с помощью пирамид. В результате мы создаем новый фрукт под названием «аплоко».
6. SimpleCV
SimpleCV — это еще один фреймворк с открытым кодом для создания приложений по компьютерному зрению. С ним у вас появляется доступ к нескольким мощным библиотекам компьютерного зрения (например, OpenCV) без необходимости изучения глубины цвета, файловых форматов, цветовых пространств и т.д. Кривая обучения куда меньше, чем в OpenCV, и, как говорится в их слогане, «компьютерное зрение становится проще». Парочка плюсов SimpleCV:
- Простые тесты по машинному зрению смогут написать даже начинающие программисты.
- Функциональная совместимость с камерами, видеофайлами, изображениями и видеопотоками.
Ресурсы
Понятная документация с множеством практических примеров.
Пример
7. Mahotas
Mahotas также является Python-библиотекой для компьютерного зрения и обработки изображений. Она содержит стандартные функции по обработке изображений (фильтры и морфологические операции), а также современные возможности компьютерного зрения для вычисления признаков (обнаружение особых точек и локальные дескрипторы). Быстрота разработки обеспечивается Python-интерфейсом, а плюсом для скорости служат алгоритмы на С++. Mahotas — это быстрая библиотека с минималистичным кодом и зависимостями. Более подробно описано в документации.
Ресурсы
Документация содержит инструкции по установке, практические примеры, а также пошаговые уроки по освоению Mahotas.
Пример
Mahotas решает задачи с помощью простого кода. Для задачи «Где Уолли?» Mahotas требуется минимальное количество кода. Вот исходный код.
8. SimpleITK
ITK или Insight Segmentation and Registration Toolkit — это кросс-платформенная система с открытым кодом, предоставляющая расширенный набор инструментов для анализа изображений. Сюда относится и SimpleITK — упрощенный слой, «надстроенный» поверх ITK. Данный слой облегчает работу с библиотекой при быстром прототипировании, обучении и интерпретируемых языках. SimpleITK — это набор инструментов для анализа изображений с большим количеством компонентов, поддерживающих общую фильтрацию, сегментацию и регистрацию изображений. Сам SimpleITK написан на C++, но доступен для многих языков программирования, включая Python.
Ресурсы
Jupyter Notebook показывает использование SimpleITK в образовательных и исследовательских целях. Он также демонстрирует возможности SimpleITK по интерактивному анализу изображений с использованием языков программирования Python и R.
Пример
Анимация ниже — это визуализация процесса преобразования при регистрации КТ- и МРТ-снимков в SimpleITK и Python. Исходный код доступен здесь.
9. pgmagick
pgmagick — обертка на базе Python для библиотеки GraphicsMagick. Систему GraphicsMagickиногда называют швейцарским ножом в обработке изображений. Она предлагает коллекцию эффективных инструментов и библиотек, поддерживающих чтение, запись и операции с изображениями в более чем 88 основных форматах, включая DPX, GIF, JPEG, JPEG-2000, PNG, PDF, PNM и TIFF.
Ресурсы
pgmagick посвящен целый репозиторий Github. Там вы найдете инструкции по установке и основные требования. Также имеется подробное руководство пользователя.
Примеры
Вот несколько операций с изображениями, которые можно выполнить в pgmagick:
Масштабирование изображения:
Выделение контуров:
10. PyCairo
PyCairo представляет собой набор привязок Python-кода для графической библиотеки Cairo. Cairo — это 2D-библиотека для отрисовки векторной графики. Векторная графика интересна тем, что не теряет своей четкости при изменении размеров или трансформации. PyCairo — это набор привязок для Cairo, с помощью которых можно вызывать Cairo-команды из Python.
Ресурсы
Подробная информация по установке и работе доступна в GitHub-репозитории PyCairo. Есть еще вводное руководство с кратким описанием PyCairo.
Примеры
Отрисовка линий, базовых фигур и радиальных градиентов.
Заключение
Существует ряд полезных и бесплатных библиотек по обработке изображений в Python. Какие-то из них широко известны, а о некоторых вы слышите впервые. Поработайте с разными библиотеками и подберите ту, что подходит именно вам.
136 197 17
Я хотел бы выполнить несколько основных задач машинного зрения с помощью Python, и я хотел бы знать, где я могу найти учебники, которые помогут мне начать работу.
Насколько мне известно, единственная свободная библиотека для Python, которая выполняет машинное зрение, PyCV (которая является оберткой для OpenCV, по-видимому), но я не могу найти подходящих учебников.
Мои главные задачи – получить изображение из FireWire. Сегментируйте изображение в разных регионах. Затем выполните статистику по каждой области для определения области пикселя и центра масс.
Раньше я без проблем использовал Matlab Image Tootlbox. Функции, которые я хотел бы найти в Python, это graythresh, regionprops и gray2ind.
Спасибо!
1 Решение 167
OpenCV, вероятно, лучший выбор для библиотеки; у вас есть для вас выбор оберток. Я посмотрел на оболочку SWIG, которая поставляется со стандартной установкой OpenCV, но в итоге использовала ctypes-opencv, потому что управление памятью было чище.
Они оба очень тонкие обертки вокруг кода C, поэтому любые ссылки на C, которые вы можете найти, будут применимы к Python.
OpenCV огромна и не особенно хорошо документирована, но есть несколько достойных образцов, включенных в каталог образцов, которые вы можете использовать для начала работы. Ссылка на API для поиска по OpenCV здесь.
Вы не упомянули, искали ли вы онлайн или источники печати, но у меня есть O’Reilly, и это неплохо ( примеры в C, но легко переводимые).
Функция FindContours немного похожа на regionprops; он предоставит вам список подключенных компонентов, которые вы можете проверить для получения информации.
Для определения порога вы можете попробовать Threshold. Я был уверен, что вы можете передать ему флаг, чтобы использовать метод Otsu, но он, похоже, не указан в документах.
Я не сталкивался с определенными функциями, соответствующими gray2ind, но они могут быть там.
127
: Несколько лет назад я использовал OpenCV для Python довольно много. OpenCV широко документирован, поставляется со многими примерами, и есть даже книга. Обертки Python, которые я использовал, были достаточно тонкими, так что требовалась очень небольшая документация по обертке (и это характерно для многих других обернутых библиотек). Я полагаю, что несколько минут, глядя на пример, например, тесты модулей PyCV, вам понадобятся, а затем вы можете сосредоточиться на документации OpenCV, которая соответствует вашим потребностям.
Анализ. Что касается лучшей библиотеки, отличной от OpenCV, то мое устаревшее мнение заключается в том, что OpenCV отлично подходит, если вы хотите делать довольно продвинутые вещи (например, отслеживание объектов), но это, возможно, слишком велико для ваших нужд. Похоже, что scipy ndimage в сочетании с некоторыми основными манипуляциями с массивом numpy может быть достаточно.
приобретение. Параметры, которые я знаю для приобретения, – это OpenCV, Motmot или использование ctypes для непосредственного взаимодействия с драйверами. Из них я никогда не использовал Motmot, потому что у меня были проблемы с его установкой. Другие методы, которые я нашел довольно простыми, хотя я не помню деталей (что хорошо, потому что это означает, что это было легко).
99
Я запустил веб-сайт на эту тему: pythonvision.org. В нем есть несколько руководств, а также некоторые ссылки на программное обеспечение. Там есть больше ссылок и учебников.
77
Вам, вероятно, будет хорошо служить SciPy. Ниже приведено вводное руководство для SciPy. Он имеет много общего с Matlab. Особенно включается пакет matplotlib, который явно предназначен для эмуляции функций построения Matlab. Я не верю, что SciPy имеет эквиваленты для упомянутых вами функций. Есть некоторые вещи, которые похожи. Например, порог – очень простая версия graythresh. Он не реализует метод “Otsu”, он просто делает простой порог, но это может быть достаточно близко.
Мне жаль, что я не знаю никаких учебников, которые ближе к задаче, которую вы описали. Но если вы привыкли к Matlab, и вы хотите сделать это в Python, SciPy является хорошей отправной точкой.
45
Я приобрел изображение с камеры FW с помощью .NET и IronPython. На CPython я проверил бы библиотеку ctypes, если вы не найдете библиотечную поддержку для захвата.
45
Предисловие: эта книга больше предназначена для людей, которые хотят получить хорошие руки от внедрения в компьютерное или машинное зрение, хотя оно охватывает то, что задал первоначальный вопрос.
[BOOK]: Программирование Vision Vision с Python
На данный момент вы можете бесплатно скачать окончательный вариант с веб-сайта в формате pdf:
http://programmingcomputervision.com/
Из введения:
Что вам нужно знать
Что вы узнаете
45
Я мало знаю об этом пакете Motmot или как он сравнивается с OpenCV, но я импортировал и использовал класс или два от него. Большая часть обработки изображений выполняется с помощью массивов numpy и может быть достаточно похожа на то, как вы использовали Matlab для удовлетворения ваших потребностей.
Ваш ответ Ты наверняка слышал, что нейросети в последнее время стали чертовски хорошо справляться с распознаванием объектов на картинках. Наша же задача — научиться пользоваться этими нейросетями, ведь их мощь может пригодиться в самых разных случаях. В этой статье я расскажу, как задействовать ее при помощи самых распространенных инструментов: Python и библиотек Tensorflow и Keras.
INFO
В предыдущей статье я показывал примеры простейших нейросетей и демонстрировал, как научить нейронку распознавать цифры. А из статьи «Исходный кот. Как заставить нейронную сеть ошибиться» ты узнаешь, как обмануть машинное зрение.
Бинарная классификация
Научим нашу нейросеть распознавать, кошка или собака изображены на фото. Это классический пример, и к нему в Keras Datasets уже есть необходимый для обучения набор картинок. Иначе нам пришлось бы вручную создать и классифицировать несколько тысяч фотографий.
Подключим необходимые библиотеки.
from tensorflow import keras from tensorflow.keras import layers from tensorflow.keras import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, Activation, BatchNormalization, AveragePooling2D from tensorflow.keras.optimizers import SGD, RMSprop, Adam ## pip install tensorflow-datasets import tensorflow_datasets as tfds import tensorflow as tf import logging import numpy as np import time
Создадим модель нейросети.
def dog_cat_model(): model = Sequential() model.add(Conv2D(32, (3, 3), input_shape=(128, 128, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(32, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(units=128, activation='relu')) model.add(Dense(units=1, activation='sigmoid')) model.compile(optimizer=Adam(), loss='binary_crossentropy', metrics=['accuracy']) return model
У нашей нейронки только один выход, поскольку результатом ее работы будет бинарная величина: единица — собака, ноль — кошка.
Теперь нейросеть следует обучить. В исходном датасете — 25 тысяч изображений. Мы разделим его на две части для обучения и верификации, а каждое изображение обработаем. Размер изображения должен быть 128 × 128 пикселей, а цвет в диапазоне от нуля до единицы.
def dog_cat_train(model): splits = tfds.Split.TRAIN.subsplit(weighted=(80, 10, 10)) (cat_train, cat_valid, cat_test), info = tfds.load('cats_vs_dogs', split=list(splits), with_info=True, as_supervised=True) def pre_process_image(image, label): image = tf.cast(image, tf.float32) image = image/255.0 image = tf.image.resize(image, (128, 128)) return image, label BATCH_SIZE = 32 SHUFFLE_BUFFER_SIZE = 1000 train_batch = cat_train.map(pre_process_image) .shuffle(SHUFFLE_BUFFER_SIZE) .repeat().batch(BATCH_SIZE) validation_batch = cat_valid.map(pre_process_image) .repeat().batch(BATCH_SIZE) t_start = time.time() model.fit(train_batch, steps_per_epoch=4000, epochs=2, validation_data=validation_batch, validation_steps=10, callbacks=None) print("Training done, dT:", time.time() - t_start)
Теперь мы запускаем обучение модели и сохраняем результаты в файл:
model = dog_cat_model() dog_cat_train(model) model.save('dogs_cats.h5')
На моем компьютере с видеокартой GeForce 1060 обучение сети заняло примерно восемь минут.
Теперь мы можем использовать обученную сеть. Напишем функцию распознавания изображения.
def dog_cat_predict(model, image_file): label_names = ["cat", "dog"] img = keras.preprocessing.image.load_img(image_file, target_size=(128, 128)) img_arr = np.expand_dims(img, axis=0) / 255.0 result = model.predict_classes(img_arr) print("Result: %s" % label_names[result[0][0]])
model = tf.keras.models.load_model('dogs_cats.h5') dog_cat_predict(model, "cat.png") dog_cat_predict(model, "dog1.png") dog_cat_predict(model, "dog2.png")
Этот способ можно использовать и для распознавания других изображений, сложность только в поиске данных для обучения сети.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru» ← Ранее Серверы Supermicro уязвимым перед набором багов USBAnywhere и удаленными атаками Далее → В результате взлома форума XKCD пострадали 562 000 человек
ли со статьей или есть что добавить?