Как сделать компьютерное зрение
Некоторые сведения относятся к предварительным версиям продуктов, которые могут быть существенно изменены перед коммерческим выпуском. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Если у вас уже есть пользовательское решение компьютерного зрения, это руководство поможет вам создать оболочку для него с помощью Windows Vision Skills, расширив базовый API Microsoft.AI.Skills.SkillInterfacePreview.
Мы создадим навык анализа выражения лица, используя следующие возможности.
- API Windows.Media.FaceAnalysis и Windows.AI.MachineLearning.
- Модель машинного обучения в формате ONNX, которая выводит выражения на основе изображений лиц.
Этот навык принимает следующие данные:
И возвращает следующие данные:
- тензор значений оценки одинарной точности в диапазоне [0,1] для каждого оцениваемого выражения;
- тензор значений с плавающей запятой в диапазоне [0,1], которые определяют относительные координаты ограничивающего прямоугольника: left (x, y), top (x, y), right (x, y) и bottom (x, y).
В этом руководстве рассматриваются следующие процедуры:
-
для навыка компьютерного зрения Windows; для создания пакета NuGet; файлов для скрытия содержимого.
Предварительные требования
-
(или Visual Studio 2017 версии 15.7.4 и выше);
- Windows 10 версии 1809 или более поздней. версии 1809 и выше;
- пакет NuGet Microsoft.AI.Skills.SkillInterfacePreview.
1. Создание и реализация основных классов навыка
Для начала нам нужно реализовать основные классы навыка (см. важные понятия, связанные с API):
Откройте пользовательское решение компьютерного зрения в Visual Studio.
а. ISkillDescriptor
Создайте и реализуйте класс с дескриптором навыка, наследуемый от ISkillDescriptor. Этот класс предоставляет сведения о навыке, список поддерживаемых устройств для выполнения (ЦП, GPU и т. д.) и выполняет роль объекта фабрики для навыка.
Импортируйте пространство имен Microsoft.AI.Skills.SkillInterfacePreview и унаследуйте класс от интерфейса ISkillDescriptor.
Создайте два экземпляра переменных-членов, которые будут содержать описания входных и выходных данных для навыка. Затем укажите в конструкторе дескриптора соответствующие дескрипторы входных и выходных данных. Кроме того, создайте объект SkillInformation, который предоставляет все необходимые свойства для описания навыка.
Реализуйте обязательный метод, который ищет доступные поддерживаемые устройства для выполнения навыка и возвращает их список пользователю. В нашем примере возвращаются устройства ЦП и DirectX, поддерживающие D3D версии 12 и выше.
Реализуйте обязательные методы для создания экземпляра навыка.
Один из них выбирает лучшее устройство из числа доступных:
Второй использует указанное устройство выполнения:
b. ISkillBinding
Создайте и реализуйте класс привязки навыков, наследуемый от интерфейса ISkillBinding. Он содержит входные и выходные переменные, используемые и создаваемые этим навыком.
Импортируйте пространство имен Microsoft.AI.Skills.SkillInterfacePreview, а затем унаследуйте класс от интерфейса ISkillBinding и обязательного для него типа коллекции.
Создайте два экземпляра переменных-членов:
- Один из них содержит вспомогательный класс VisionSkillBindingHelper, предоставленный в базовом интерфейсе для хранения признака входного изображения с именем InputImage.
- Другой содержит привязку LearningModelBinding, которая позже в классе навыка передается в качестве аргумента в конструктор LearningModelSession.
Объявите обязательные свойства:
А теперь реализуйте конструктор. Обратите внимание, что этот конструктор является внутренним. Так как в нашем примере экземпляры ISkillBinding создаются самим навыком, им не нужен отдельный конструктор.
Создание перечисление, которое упрощает чтение данных о типах выражений, создаваемых нашим навыком.
Реализуйте необязательные дополнительные методы, которые упрощают получение и настройку операций для привязки.
c. ISkill
Создайте и реализуйте класс навыка, наследуемый от интерфейса ISkill, который выполняет логику навыка и создает выходные данные на основе полученного набора входных данных. Он также выполняет роль объекта фабрики для дочерних классов ISkillBinding.
Импортируйте пространство имен Microsoft.AI.Skills.SkillInterfacePreview и унаследуйте класс от интерфейса ISkill.
Создайте два экземпляра переменных-членов:
- Один для размещения FaceDetector и поиска лиц на входном изображении.
- Второй для хранения LearningModelSession и вычисления модели анализа выражений.
Объявите обязательные свойства:
А теперь реализуйте конструктор и статический метод фабрики. Обратите внимание, что этот конструктор является частным, а метод фабрики — внутренним. Так как в нашем примере экземпляры ISkill создаются дескриптором навыком, им не нужен отдельный конструктор.
Затем реализуйте метод фабрики ISkillBinding:
Теперь нужно реализовать основную логику навыка в методе EvaluateAsync(), объявленном в базовом интерфейсе. Сначала мы проверим работоспособность, а затем извлечем выходные признаки для заполнения.
Затем нужно выполнить два шага.
- Шаг 1. Запустите FaceDetector для изображения и извлеките ограничивающий прямоугольник лица.
- Шаг 2. Если лицо обнаружено, скорректируйте ограничивающий прямоугольник, нормализуйте его координаты, чтобы упростить использование, и переходите к анализу выражения для этой части изображения, используя Windows.AI.MachineLearning. По завершении обновите оценку для каждого возможного выражения, полученного в качестве результата.
2. Упаковка навыка в пакет NuGet
Теперь вам нужно скомпилировать навык и создать на его основе пакет NuGet, чтобы приложение могло его обрабатывать.
Чтобы создать пакет NuGet, запишите данные в NUSPEC-файл в представленном ниже формате (см. исходный файл в репозитории Git). Этот файл состоит из двух основных разделов:
metadata. Эта часть содержит имя и описание, автора и владельца, лицензию и зависимости. Обратите внимание, что в нашем примере есть зависимость от пакета NuGet Microsoft.AI.Skills.SkillInterfacePreview. Этот пакет NuGet также содержит ссылку на лицензию и активирует запрос на подтверждение лицензии перед приемом данных.
Теперь упакуйте NUSPEC-файл с помощью nuget.exe (его можно скачать на официальном сайте) и получите NUPKG-файл с пакетом NuGet. Откройте командную строку и перейдите в каталог, где размещается средство nuget.exe, а затем вызовите такую команду:
Для локального тестирования пакета этот NUPKG-файл можно разместить в папке, которую вы указали в Visual Studio в качестве веб-канала NuGet (см. инструкции).
3. И последнее: маскировка и демаскировка файлов для скрытия скрыть интеллектуальной собственности
Маскировка — это событие, выполняемое для проекта перед сборкой либо постоянно, либо однократно с последующим использованием выходных данных в качестве ресурса напрямую. В этом примере используется специальное компилируемое средство (Obfuscator.exe). Прежде чем вызывать это средство в качестве события перед сборкой, вам нужно скомпилировать его. Обратите внимание, что оно выполняется во время компиляции на компьютере разработки, поэтому его можно скомпилировать один раз для любого сочетания платформы и целевого устройства (в нашем примере это Debug/Win32).
Это событие перед сборкой можно задать в Visual Studio следующим образом:
Для проекта C++: щелкните проект навыка правой кнопкой мыши разверните Событие сборки выберите Событие перед сборкой укажите Командная строка.
Эта команда: 1. Копирует ресурс в локальную среду. 2. Шифрует файл в CRYPT-файл (которому можно присвоить любое расширение) с использованием определенной логики, для которой требуется ключ GUID. 3. Удаляет локальный файл.
Мы рекомендуем изменить логику шифрования, предложенную в нашем примере, чтобы она была уникальной для вашего навыка.
Демаскировка выполняется с помощью простого вспомогательного компонента среды выполнения Windows, принимаемого навыком. Логика демаскировки в нем соответствует логике шифрования, которую мы задали на предыдущем шаге.
Используйте следующие ресурсы для получения справки по навыкам компьютерного зрения в Windows:
Привет! Меня зовут Рушан Сюрмаков я делаю Нейрон. Проект, где я рассказываю о машинном обучении, искусственном интеллекте и Data Science. И делаю так, чтобы всё это стало понятно.
Для тебя уже не является новостью тот факт, что все на себе попробовали маски старения через приложение Face App. В свою очередь для компьютерного зрения есть задачи и поинтереснее этой.
Ниже представлю 8 шагов, которые помогут освоить основные принципы компьютерного зрения.
Прежде, чем начать с этапов давайте поймём, какие задачи мы с вами сможем решать с помощью компьютерного зрения. Примеры задач могут быть следующими:
Минимальные знания, необходимые для освоения компьютерного зренияИтак, теперь давайте приступим непосредственно к этапам.
Этот шаг посвящен техническим основам.
Прочтите — третью главу книги Ричарда Шелиски «Компьютерное зрение: Алгоритмы и приложения».
Закрепите знания — попробуйте себя в преобразовании изображений с помощью OpenCV. На сайте есть много пошаговых электронных пособий, руководствуясь которыми можно во всём разобраться.
Шаг 2 — Отслеживание движения и анализ оптического потокаОптический поток — это последовательность изображений объектов, получаемая в результате перемещения наблюдателя или предметов относительно сцены.
Прочтите — разделы 10.5 и 8.4 учебника Шелиски.
В качестве учебного проекта разберитесь с тем, как с помощью OpenCV отслеживать объект в видеофрейме.
В компьютерном зрении, сегментация — это процесс разделения цифрового изображения на несколько сегментов (суперпиксели). Цель сегментации заключается в упрощении и/или изменении представления изображения, чтобы его было проще и легче анализировать.
Так, преобразование Хафа позволяет найти круги и линии.
Посмотрите эти видео:
Ознакомьтесь — отличный проект подобные задачи которого чрезвычайно важны для компьютерного зрения самоуправляемых электромобилей.
Для различных данных требуется специфичный подход к фитингу и свои алгоритмы.
Прочтите — разделы 4.3.2 и 5.1.1 учебника Шелиски.
Шаг 5 — Совмещение изображений, полученных с разных точек осмотраДля проекта можно взять собственные данные. Например, сфотографировать с разных сторон что-то из мебели и сделать в OpenCV из альбома плоских изображений 3D-объект.
Умея создавать 3D-объекты из плоских изображений, можно попробовать создать и трёхмерную реальность.
Шаг 7 — Распознавание объектов и классификация изображенийВ качестве фреймворка для глубокого обучения удобно использовать TensorFlow. Это один из наиболее популярных фреймворков, поэтому вы без труда отыщете достаточно примеров. Для начала работы с изображениями в TensorFlow пройдите этот туториал.
Далее, пользуясь ссылками, рассмотрите следующие темы:
-
: категоризация объектов, сцен, деятельности
- Обнаружение объектов (non max подавление, скользящие окна, ограничивающие боксы и якоря, подсчёт элементов) и Darknet, нейросети для предложения областей (region proposal networks) (обучение с учителем)
В качестве проекта создайте в TensorFlow нейросеть, определяющую по изображению марку автомобиля или породу собаки.
Без компьютерного зрения (англ. computer vision) нынче никуда. Посредством технического зрения могут быть автоматизированы рутинные задачи везде, где есть зрительная информация. Средства computer vision во многих областях уже позволяют добиться лучших результатов, чем человек. Не только по продуктивности, но и, например, относительно качества распознавания объектов.
Профессионалы области востребованы на рынке труда, и сами формируют его, организуя свои компании. Повышается разрешение фото- и видеокамер, растет количество визуальных данных, растут и вычислительные возможности. Компьютеры справляются со всё более трудными задачами распознавания, фильтрации, преобразования и генерации изображений.
Представленный учебный план направлен на то, чтобы вы начали использовать известные решения в области компьютерного зрения для претворения в жизнь собственных идей.
Computer vision – это набор технологий, позволяющих распознавать и интерпретировать визуальную картину мира. Данные – это не только изображения и видео (последовательности кадров), но и трёхмерные объекты. Работа с 3D-сценами особенно актуальна для виртуальной и дополненной реальностей, автопилотов.
Чтобы лучше представлять решаемые с помощью компьютерного зрения проблемы, приведём несколько примеров:
Данный список, конечно, не исчерпывающий. С другими примерами вы встретитесь, занимаясь с перечисленными ниже материалами.
Стоит понимать, что эволюция технологий компьютерного зрения не всегда была связана с искусственным интеллектом и глубоким обучением. Методы компьютерного зрения развиваются более полувека. Но сейчас computer vision часто воспринимается как одна из составляющих искусственного интеллекта.
Действительно, развитие нейросетей повысило интерес к области компьютерного зрения. Однако традиционные методы позволяют результативно реорганизовать данные до того, как они передаются на входной слой нейронной сети. А многие кейсы эффективно решаются и без применения глубокого обучения. Поэтому не пренебрегайте освоением классических идей компьютерного зрения.
Предварительно необходимый багаж знаний следующий:
- Уверенное владение синтаксисом Python (наша подборка ресурсов, для конкретики подойдёт курс на edX).
- Математический анализ (иллюстративный видеокурс).
- Линейная алгебра (иллюстративный видеокурс).
Относительно математики достаточно такого объёма знаний, чтобы вы понимали шпаргалки по матанализу и алгебре.
Инструменты, которые нужно освоить в первую очередь:
И у OpenCV, и у TensorFlow есть интерфейсы Python.
Можно выделить 4 уровня видения графических данных:
- Низкоуровневое видение. Предварительная обработка изображений, то есть преобразование одного изображения в другое. Например, изменение яркости или чёрно-белое представление.
- Среднеуровневое видение. Вычленение особенных свойств, признаков. Например, выделение окружностей или других линий. Базовая сегментация.
- Совмещение различных видов одного предмета. Например, множество представлений одного объекта или его выделение из трёхмерной сцены.
- Высокоуровневое видение. Анализ обнаруженных атрибутов. Детектирование и классификация объектов. Современное глубокое обучение.
Очевидно, что там, где одному достаточно и недели, другой справится лишь за месяц. Всё предопределяется свободным временем и опытом. Для удобства образовательные блоки мы будем далее называть неделями. Каждому из перечисленных уровней преобразования данных в учебном плане отвечают две недели обучения.
Первая неделя посвящена техническим основам, что вы наверняка использовали, если работали с графическими редакторами вроде Adobe Photoshop:
- Изменение освещённости: яркость, контраст, гамма, выравнивание гистограммы.
- Модификация цветовой палитры: ч/б-преобразование, оттенки серого, насыщенность, баланс белого.
- Линейная фильтрация: размытие и зернистость, детектирование краёв, конволюция.
- Нелинейная фильтрация: медианный и билатеральный фильтры. : квантизация изображений, алгоритм Флойда–Стейнберга.
Достаточные сведения о подобных процедурах можно получить из YouTube-плейлиста "Древние секреты компьютерного зрения". В особенности с первой по пятую лекции. В качестве учебника советуем книгу Ричарда Шелиски "Компьютерное зрение: Алгоритмы и приложения". Пока будет достаточно третьей главы.
Чтобы закрепить полученные знания, попробуйте себя в преобразовании изображений с помощью OpenCV. На сайте есть уйма пошаговых электронных пособий, руководствуясь которыми можно во всём разобраться.
Под оптическим потоком подразумевается последовательность изображений объектов, получаемая в результате перемещения наблюдателя или предметов относительно сцены. Для процессов обработки движения объектов подойдёт курс по компьютерному зрению на Udacity, в особенности урок 6. В дополнение к нему полезно посмотреть восьмое видео из упомянутого YouTube-списка и лекцию об оптическом потоке и трекинге. Пригодится и учебник Шелиски, разделы 10.5 и 8.4.
В качестве учебного проекта разберитесь с тем, как с помощью OpenCV отслеживать объект в видеофрейме.
Сегментация предполагает разбиение сцены на совокупность составляющих сегментов (суперпикселей). Алгоритмы сегментации обычно направлены на выделение значимых элементов. Так, преобразование Хафа позволяет найти круги и линии. Настоящим вопросам посвящены две видеолекции. В той же книге о сегментации повествуют разделы 5.2-5.4.
Проект этой недели – вычленение из снимков дороги линий, разделяющих полосы движения. Бесспорно, подобные задачи чрезвычайно важны для компьютерного зрения самоуправляемых электромобилей.
Нередко необходимо найти такие параметры, что в компактной форме опишут имеющиеся зрительные данные. Это позволяет выделять из оптического потока ограниченное количество информации, с которой можно оперативно работать. Для различных данных требуется специфичный подход к фитингу и свои алгоритмы. Посмотрите видео 6 и 7 из этого YouTube-плейлиста. В книге понадобятся пункты 4.3.2 и 5.1.1.
В качестве задания для самостоятельной работы проанализируйте проблему определения координаты места схождения линий на горизонте перспективы.
Что можно сделать при наличии нескольких изображений одного и того же предмета, снятого с разных позиций? К примеру, собрать панораму или трёхмерное представление объекта. Потребуется научиться находить локальный инвариант, преобразовывать и выравнивать изображения, разбираться в гомографии, эпиполярной геометрии и стереометрии.
Если такой набор слов пугает, есть и YouTube-плейлист, и сопроводительное чтение. Для проекта можно взять собственные данные. Например, сфотографировать с разных сторон что-то из кухонной утвари и сделать в OpenCV из альбома плоских изображений 3D-объект.
Итак, умея создавать 3D-объекты из плоских изображений, можно попробовать создать и трёхмерную реальность. Или дополнить имеющуюся. Для этого полезно целиком пройти курс по стереозрению и трекингу на Coursera, а также девятое видео из данного списка.
Как говорилось выше, в качестве фреймворка для глубокого обучения удобно использовать TensorFlow. Это один из наиболее популярных фреймворков, поэтому вы без труда отыщете достаточно примеров. Для начала работы с изображениями в TensorFlow пройдите этот туториал. Далее, пользуясь ссылками, рассмотрите следующие темы:
-
: категоризация объектов, сцен, деятельности
- Обнаружение объектов (non max подавление, скользящие окна, ограничивающие боксы и якоря, подсчёт элементов) и Darknet, нейросети для предложения областей (region proposal networks) (обучение с учителем)
В качестве проекта создайте в TensorFlow нейросеть, определяющую по изображению марку автомобиля или породу собаки.
Хотя нейросетевые технологии и компьютерное зрение эволюционировали независимыми путями, сейчас глубокое обучение представляется одним из стандартов обработки зрительной информации. Современное состояние вопроса раскрывают лекции Стенфордского курса, а также видео 19-20 этого плейлиста. Если захотите большего, по теме Deep Learning у нас тоже есть учебный план.
Проектом заключительной недели можно взять построение генеративно-состязательной нейросети для детектирования лиц. Или любую другую идею, которая наверняка появится к этому времени. У вас будет уже достаточно знаний, чтобы подступиться к её воплощению.
Computer Vision - одна из самых горячих тем в искусственном интеллекте. Он делает огромные успехи в автомобилях с автоматическим управлением, робототехнике, а также в различных приложениях для коррекции фотографий. Устойчивый прогресс в обнаружении объектов происходит каждый день. Исследователи также обращают внимание на GAN. Видение показывает нам будущее технологий, и мы даже не можем себе представить, каков будет конец его возможностей.
- Понимание цветовых моделей и рисунков на изображениях
Первая история этой серии будет посвящена установке OpenCV, объяснению цветовых моделей и рисованию фигур на изображениях. Полный код для этого урока также доступен наGithub, Теперь давайте начнем.
Обработка изображениявыполняет некоторые операции с изображениями, чтобы получить запланированные манипуляции. Подумайте о том, что мы делаем, когда начинаем новый анализ данных. Мы выполняем некоторую предварительную обработку данных и разработку функций. То же самое и с обработкой изображений. Мы выполняем обработку изображений, чтобы манипулировать изображениями для извлечения из них некоторой полезной информации. Мы можем уменьшить шумы, контролировать яркость и цветовой контраст. Чтобы узнать подробные основы обработки изображений, посетитеэто видео,
OpenCV обозначаетOpen Source Computer Visionбиблиотека и была изобретена Intel в 1999 году. Впервые она написана на C / C ++, так что вы можете увидеть учебники больше на языках Си, чем на Python. Но теперь он также широко используется в Python для компьютерного зрения. Перво-наперво, давайте настроим подходящую среду для использования OpenCV. Установка может быть обработана следующим образом, но вы также можете найти подробное описаниеВот,
После завершения установки попробуйте импортировать пакет, чтобы убедиться, что он работает хорошо. Если вы получите возврат без каких-либо ошибок, то теперь вы готовы к работе!
Первый шаг, который мы собираемся сделать с OpenCV, это импорт изображения, и это можно сделать следующим образом.
Ты когда-нибудь был вБурано? Это один из самых красивых островов в Италии. Если вы не были там, вам обязательно нужно проверить это место на следующий отпуск. Но если вы уже знаете этот остров, вы, вероятно, заметите, что на этой картинке что-то другое. Это немного отличается от картин, которые мы обычно видим из Бурано. Это должно быть более восхитительным, чем это!
Это связано с тем, что настройка по умолчанию цветового режима в OpenCV имеет порядок BGR, который отличается от режима Matplotlib. Поэтому, чтобы увидеть изображение в режиме RGB, нам нужно преобразовать его из BGR в RGB следующим образом.
Теперь это Бурано! Такой прекрасный остров в Италии!
Давайте поговорим о цветовых режимах немного подробнее.Цветовая модель это система для создания полного спектра цветов с использованием основных цветов. Здесь есть две разные цветовые модели:аддитивные цветовые моделиа такжевычитающие цветовые модели, Аддитивные модели используют свет для представления цветов на экранах компьютеров, в то время как субтрактивные модели используют чернила для печати этих цифровых изображений на бумаге. Основными цветами являются красный, зеленый и синий (RGB) для первого и голубой, пурпурный, желтый и черный (CMYK) для последнего. Все остальные цвета, которые мы видим на изображениях, создаются путем объединения или смешивания этих основных цветов. Таким образом, изображения могут быть изображены немного по-другому, когда они представлены в RGB и CMYK.
Вы бы довольно привыкли к этим двум типам моделей. Однако в мире цветовых моделей существует более двух видов моделей. Из их,оттенки серого, HSVа такжеHLSэто те, которые вы будете часто видеть в компьютерном зрении.
Оттенки серого просто. Он представляет изображения и морфологию по интенсивности черного и белого, что означает, что он имеет только один канал. Чтобы увидеть изображения в градациях серого, нам нужно преобразовать цветовой режим в серый, как мы делали это ранее с изображением BGR.
На самом деле изображения RGB создаются путем объединения трех каналов: R, G и B. Поэтому, если мы возьмем каждый канал и изобразим их один за другим, мы сможем понять, как структурированы цветовые каналы.
Посмотрите на изображения выше. Три изображения показывают, как составлен каждый канал. На изображении канала R деталь с высокой насыщенностью красного цвета выглядит белой Почему это? Это потому, что значения в частях красного цвета будут около 255. И в режиме оттенков серого, чем выше значение, тем белее становится цвет. Вы также можете проверить это с помощью каналов G или B и сравнить, как определенные части отличаются друг от друга.
HSV и HLS имеют немного другой аспект. Как вы можете видеть выше, они имеют трехмерное представление, и оно больше похоже на способ человеческого восприятия.HSVобозначает оттенок, насыщенность и ценность.HSLобозначает оттенок, насыщенность и легкость. Центральная ось для HSV - это значение цветов, а для HSL - количество света. Вдоль углов от центральной оси, есть оттенок, фактические цвета. А расстояние от центральной оси принадлежит насыщенности. Преобразование цветового режима можно сделать следующим образом.
Но почему мы должны преобразовывать цвета? Для чего они? Одним из примеров, который может дать ответ, является обнаружение полосы движения. Пожалуйста, посмотрите на картинку ниже. Посмотрите, как полосы обнаруживаются в разных цветовых режимах. Во время задачи компьютерного зрения мы выполняем многократное преобразование цветового режима наряду с маскированием. Если вы хотите узнать больше о том, как обработка изображений применяется в задаче определения полосы движения, не стесняйтесь проверитьэта почтапоначикет танцале,
Теперь я верю, что вы поняли идею. Обработка изображений - это «предварительная обработка данных». Она уменьшает шумы и извлекает полезные шаблоны для упрощения задач классификации и обнаружения. Поэтому все эти методы, в том числе те, которые мы обсудим позже, предназначены для того, чтобы помочь модели легче обнаруживать шаблоны.
Давайте приведем некоторые цифры на изображении. Теперь мы едем в Париж. Вы когда-нибудь слышали остена любви? Это стена, которая наполнена словами «Я люблю тебя» на всех языках мира. Мы собираемся найти слова на нашем языке и пометить их прямоугольником. Поскольку я из Южной Кореи, я буду искать слово «Я люблю тебя» на корейском языке. Сначала я сделаю копию исходного изображения, а затем нарисую прямоугольник с cv2.rectangle() Нам нужно дать значения координат для верхней левой точки и нижней правой точки.
Большой! Я думаю, что поймал правильную позицию. Давай попробуем снова. Я вижу еще одно корейское слово на картинке, поэтому на этот раз я сделаю круг. С cv2.circle() нам нужно указать точку его центра и длину его радиуса.
Мы также можем поместить текстовые данные на изображение. Почему мы не пишем название этой стены на этот раз? С cv2.putText() Мы можем обозначить положение, стиль шрифта и размер текста.
Это действительно «прекрасная» стена, не так ли? Попробуйте сами и найдите «Я люблю тебя» на своем языке! 😍
Теперь мы были в Италии и Франции. Куда бы вы хотели пойти дальше? Почему бы нам не поставить карту и не отметить места? Мы собираемся создать окно и рисовать фигуры, не обозначая точки, а щелкая непосредственно в окне. Давайте сначала попробуем круг. Сначала мы создадим функцию, которая будет рисовать круг с данными для положения и щелчка мышью.
С cv2.EVENT_LBUTTONDOWN или cv2.EVENT_RBUTTONDOWN мы можем принести данные для позиции, когда мы нажимаем кнопки мыши. Положение мыши будет (x, y) и мы нарисуем круг, центр которого находится в этой точке.
Мы установим карту в качестве фона окна и назовем окно какмой рисунок, Название окна может быть любым, но оно должно быть таким же, потому что это действует как идентификатор окна. Используя cv2.setMouseCallback() мы устанавливаем связь между окном и функцией draw_circle мы сделали на шаге 1.
Теперь мы выполняем окно, используя цикл while. Не забудьте установить разрыв, если вы не делаете бесконечный цикл. Условием предложения if является установка окна, которое должно быть закрыто, когда мы нажимаем ESC на клавиатуре. Сохраните это как файл и импортируйте его на свой терминал. Если вы хотите использовать jupyter lab, поместите коды в одну ячейку и выполните. Теперь скажи мне! Куда ты хочешь пойти?
Давайте попробуем прямоугольник. Как прямоугольник требует две точки дляpt1а такжеpt2в cv2.rectangle() нам нужен дополнительный шаг, чтобы установить первую точку клика какpt1и последний пункт какpt2, И мы собираемся обнаружить движение мыши с cv2.EVENT_MOUSEMOVE а также cv2.EVENT_LBUTTONUP ,
Сначала мы определим drawing = False по умолчанию. Когда левая кнопка нажата, drawing становится правдой, и мы даем эту первую позицию какpt1, Если рисование включено, текущая точка будет воспринята какpt2и продолжайте рисовать прямоугольники, пока мы перемещаем мышь. Это как наложение цифр. Когда левая кнопка вверх, drawing становится ложным, и он принимает последнюю позицию мыши в качестве конечной точкиpt2,
замещать draw_circle функция к draw_rectangle на шаге 1. Пожалуйста, не забудьте внести изменения в функцию обратного вызова, cv2.setMouseCallback() также. Таким образом, весь код сценария будет выглядеть следующим образом. Сохраните этот файл скрипта и запустите его на терминале или ноутбуке Jupyter.
Вам понравилось в первый раз с OpenCV? Вы также можете попробовать другие функции, такие как рисование линии или многоугольника. Не стесняйтесь проверять документацию для этого, которая может быть найденаВот, В следующий раз мы поговорим о более продвинутых технологиях, таких как присоединение двух разных изображений, контур изображения и обнаружение объектов.
⭐️ И вы также можете найти эти серии интересными ⭐️
- Основная концепция сверточных нейронных сетей:
Самое интуитивное и простое руководство для CNN
Демистификация сверточной нейронной сети для начинающих
- Усовершенствованные сети сверточных нейронных сетей:
Глубокое погружение в мир компьютерного зрения: часть 1
Начиная с VGG, ResNet и Первоначальной Сети
Читайте также: