Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Компьютерное зрение на Python. Первые шаги

Покупка
Артикул: 767879.01.99
В книге изложен учебный курс для школьников, начинающих изучать компьютерное зрение с языком программирования Python и библиотекой OpenCV. Описаны особенности установки языка Python, различных библиотек, в том числе OpenCV, и операционной системы Raspbian. Материал разделен на три отдельные темы: программирование на Python, поиск и выделение цветных объектов на графическом изображении и в видеопотоке средствами OpenCV, программирование колесной робоплатформы под управлением Raspberry Pi 3, оснащенной CSI-камерой. Большую помощь читателю окажут многочисленные иллюстрации и листинги программных кодов, а также ссылки на источники и интернет-ресурсы. Книга будет полезна школьникам среднего и старшего возраста, педагогам дополнительного образования и всем начинающим изучать компьютерное зрение с помощью языка программирования Python и открытой библиотеки компьютерного зрения OpenCV-Python.
Шакирьянов, Э. Д. Компьютерное зрение на Python. Первые шаги : учебное пособие / Э. Д. Шакирьянов. - Москва : Лаборатория знаний, 2021. - 163 с. - (Школа юного инженера). - ISBN 978-5-00101-944-2. - Текст : электронный. - URL: https://znanium.com/catalog/product/1840446 (дата обращения: 19.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Москва
Лаборатория знаний
2021

Электронное издание

КОМ
ОМПЬЮ
ЬЮТЕРНО
НОЕ 
Е 

ЗРЕН
РЕНИЕ 
Е 

НА PYTHO
HON

®

ПЕРВЫЕ ШАГИ

Э. Д. 
Д. Ша
Шаки
кирьянов

УДК 087.5 + 004.42 + 004.896
ББК 32.81 + 32.973

Ш17

С е р и я о с н о в а н а в 2020 г.
Шакирьянов Э. Д.

Ш17
Компьютерное
зрение
на
Python

R
○.
Первые
шаги
/
Э. Д. Шакирьянов. — Электрон.
изд. — М.
:
Лаборатория
знаний, 2021. — 163 с. — (Школа юного инженера). — Систем.
требования:
Adobe
Reader
XI
;
экран 10". — Загл.
с титул. экрана. — Текст : электронный.
ISBN 978-5-00101-944-2
В книге изложен учебный курс для школьников, начинающих
изучать
компьютерное
зрение
с
языком
программирования
Python и библиотекой OpenCV. Описаны особенности установки
языка
Python,
различных
библиотек,
в
том
числе
OpenCV,
и операционной системы Raspbian. Материал разделен на три
отдельные темы: программирование на Python, поиск и выделение
цветных объектов на графическом изображении и в видеопотоке
средствами OpenCV, программирование колесной робоплатформы под управлением Raspberry Pi 3, оснащенной CSI-камерой.
Большую
помощь
читателю
окажут
многочисленные
иллюстрации
и
листинги
программных
кодов,
а
также
ссылки
на источники и интернет-ресурсы.
Книга будет полезна школьникам среднего и старшего возраста, педагогам дополнительного образования и всем начинающим
изучать компьютерное зрение с помощью языка программирования Python и открытой библиотеки компьютерного зрения
OpenCV-Python.
УДК 087.5 + 004.42 + 004.896
ББК 32.81 + 32.973

Деривативное издание на основе печатного аналога: Компьютерное зрение на Python

R
○. Первые шаги / Э. Д. Шакирьянов. —
М. : Лаборатория знаний, 2021. — 160 с. : ил. — (Школа юного
инженера). — ISBN 978-5-00101-318-1.

В
соответствии
со
ст. 1299
и
1301
ГК
РФ
при
устранении
ограничений,
установленных
техническими
средствами
защиты
авторских
прав, правообладатель вправе требовать от нарушителя возмещения убытков
или выплаты компенсации

ISBN 978-5-00101-944-2
© Лаборатория знаний, 2021

2

Оглавление

Предисловие  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
5

Глава 1. Начало программирования на Python  . . . . . . . . . . . . . . . . . . . . . . . . 
7

О языке Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
7

Установка Python и дополнительных библиотек  . . . . . . . . . . . . . . . . . . . . . . . 
8

Синтаксис языка Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
12

Программирование на языке Python с помощью исполнителя Turtle  
15

Turtle-методы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
15

Изучение функций с помощью графического исполнителя Turtle . . . . . . . 
19

Методы TurtleScreen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
23

Итоги главы 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
26

Глоссарий к главе 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
27

Список литературы к главе 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
29

Глава 2. Начало работы с OpenCV-Python  . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
30

Установка библиотеки OpenCV-Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
30

Основные операции в OpenCV-Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
35

Открытие файла с изображением  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
37

Изменение размера изображения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
39

Вырезка фрагмента изображения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
41

Поворот изображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
44

Зеркальное отражение изображения по осям. . . . . . . . . . . . . . . . . . . . . . . . . . . . 
46

Сохранение изображения в файл на локальный диск. . . . . . . . . . . . . . . . . . . . 
48

Поиск объекта по цвету. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
49

Цветовые пространства. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
52

Поиск объекта в цветовом пространстве HSV . . . . . . . . . . . . . . . . . . . . . . . . . . . 
54

Определение координат найденного объекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
57

Отображение видео в OpenCV-Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
60

Отображение видеоданных с web-камеры  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
60

Отображение видеоданных из файла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
63

Поиск цветных объектов на видео с помощью OpenCV-Python  . . . . . . 
65

Суммирование цветовых масок  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
68

Оглавление

Настройка цветового фильтра средствами OpenCV. . . . . . . . . . . . . . . . . . . . 
73

Поиск цветных объектов на видео в реальном времени. . . . . . . . . . . . . . . . 
79

Выделение контуров объектов с помощью OpenCV-Python  . . . . . . . . . . 
84

Выделение прямоугольных и эллиптических контуров. . . . . . . . . . . . . . . . 
90

Выделение прямоугольных контуров. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
90

Фильтрация прямоугольных контуров  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
94

Вычисление угла поворота прямоугольного контура . . . . . . . . . . . . . . . . . . . . 
99

Выделение и фильтрация эллиптических контуров  . . . . . . . . . . . . . . . . . . . . . 105

Выделение контуров дорожных знаков в видеопотоке. . . . . . . . . . . . . . . . . 110
Итоги главы 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Глоссарий к главе 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Список литературы к главе 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

Глава 3. Программирование Raspberry Pi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Микрокомпьютеры Raspberry Pi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Установка операционной системы Raspbian  . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Установка OpenCV на Raspberry Pi 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Удаленное управление Raspberry Pi 3  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Подключение модулем камеры CSI для Raspberry Pi и захват видео  136
Управление моторами с помощью Raspberry Pi на примере робота 
AlphaBot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Программирование движения робота AlphaBot вдоль черной линии  149
Итоги главы 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Глоссарий к главе 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Список литературы к главе 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

Заключение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

Предисловие

Ни для кого не секрет, что роботы все чаще встречаются в нашей 
повседневной жизни. Роботы развлекают детей, летают в космос, 
помогают спасателям, управляют автомобилями и боевой техникой. 
С каждым поколением они становятся все совершеннее. О новых разработках в робототехнике мы узнаем с экранов телевизоров и на сайтах в Интернете, со страниц журналов и книг. Современные роботы 
способны видеть, распознавать объекты окружающего их мира и выполнять сложные операции. Более того, современные роботы способны обучаться, адаптируясь к внешней среде. Поведение таких роботов очень близко к поведению живых существ. 
Значимой составляющей в подобных роботах является система 
компьютерного зрения. Эта технология позволяет роботам с помощью 
специальных алгоритмов и программ анализировать поток данных, 
который они получают с видеокамеры. Главными задачами компьютерного зрения является обнаружение, идентификация и классификация объектов окружающего мира, которые попали в поле зрения 
видеокамеры. Развитые системы компьютерного зрения могут распознавать различные активности, которые проявляют обнаруженные 
объекты.
До недавнего времени изучение, проектирование и создание 
устройств, оснащенных простейшим компьютерным зрением, потребовали бы от разработчика больших интеллектуальных и материальных 
ресурсов. Но прогресс не стоит на месте. С появлением недорогих 
компактных микрокомпьютеров, а также доступного программного 
обеспечения изучение и программирование несложных систем с компьютерным зрением стало возможно даже для школьников.
Книга, которую вы держите в руках, ориентирована на читателей, 
начинающих изучать компьютерное зрение на языке Python. Весь 
материал разбит на три главы и снабжен иллюстрациями, ссылками 
на источники и программными кодами. После каждой главы приводится список литературы и интернет-ресурсов, которые могут быть 
полезны для дополнительного изучения.

Предисловие

6

Первая глава представляет собой краткое введение в программирование на языке Python. В настоящее время доступно множество 
различных источников и интернет-ресурсов, с помощью которых 
можно освоить основы программирования на Python, поэтому здесь 
этот вопрос не рассматривается подробно. Начальные навыки программирования в Python довольно легко освоить самостоятельно. 
Синтаксис языка Python прост и понятен, а его особенности можно 
постичь в процессе практики.
Вторая глава посвящена ключевой теме книги — изучению основ компьютерного зрения. Одним из самых мощных и доступных 
инструментов программирования компьютерного зрения на Python 
является 
библиотека 
OpenCV 
(Open 
Source 
Computer 
Vision 
Library) — библиотека компьютерного зрения с открытым исходным 
кодом. Наиболее важные, с точки зрения автора, вопросы, первоначально необходимые для работы с OpenCV, изложены в этой главе. 
Весь материал главы носит прикладной характер и условно разбит 
на пять тем:
1) установка OpenCV;
2) основные операции в OpenCV;
3) выделение объекта по цветовой маске;
4) работа с видеопотоком;
5) контурный анализ.

В третьей главе рассмотрены вопросы, связанные с подготовкой микрокомпьютера Raspberry Pi 3 к работе, установкой на него 
библио теки OpenCV и программированием движения робоплатформы, оснащенной видеокамерой, вдоль черной линии. На сегодняшний 
день для реализации систем с компьютерным зрением самой подходящей по многим критериям является, пожалуй, техническая платформа на основе семейства микрокомпьютеров Raspberry Pi. Вычислительных ресурсов Raspberry Pi хватает для большинства задач 
начального уровня.
Предлагаемая книга не является исчерпывающим пособием по изучению компьютерного зрения с помощью OpenCV-Python. Здесь 
в сжатой форме собран материал, который будет полезным для начинающих изучать язык программирования Python и основы компьютерного зрения с библиотекой OpenCV-Python.
Итак, давайте окунемся в интересный мир программирования 
и робототехники! Вместе разберемся с принципами, на которых реализовано компьютерное зрение роботов. Настроим свой первый микрокомпьютер и научим его управлять робоплатформой по картинке 
с видеокамеры.

Начало программирования 
на Python

О языке Python

Python — это интерпретируемый язык программирования. Исходный 
код преобразуется в машинный частями по мере его выполнения 
специальной программой, которая называется интерпретатор. Язык 
Python придумал голландец Гвидо ван Россум примерно в 1991 г.
После того как Россум разработал язык Python и выложил его 
в Интернет, появилось целое сообщество программистов, которые активно его улучшают и совершенствуют. Новые версии языка регулярно выходят на его официальном сайте1 [1].
Python отличается своим уникальным синтаксисом. Даже начинающий программист может легко научиться кодировать на этом языке 
программирования. Одной из особенностей языка является его требовательность к отступам, заставляющая программистов воспитывать 
в себе культуру написания программных кодов. В результате программный текст получается структурированным, легко читается и понимается. Добавим еще, что Python — это полноценный универсальный объектно-ориентированный язык программирования.

ПОЯСНЕНИЕ

Технология объектно-ориентированного программирования2

основана на представлении программы в виде взаимодействия не
1 
Python Software Fundation. // Официальный сайт разработчика Python. URL: 
http://python.org

2 
Объектно-ориентированное программирование. // Викиучебник. URL: https://
ru.wikibooks.org / wiki / Объектно-ориентированное_программирование

Начало программирования на Python

8

которого числа объектов. При этом каждый объект принадлежит 
к конкретному классу и обладает характерным для этого класса 
набором свойств и методов. Например, Шарик и Бобик являются объектами, которые взаимодействуют между собой (лают), при 
этом оба относятся к классу «Собаки». Следовательно, они, как 
и все собаки, имеют четыре лапы, хвост и умеют лаять. А Барсик является объектом, который принадлежит к классу «Кошки». 
Он тоже имеет четыре лапы и хвост, но в отличие от собак умеет 
мяукать. И в то же время оба класса «Собаки» и «Кошки» имеют 
общие свойства: четыре лапы и хвост, которые были унаследованы 
от более широкого класса «Домашние животные». К объектно-ориентированным языкам относятся языки C / C++, Jawa, Object Pascal.

Кроме того, Python является свободно распространяемым языком 
на основании лицензии, совместимой с GNU General Public License.
Кроссплатформенные возможности Python позволяют программировать на этом языке под различными операционными системами, 
например Windows, Linux, Mac OS и др. Это добавляет привлекательности Python среди программистов.

Установка Python 
и дополнительных библиотек

Установка Python не представляет особых трудностей. Предварительно необходимо скачать установщик Python с официального сайта [1]. 
В целях безопасности ваших данных на компьютере не рекомендуется скачивать Python из сторонних ресурсов. Итак, заходим на сайт 
Python и в меню Downloads скачиваем последнюю актуальную версию для своей операционной системы (рис. 1.1). В нашем случае это 
будет операционная система Windows.
После окончания загрузки следует открыть папку (по умолчанию 
установочный файл сохранится в папке Загрузки) с загруженным исполняемым файлом и запустить его. В диалоговом окне установщика 
(рис. 1.2) следует поставить галочку напротив пункта Add Python 3.7 
to PATH. Затем ждем завершение процесса установки. По окончании 
установки Python запускается из меню Пуск. Более подробные инструкции по установке, в том числе и на другие операционные системы, можно посмотреть здесь1 [2, 3].

1 
Python. Урок 1. Установка. // Devpractice. Разработка программного обеспечения, технологии и наука. URL: https://devpractice.ru / python-lesson-1-install / 

Установка Python и дополнительных библиотек

9

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

Рис. 1.1. Меню загрузки Python для операционной системы Windows

Рис. 1.2. Диалоговое окно установщика с выбором параметров установки языка Python

Начало программирования на Python

10

ПОЯСНЕНИЕ

pip — система управления пакетами, которая используется для 
установки и управления программными пакетами и библиотеками, написанными на Python. Начиная с версии Python 2.7.9 
и Python 3.4, дистрибутив Python по умолчанию содержит утилиту 
управления пакетами pip (или pip3 для Python 3).

С помощью pip, используя соединение с Интернетом, можно легко установить практически любой дополнительный пакет или библиотеку. Работа с pip осуществляется в командной строке Windows 
(рис. 1.3).

Рис. 1.3. Командная строка Windows

Установка нового пакета производится следующим образом. Например, чтобы установить пакет numpy, необходимо ввести в командной строке:

pip install numpy

Установка Python и дополнительных библиотек

11

или для Python 3:

pip3 install numpy

В Linux установка этого же пакета (подробнее об этом будет в главе 3) выполняется с помощью команды от имени администратора:

sudo pip3 install numpy1, 2

ПОЯСНЕНИЕ

Numpy — это пакет языка Python, предназначенный для работы 
с большими многомерными массивами и матрицами. Содержит 
в себе большую библиотеку высокоуровневых (и очень быстрых) 
математических функций для операций с этими массивами1, 2. 
В дальнейшем этот пакет нам понадобится для работы с компьютерным зрением. Данный пакет является обязательным компонентом для работы с OpenCV.

Утилита pip выполнит загрузку пакета и распакует его в специальную папку с установленным Python. Как видите, установка дополнительного пакета с помощью pip не представляет большого труда. Полная документация по работе с pip представлена на сайте3 [4]. 
Ниже приведены основные команды pip, где <package_name> — название устанавливаемого вами пакета:
pip help — помощь по доступным командам;
pip install <package_name> — установка пакета(ов);
pip uninstall <package_name> — удаление пакета(ов);
pip list — список установленных пакетов;
pip 
show 
<package_name> — показывает информацию 
об установленном пакете;
pip search — поиск пакетов по имени;
pip install-U — обновление пакета(ов);
pip install--force-reinstall — при обновлении переустановить пакет, даже если он последней версии.

1 
Документация по numpy. URL: https://docs.scipy.org / doc / numpy / reference / 

2 
Numpy для начинающих. URL: https://pythonworld.ru / numpy 

3 
pip — The Python Package Installer. URL: https://pip.pypa.io / en / stable / 

Начало программирования на Python

12

Более подробно с установкой и удалением дополнительных пакетов, в том числе и без использования утилиты pip, можно ознакомиться в [5–7].
Программирование в Python предусматривает два режима: консольный и интерактивный. В первом случае в окне будет высвечено 
приглашение к вводу команды (>>>). В этом режиме интерпретатор 
исполняет введенную команду сразу после нажатия клавиши enter. 
Другой режим — это работа во встроенной среде разработки IDLE, 
в которой тоже есть интерактивный режим работы. Но в отличие 
от консольного варианта здесь можно писать полноценные программы и наблюдать подсветку синтаксиса (в зависимости от значения 
синтаксической единицы она выделяется определенным цветом1). 
Программы на Python часто называют скриптами, которые с помощью среды IDLE можно сохранять в файлы с расширением .py.
Чтобы создать скрипт в среде IDLE, после запуска программы 
в меню следует выбрать команду File → New Window (Crtl + N). 
В результате откроется новое окно, в котором пишется программный 
код. И наконец, чтобы его запустить для исполнения, необходимо выполнить команду меню Run → Run Module (F5). После этого в консольном окне Python появится результат выполнения кода (рис. 1.4).

Рис. 1.4. Окно программного кода (слева) и консольное окно 
(справа)

Синтаксис языка Python

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

1 
Если набирать код, не сохранив сначала файл, то подсветка синтаксиса будет 
отсутствовать.