Применение библиотек в Python

XXVI Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке

Применение библиотек в Python

Горбунова Е.А. 1
1МАОУ СШ 2
Саитова Л.Н. 1
1МАОУ СШ 2
Автор работы награжден дипломом победителя I степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

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

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

Предмет: обработка изображений с помощью функций библиотеки OpenCV

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

Задачи:

1. Изучить историю появления языка Python.

2. Выявить области применения библиотеки OpenCV.

3. Оценить уровень мотивации обучающихся до и после внедрения практических задач с использованием OpenCV.

4. Создать и апробировать курс, ориентированный на применение OpenCV в образовательном процессе

Перед началом исследования была выдвинута гипотеза: использование библиотеки OpenCV поможет школьникам научиться создавать увлекательные проекты с использованием компьютерного зрения, тем самым повысить их заинтересованность в изучении языка программирования Python.

В работе применены следующие методы исследования: сбор и анализ информации, анкетирование, обобщение полученных данных, программирование.

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

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

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

 

Глава 1. Развитие языка Python

1.1. История создания языка Python

В конце 1980-х годов сотрудником голландского национального института математики и информатики GWI Гвидо ван Россумом (Guido van Rossum) была предложена идея создания нового языка программирования.

В то время Гвидо участвовал в разработке учебного языка ABC, как базы для изучения программирования. Проект ABC в итоге не увенчался успехом и Гвидо перешел к программированию в другие проекты, где ключевой темой была операционная система Amoeba (объединяющая компьютеры в сети и дающая пользователям иллюзию взаимодействия с единой системой).

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

Авторы ABC начали разрабатывать язык в конце 70-х - начале 80-х годов. Гвидо присоединился к команде в 1983 году. По разным причинам проект ABC не имел большого успеха. В 1986 году Гвидо перешел в другой проект в CWI, проект Amoeba.

К концу 1980-х они обнаружили, что нужен язык сценариев. В этом проекте у Гвидо была большая степень свободы, чтобы начать свой собственный мини-проект в рамках того, что они делали. Он решил попробовать создать простой язык сценариев, который обладал бы некоторыми из лучших свойств ABC, но без проблем.

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

С самого начала язык проектировался как объектно-ориентированный. Гвидо ван Россум назвал язык в честь популярного британского комедийного телешоу 1970-х «Monty Python’s Flying Circus», поскольку автор был поклонником этого телешоу, как и многие другие разработчики того времени, а в самом шоу прослеживалась некая параллель с миром компьютерной техники.

В феврале 1991 года Гвидо опубликовал в группе новостей исходный текст Python версии 0.9.0. В этом начальном релизе были модули, заимствованные из Modula-3. Ван Россум описывал модуль как «один из главных элементов в программировании на Python».

Python 1.0 появился в январе 1994 года. Последней версией, выпущенной Ван Россумом во время работы в центре математики и информатики (CWI), был Python 1.2.

С 1995 года Гвидо Ван Россум продолжил работу над Python в корпорации национальных исследовательских инициатив (CNRI) в городе Рестон, штат Вирджиния, где было выпущено несколько версий языка. С тех пор Python стал очень популярен среди разработчиков, которых привлекает его чистый синтаксис и репутация продуктивности.

В настоящее время Гвидо ван Россум также является Президентом общества Python Software Foundation. [6].

1.2. Что такое библиотека?

Библиотека — это готовый набор функций и объектов для какого-либо языка программирования. Обычно такие наборы объединены назначением или сферой использования, например математические библиотеки или веб-библиотеки. Программисты пользуются ими, чтобы ускорять и упрощать свою работу.

Полностью термин звучит как «библиотека подпрограмм». Функции, объекты и другие сущности, которые входят в библиотеку, можно использовать в коде и тем самым облегчать себе задачу. Например, не писать с нуля сложный алгоритм сортировки, а вызвать функцию из библиотеки, где он уже реализован. Это своеобразный набор «строительных блоков» для кода.

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

Функции собирают в библиотеки для решения какой-то конкретной задачи: математических вычислений, отправки сообщений на сервер, построения модели для машинного обучения и так далее. Какие классы, объекты и функции войдут в библиотеку — зависит от задачи и от того, что для нее требуется чаще всего.

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

У библиотек довольно широкая классификация в зависимости от назначения, типа распространения, способа использования и так далее.

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

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

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

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

Разработчики могут создавать и свои собственные библиотеки — это по сути наборы функций, и реализовать их может любой опытный программист.

Статические и динамические. Статическая библиотека — это файл с программным кодом, который описывает нужные сущности. Ее подключают к программе с помощью специальной команды; некоторые языки позволяют подключать не библиотеку целиком, а только ее части. При запуске код из библиотеки как бы «вставляется» в программу и становится ее частью.

Динамическая библиотека — это отдельный исполняемый файл на машинных кодах. Он тоже подключается к коду, но иначе — во время запуска. Такая библиотека не «встраивается» в код, а остается отдельным модулем. Сущности из нее подгружаются в работающую программу динамически, уже во время выполнения.

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

Стандартная библиотека Python была создана самим разработчиком языка — голландским программистом Гвидо ван Россумом. Она является встроенной библиотекой и не требует отдельного подключения. Чтобы использовать её функционал, достаточно просто в начале программы написать import и название библиотеки.

 В Python есть множество различных сторонних библиотек. NumPy и SciPy — библиотеки для математических и научных вычислений. TensorFlow, которая популярна в машинном обучении и помогает легко создавать нейронные сети. Сюда же можно отнести библиотеки Scikit Learn, Keras и Pandas — они тоже нужны для машинного обучения.

Для веба и других задач есть, например, Requests — библиотека, которая упрощает запросы. Для разработки игр существует Pygame, а для построения графиков — Matplotlib и Seaborn, OpenCV для работы с изображениями и многое другое [8].

1.3. Структура библиотеки

Структура библиотеки в программировании может включать следующие элементы:

  • Интерфейсная секция (interface). Содержит объявления программных объектов, видимых в любой программе или библиотеке, которая подключает данную библиотеку. Также в ней могут быть подключения других библиотек, объявления констант, типов, переменных, подпрограмм. 

  • Секция реализации (implementation). Содержит полные описания подпрограмм из интерфейсной секции. Реализация модуля может также содержать объявления внутренних программных объектов, не видимых в других программах и библиотеках. 

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

Например, в языке Pascal/Delphi библиотека оформляется в виде отдельного текстового файла с именем, которое должно совпадать с именем библиотеки. 

Также в структуре библиотеки могут быть и другие элементы, например, в Python это могут быть файлы с лицензией, конфигурацией и информацией о библиотеке [12]. 

1.4. Пиксели и цветовые модели

Цветное изображение на экране складывается из пикселей, каждый из которых имеет свой цвет. Для того чтобы закодировать цвет одного пикселя можно использовать различное количество битов. Если, допустим, на кодирование цвета используется 8 битов, то максимум можно закодировать 28 = 256 цветов, Это значит, что одновременно на экране можно отразить не более 256 цветов. Чем больше битов отводится под кодирование цвета, тем больше различных цветов можно закодировать. Если использовать не 8 бит, а 16 битов, то можно закодировать уже 216 = 65536 цветов. Такой 16-битовый способ кодирования называется High Color. Если для кодирования использовать 24 бита, то одновременно можно отобразить целых 16,5 миллионов цветов. Этот способ кодирования называется True Color.

Цветовая модель RGB применяется в мониторах и цветных телевизорах – везде, где изображение рассматривается в проходящем свете (Приложение 1). Считается, что существует три основных цвета:

  • Красный (Red);

  • Зеленый (Green);

  • Синий (Blue).

Первые буквы названий основных цветов составляют название модели RGB. Считается, что все остальные цвета можно получить смешиванием основных цветов взятых с разной степенью яркости. Чем ниже яркость, тем темнее получается оттенок цвета. В модели RGB яркость основных цветов представлена в виде числа, находящегося в промежутке между 0 и 255. Например, максимально яркий красный цвет в RGB записывается как (255,0,0). Зеленый – (0,255,0). Синий – (0,0,255). При этом цвет (150,0,0) тоже будет красным, но более темным. Черный цвет получается при нулевой яркости всех основных цветов – (0,0,0), а белый – наоборот, при максимальной яркости (255,255,255). Кроме записи десятичными числами можно встретить кодирование цветов в RGB в шестнадцатеричном формате. Например, красный цвет в шестнадцатеричном формате выглядит так: FF0000.

Цветовая модель HSV состоит из семи цветов натурального спектра: красный, оранжевый, желтый, зеленый, голубой, синий и фиолетовый (Приложение 2). Однако название модели складывается из первых букв следующих параметров:

  • Цветовой тон (Hue). Определяется как число в диапазоне от 0 до 240.

  • Насыщенность (Saturation). Этот параметр варьирует от 0 до 100.

  • Яркость (Bright) или значение цвета (Value). Также варьирует от 0 до 100 [11].

1.5. Применение библиотеки OpenCV

OpenCV является сторонней библиотекой Python. Она может использоваться везде, где нужно компьютерное зрение. Эта отрасль IT работает с технологиями, которые позволяют устройству «увидеть», распознать и описать изображение. Компьютерное зрение дает точную информацию о том, что изображено на картинке, с описанием, характеристиками и размерами (с определенной степенью достоверности). Также библиотека работает с машинным обучением — отраслью, которая обучает алгоритмы действовать тем или иным образом.

OpenCV применяется:

в робототехнике — для ориентирования робота в пространстве, распознавания объектов и взаимодействия с ними;

в медицинских технологиях — для создания точных методов диагностики, например 3D-визуализации органа при МРТ;

в промышленных технологиях — для автоматизированного контроля качества, считывания этикеток, сортировки продуктов и пр.;

в охранной деятельности — для создания «умных» камер видеонаблюдения, которые реагируют на подозрительные действия, для считывания и распознавания биометрии;

в мобильной фотографии — для создания бьюти-фильтров, изменяющих лицо приложений;

в обслуживании транспорта для разработки автопилотов.

Функции OpenCV:

Работа со структурами данных

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

Видоизменение изображений

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

Добавление эффектов

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

Рисование поверх изображения

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

Распознавание объектов

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

Работа с видеороликами

Новые версии библиотеки поддерживают работу не только с картинками, но и с видео. Они могут считывать ролики с использованием кодеков, анализировать происходящее в них, отслеживать движения и элементы. Это полезно, например, при программировании движущегося робота или создании ПО для камеры видеонаблюдения [7]. 

Глава 2. Курс OpenCV в образовательном процессе

2.1. Анализ анкетирования

Чтобы узнать на каком уровне находятся знания учащихся в области программирования, было принято решение провести анонимное анкетирование среди учащихся 10-х классов в  МАОУ СШ 2 г. Красноуфимска.

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

1. Знакомы ли вы с каким-либо языком программирования?

2. Знаете ли вы про библиотеку OpenCV в языке программирования Python?

3.Хотели бы вы научиться работать с данной библиотекой?

Теперь разберём, почему была составлена именно такая анкета. Вопрос 1 проверяет общий уровень знаний респондентов. Вопрос 2 направлен на выявление более узкого изучения языка Python. Вопрос 3 проверяет мотивацию учеников к углубленному изучению.

Также было принято решение проводить анкетирование анонимно с  использованием двух вариантов ответа — «да» и «нет». Суммарно в анонимном анкетировании приняло участие 32 учащихся. Результаты анкетирования можно увидеть в Приложении 3. Проценты представлены с  округлением до целых. Проанализировав данные, мы пришли к следующим выводам:

1. 59% респондентов ответили положительно на первый вопрос, что свидетельствует о  среднем уровне знания языков программирования;

2. Большая часть респондентов (88%) ответила отрицательно на второй вопрос, что говорит о том, что большинство школьников не знают про такую библиотеку, как OpenCV.

3. На третий вопрос 59% ответило положительно, что свидетельствует о среднем уровне мотивации к изучению данной библиотеки.

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

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

2.2. Создание курса, ориентированного на применение OpenCV в образовательном процессе

Для начала работы необходимо установить среду разработки JupyterNotebook. Он представляет собой внешнюю библиотеку для Python. Затем устанавливаем программу Python 3.11.

Для того чтобы открыть JupyterNotebook заходим в командную строку.

Указываем путь к файлу и запускаем JupyterNotebook. Он открывается в виде веб-странички.

В JupyterNotebook открываем новую страничку блокнота.

Теперь приступаем к написанию кода. Устанавливаем библиотеки с помощью команды pipinstall.

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

Затем с помощью функции imread загружаем изображение с диска и сохраняем его в переменную img в виде NumPy массива. Используя библиотеку matplotlib и функцию imshow, выводим изображение на экран.

Чтобы вырезать часть изображения, необходимо выделить диапазон, который мы хотим вывести на экран. Отображаем его с помощью функции cv2.imshow(). Функция cv2.waitKey() ожидает нажатия клавиши на клавиатуре, а cv2.destroyAllWindows() закрывает все окна, созданные с помощью функции cv2.imshow(). Наконец, мы используем функцию imwrite, чтобы сохранить изменённое изображение на диск под именем eyes.jpg.

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

Затем мы используем функцию resize, чтобы уменьшить размер изображения в 2 раза, и сохраняем его в переменную cat_img.

Теперь попробуем наложить одну картинку на другую. Также с помощью функции imread загружаем еще одно изображение с диска, сохраняем его в переменную img2 и выводим на экран. Затем уменьшаем предыдущее изображение в 5 раз, с помощью функции resize, чтобы можно было наложить одно на другое. Выводим на экран, чтобы посмотреть результат.

С помощью функции shape помещаем одну картинку в другую.

Здесь мы загружаем изображение в цветовой модели BGR с помощью функции cv2.imread() и преобразуем его в цветовую модель RGB с помощью функции cv2.cvtColor(), передав параметры COLOR_BGR2RGB. Мы также отобразим оба изображения с помощью функции plt.imshow().RGB — это наиболее распространённая цветовая модель, которая используется для отображения изображений на экране компьютера или телефона. Каждый пиксель изображения представлен комбинацией трех цветов: красный (R), зелёный (G) и синий (B). Значение каждого цвета может быть от 0 до 255, что позволяет представлять более 16 миллионов оттенков цвета.

Теперь мы загружаем то же изображение в цветовой модели BGR и преобразовываем его в цветовую модель HSV с помощью функции cv2.cvtColor(), передав параметры COLOR_BGR2HSV. HSV — это цветовая модель, которая представляет цвета в виде трех параметров: оттенок (H), насыщенность (S) и значение (V). Оттенок определяет цветовой тон, насыщенность — насыщенность цвета, а значение — яркость цвета. Значения оттенка, насыщенности и значения могут быть в диапазоне от 0 до 255.

Преобразуем изображение в серый цвет с помощью функции cv2.cvtColor(), передав параметры COLOR_BGR2GRAY.

Заключение

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

Преимущества библиотек, такие как ускорение разработки, повышение качества и понятность кода повышают процесс разработки и качество программного продукта.

В процессе работы мы пришли к следующим выводам:

1. Python был создан в конце 1980-х годов Гвидо ванн Россумом. Он продолжает активно развиваться и модернизироваться.

2. Библиотека OpenCV языка Python используется в таких областях как робототехника, медицинские технологии, безопасность, мобильная фотография и др. То есть везде, где требуется компьютерное зрение и обработка изображений.

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

4. Создание курса, ориентированного на применение OpenCV в образовательном процессе, помогло школьникам изучить данную библиотеку.

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

Список литературы

  1. OpenCV: Проекты в области компьютерного зрения с использованием Python // Джозеф Хоуз - 2016. Режим доступа: https://boove.co.uk/20-best-opencv-python-books-to-read-in-2021-book-list/

  2. Книга «Компьютерное зрение с Python 3» // Саурабх Капур – 2017. Режим доступа: https://boove.co.uk/20-best-opencv-python-books-to-read-in-2021-book-list/

  3. Язык программирования Python [Электронный ресурс] // Википедия Режим доступа: https://ru.wikipedia.org/wiki/Python

  4. Библиотека OpenCV [Электронный ресурс] // Википедия Режим доступа: https://ru.wikipedia.org/wiki/OpenCV

  5. Книга «OpenCV с Python на примере» // Пратик Джоши – 2015. Режим доступа: https://boove.co.uk/20-best-opencv-python-books-to-read-in-2021-book-list/

  6. История языка Python [Электронный ресурс] // www.interestprograms.ru Режим доступа: https://www.interestprograms.ru/article-python-istoriya-sozdaniya-yazyka-programmirovaniya

  7. Применение OpenCV [Электронный ресурс] // blog.skillfactory.ru Режим доступа: https://blog.skillfactory.ru/glossary/opencv/

  8. Библиотека в программировании [Электронный ресурс] // blog.skillfactory.ru Режим доступа: https://blog.skillfactory.ru/glossary/biblioteka/

  9. История языка программирования Python [Электронный ресурс] // www.interestprograms.ru Режим доступа: https://www.interestprograms.ru/article-python-istoriya-sozdaniya-yazyka-programmirovaniya#standartnaya-biblioteka-python

  10. веб-сервис для хостинга IT-проектов [Электронный ресурс] // github.com Режим доступа: https://github.com/opencv/opencv-python

  11. Компьютерное представление цвета [Электронный ресурс] // spravochnick.ru Режим доступа: https://spravochnick.ru/informatika/kompyuternaya_grafika/kompyuternoe_predstavlenie_cveta/

  12. Структура библиотеки [Электронный ресурс] // thecode.media Режим доступа: https://thecode.media/new-python-lib/

Приложение 1

Цветовая модель RGB

Представление цвета в цветовой модели RGB

Приложение 2

Представление цвета в цветовой модели HSV

Приложение 3

Анкетирование

Просмотров работы: 48