Opencv обнаружение объектов python

Обнаружение и распознавание объектов в Python с помощью OpenCV

OpenCV – это огромная библиотека с открытым исходным кодом для обработки изображений, машинного обучения и компьютерного зрения. Также играет важную роль в процессах реальном времени. С помощью библиотеки OpenCV мы можем легко обрабатывать изображения, а также видео, чтобы идентифицировать объекты, лица или даже почерк человека, присутствующего в файле.

В этом руководстве мы сосредоточимся только на обнаружении и распознавании объектов изображений в Python с помощью OpenCV. Мы узнаем, как мы можем использовать OpenCV для обнаружения объектов по заданному изображению с помощью программы Python.

Обнаружение объекта

По сути, обнаружение объектов – это современная компьютерная технология, которая связана с обработкой изображений, глубоким обучением и компьютерным зрением для обнаружения объектов, присутствующих в файле изображения. Все технологии, используемые в методе обнаружения объектов (как мы упоминали ранее), связаны с обнаружением экземпляров объекта на изображении или видео.

С использованием OpenCV

В этом разделе мы узнаем, как мы можем выполнять обнаружение объектов в изображении или видео с помощью библиотеки OpenCV. Сначала мы импортируем библиотеку OpenCV в программу Python, а затем будем использовать функции для обнаружения объектов в предоставленном нам файле изображения. Но, прежде чем использовать и импортировать библиотечные функции, давайте сначала установим требования для использования техники обнаружения объектов.

В этом уроке мы будем использовать каскадную технику Хаара для обнаружения объектов. Давайте сначала узнаем вкратце о каскадной технике Хаара.

Читайте также:  Php multi query mysql

Каскад Хаара

По сути, каскадная техника Хаара – это подход, основанный на машинном обучении, при котором мы используем множество положительных и отрицательных изображений, чтобы научиться классифицировать изображения. Каскадные классификаторы Хаара считаются эффективным способом обнаружения объектов с помощью библиотеки OpenCV. Теперь давайте разберемся с концепцией положительных и отрицательных изображений, которую мы обсуждали ранее:

  • Положительные изображения: это изображения, которые содержат объекты, которые мы хотим идентифицировать с помощью классификатора.
  • Отрицательные изображения: это изображения, которые не содержат никаких объектов, которые мы хотим обнаружить классификатором, и это могут быть изображения всего остального.

Требования для обнаружения объектов с помощью Python OpenCV

Мы должны сначала установить некоторые важные библиотеки в нашу систему, поскольку это важное требование для выполнения задач обнаружения объектов. Мы должны установить следующие библиотеки в нашу систему в качестве требования для выполнения обнаружения объектов:

Прежде всего, требование для выполнения обнаружения объектов с использованием библиотеки OpenCV состоит в том, что библиотека OpenCV должна присутствовать на нашем устройстве, чтобы мы могли импортировать ее в программу Python и использовать ее функции обнаружения объектов. Если этой библиотеки нет в нашей системе, мы можем использовать следующую команду в нашем терминале командной строки для ее установки:

Установка библиотеки OpenCV

Когда мы нажимаем клавишу ввода после написания этой команды в терминале, установщик pip в командной строке начнет установку библиотеки OpenCV в нашу систему.

Отображение процесса установки библиотеки OpenCV

Как мы видим, библиотека OpenCV успешно установлена в нашей системе, и теперь мы можем импортировать ее в программу Python, чтобы использовать ее функции.

Matplotlib очень полезна при открытии, закрытии, чтении изображений в программе Python, и поэтому установка этой библиотеки для обнаружения объектов становится важным требованием. Если библиотека matplotlib отсутствует в нашей системе, мы должны использовать следующую команду в нашем терминале командной строки, чтобы установить ее:

Библиотека matplotlib

Когда мы нажимаем клавишу ввода после написания этой команды в терминале, установщик pip в командной строке начнет установку его в нашу систему.

Установка библиотеки matplotlib

Как мы видим, библиотека matplotlib успешно установлена в нашей системе, и теперь мы можем импортировать ее в программу Python, чтобы использовать ее функции для открытия, чтения и т. д. изображений.

Мы установили все необходимые библиотеки для выполнения обнаружения объектов, и теперь мы можем перейти к реализации части этой задачи.

Реализация в Python

В этой части мы напишем программу Python для обнаружения объектов и понимания его реализации. Мы будем использовать следующее изображение в нашей программе Python, чтобы выполнить обнаружение объекта на нем:

Изображение для обнаружения объекта

Открытие изображения

Сначала мы откроем изображение, приведенное выше, и создадим среду изображения, чтобы показать его на выходе. Давайте сначала рассмотрим пример программы, чтобы понять ее реализацию, а затем рассмотрим пояснительную часть.

Пример 1: Открытие изображения с помощью OpenCV и библиотеки matplotlib в программе Python

# Import OpenCV module import cv2 # Import pyplot from matplotlib as pltd from matplotlib import pyplot as pltd # Opening the image from files imaging = cv2.imread("opencv-od.png") # Altering properties of image with cv2 img_gray = cv2.cvtColor(imaging, cv2.COLOR_BGR2GRAY) imaging_rgb = cv2.cvtColor(imaging, cv2.COLOR_BGR2RGB) # Plotting image with subplot() from plt pltd.subplot(1, 1, 1) # Displaying image in the output pltd.imshow(imaging_rgb) pltd.show()

Пример 1

Во-первых, мы импортировали библиотеки OpenCV(как cv2) и matplotlib(как plt) в программу, чтобы использовать их функции в коде. После этого мы открыли файл изображения с помощью функции imread() cv2.

Затем мы определили свойства изображения, которое мы открыли в программе, с помощью функций cv2. Затем мы строим подзаголовок изображения, используя функцию subplot() plt и задавая в ней параметры. Наконец, мы использовали функции imshow() и show() модуля plt, чтобы показать изображение на выходе.

Как мы видим на выходе, изображение отображается в результате работы программы, а его границы были нанесены на вспомогательные черты.

Распознавание или обнаружение объекта на изображении

Теперь мы будем использовать функцию detectMultiScale() в программе для обнаружения объекта, присутствующего на изображении. Ниже приведен синтаксис использования в коде функции detectMultiScale():

found = xml_data.detectMultiScale(img_gray, minSize =(30, 30))

Мы будем использовать оператор условия с этой функцией в программе, чтобы проверить, обнаружен ли какой-либо объект на изображении или нет, и выделить обнаруженную часть. Давайте разберемся с реализацией обнаружения объектов на изображении на примере программы.

Пример 2: Обнаружение объекта на изображении с помощью метода detectMultiScale()

# Import OpenCV module import cv2 # Import pyplot from matplotlib as plt from matplotlib import pyplot as pltd # Opening the image from files imaging = cv2.imread("opencv-od.png") # Altering properties of image with cv2 imaging_gray = cv2.cvtColor(imaging, cv2.COLOR_BGR2GRAY) imaging_rgb = cv2.cvtColor(imaging, cv2.COLOR_BGR2RGB) # Importing Haar cascade classifier xml data xml_data = cv2.CascadeClassifier('XML-data.xml') # Detecting object in the image with Haar cascade classifier detecting = xml_data.detectMultiScale(imaging_gray, minSize =(30, 30)) # Amount of object detected amountDetecting = len(detecting) # Using if condition to highlight the object detected if amountDetecting != 0: for(a, b, width, height) in detecting: cv2.rectangle(imaging_rgb,(a, b), # Highlighting detected object with rectangle (a + height, b + width), (0, 275, 0), 9) # Plotting image with subplot() from plt pltd.subplot(1, 1, 1) # Displaying image in the output pltd.imshow(imaging_rgb) pltd.show()

Пример 2

После открытия изображения мы импортировали в программу XML-файл каскадного классификатора. Затем мы использовали функцию detectMultiScale() с импортированным каскадным файлом, чтобы определить, присутствует ли объект на изображении или нет.

Мы использовали условие if в программе, чтобы проверить, обнаружен ли объект или нет, и если объект обнаружен, мы выделили часть обнаруженного объекта, используя цикл for с функциями cv2. Выделив на изображении часть обнаруженного объекта, мы отобразили обработанное изображение с помощью функций plt show() и imshow().

Как мы видим в выводе, изображение с выделенной частью обнаруженного объекта показывается нам, когда мы запускаем программу.

Источник

Поиск объектов на изображении. Часть 1

Компьютерное зрение — удивительная область, которая позволяет компьютерам видеть и понимать мир через обработку изображений и видео. Одним из наиболее популярных инструментов для работы с компьютерным зрением является библиотека OpenCV. В этой статье мы рассмотрим, как использовать OpenCV для распознавания обьектов на изображении.

Допустим мы хотим найти карты из игры Дурак онлайн. Вот такое изображение мы будем обрабатывать.

Шаг 1: Установка и настройка OpenCV

Первым шагом будет установка и настройка OpenCV. Вы можете установить OpenCV с помощью pip, выполнив следующую команду:

Шаг 2: Загрузка и предобработка изображения

Прежде чем начать распознавание карт, нам нужно загрузить изображение стола с картами. Мы используем функцию cv2.imread , чтобы загрузить изображение в переменную image :

image = cv2.imread('table_image.jpg') 

Затем мы можем преобразовать изображение в оттенки серого и применить размытие для удаления шума:

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (5, 5), 0) 

Шаг 3: Пороговая обработка

Для обнаружения контуров карт на изображении мы используем пороговую обработку. Пороговая обработка преобразует изображение в бинарное изображение, где каждый пиксель считается либо черным, либо белым. Мы можем использовать функцию cv2.threshold для этого:

thresholded = cv2.threshold(blurred, 100, 255, cv2.THRESH_BINARY)[1] 

Шаг 4: Поиск контуров

Теперь мы можем использовать функцию cv2.findContours , чтобы найти контуры на изображении:

contours, _ = cv2.findContours(thresholded, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 

Функция cv2.findContours возвращает список контуров на изображении.

Шаг 5: Обводка найденных карт на экране

Чтобы обвести найденные карты на экране, мы используем функцию cv2.drawContours . Например, чтобы обвести контуры зеленым цветом, мы можем использовать следующий код:

cv2.draw Contours(image, contours, -1, (0, 255, 0), 2) 

Этот код обведет все найденные контуры зеленым цветом толщиной 2 пикселя.

Шаг 6: Отображение изображения с обведенными картами

Наконец, мы можем отобразить изображение с обведенными картами на экране с помощью функции cv2.imshow :

cv2.imshow('Detected Cards', image) cv2.waitKey(0) cv2.destroyAllWindows() 

Этот код откроет окно с изображением, на котором будут обведены найденные карты. Ожидание нажатия клавиши cv2.waitKey(0) позволяет пользователю просмотреть изображение до его закрытия.

import cv2 # Загрузка изображения image = cv2.imread('test_card.jpg') # Предобработка изображения gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (5, 5), 0) thresholded = cv2.threshold(blurred, 100, 255, cv2.THRESH_BINARY)[1] # Поиск контуров на изображении contours, _ = cv2.findContours(thresholded, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # Отображение контуров на изображении cv2.drawContours(image, contours, -1, (0, 255, 0), 2) # Отображение изображения с контурами cv2.imshow('Detected Cards', image) cv2.waitKey(0) cv2.destroyAllWindows() 

Как мы видим программа успешно справилась с поиском карт на переднем и боковых планах, однако в центре все сработало не очень.

Заключение

В этой статье мы рассмотрели, как использовать библиотеку OpenCV для распознавания карт на столе и обводки их на экране. Мы рассмотрели шаги от загрузки и предобработки изображения до поиска контуров и обводки найденных карт. OpenCV предоставляет мощные инструменты для обработки изображений и компьютерного зрения, и вы можете использовать эти техники для создания различных проектов, связанных с распознаванием и обработкой изображений. Однако в целом все распозналось не очень, ничего страшного, в следующих статьях мы исправим это.

Источник

Оцените статью