роектная работа j : a j : ; h l h a > : g i j h = j : fЫ Я...

17
Москва, 2019 год Проектная работа РАЗРАБОТКА И СОЗДАНИЕ ПРОГРАММЫ ДЛЯ КАЛИБРОВКИ КАМЕРЫ ПОД КВАДРОКОПТЕР «КЛЕВЕР» Автор: Лехтерев Владимир Вячеславович, ГБОУ Инженерная школа №1581, 10 «И» класс Научный руководитель: Ольховская Елена Александровна, учитель физики, ГБОУ Инженерная Школа №1581

Upload: others

Post on 07-Oct-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

Москва, 2019 год

Проектная работа

РАЗРАБОТКА И СОЗДАНИЕ

ПРОГРАММЫ ДЛЯ КАЛИБРОВКИ КАМЕРЫ

ПОД КВАДРОКОПТЕР «КЛЕВЕР»

Автор: Лехтерев Владимир Вячеславович,

ГБОУ Инженерная школа №1581, 10 «И» класс

Научный руководитель:

Ольховская Елена Александровна, учитель

физики, ГБОУ Инженерная Школа №1581

Page 2: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

2

Оглавление

ВВЕДЕНИЕ .................................................................................................................................................. 3

ОРГАНИЗАЦИИ ......................................................................................................................................... 5

ОБОРУДОВАНИЕ ...................................................................................................................................... 5

ЭТАП 1. ИЗУЧЕНИЕ ПРИНЦИПОВ КАЛИБРОВКИ КАМЕРЫ .......................................................... 6

ЭТАП 2. ВЫБОР КАЛИБРОВОЧНОГО АЛГОРИТМА ......................................................................... 6

ЭТАП 3. ИЗУЧЕНИЕ АНАЛОГОВ ........................................................................................................... 7

ЭТАП 4. РАЗРАБОТКА ПРОГРАММЫ ................................................................................................... 7

НАПИСАНИЕ КОНСОЛЬНОГО СКРИПТА ....................................................................................... 9

НАПИСАНИЕ WEB-ПРИЛОЖЕНИЯ ................................................................................................ 11

ЭТАП 5. ТЕСТИРОВАНИЕ ..................................................................................................................... 16

ИТОГИ ....................................................................................................................................................... 16

ПЕРСПЕКТИВЫ ....................................................................................................................................... 16

СПИСОК ИСТОЧНИКОВ ........................................................................................................................ 17

МАТЕРИАЛЫ ........................................................................................................................................... 17

Page 3: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

3

ВВЕДЕНИЕ

Компьютерное зрение сейчас получает все более широкое распространение. Системы

распознавания лиц, еды, животных, машин и многого другого, системы позиционирования,

умные фильтры для фотографий – список систем, использующих компьютерное зрение, с

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

устройств, в том числе в беспилотные аппараты.

На данный момент времени самым популярным видом БПЛА являются различные

мультироторные системы. В их число входит отечественный квадрокоптер «Клевер» от

компании ООО «Коптер Экспресс Технологии» [1]. На его базе развернуты различные

системы, в том числе использующие компьютерное зрение (самой используемой из них

является система ArUco-навигации [2]).

Как бы хорошо не был продуман алгоритм, системы компьютерного зрения могут

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

которые компьютер не обучен. Характер и степень подобных искажений сугубо

индивидуальны для каждой камеры, поэтому алгоритм не может подстроиться под каждое

устройство.

Каким же образом искажения влияют на результаты работы алгоритмов

компьютерного зрения? Представим, что у нас есть некая программа, которая ищет на

изображении квадраты и примем, что она может распознать квадрат любого размера и цвета

на любом изображении. Ее «слабость» в том, что она может распознавать только квадраты.

И вот, некий пользователь снял фото идеального квадрата на камеру с широким углом

обзора. Хоть квадрат и являлся идеальным в реальности, программа не распознала его на

изображении. Проблема кроется в явлении дисторсии.

Page 4: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

4

Дисторсией называется аберрация оптической системы, при которой коэффициент

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

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

к краям изображение как бы «скруглено».

Таким образом нарушается геометрическое подобие между самим объектом и его

изображением. Поэтому фигура, являвшаяся идеальным квадратом в реальности, на

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

Вывод: Чтобы повысить точность любого алгоритма компьютерного зрения, надо

убрать подобные искажения. Для этого требуется обработать каждое получаемое

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

необходимо провести калибровку камеры.

От компании ООО «Коптер Экспресс Технологии» я получил техническое задание на

разработку и создание программы для калибровки камеры под квадрокоптер «Клевер».

Исходя из того, что «Клевер» – платформа, предназначенная для широкого спектра

пользователей разного уровня, я решил, что главные требования к программе, помимо

точности калибровки, – это простота, гибкость и удобство использования.

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

«Клевер».

Задачи: изучить алгоритмы калибровки камеры, выбрать из них оптимальный,

изучить аналоги, на основе выбранного алгоритма разработать собственное решение,

протестировать, устранить ошибки.

Page 5: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

5

Актуальность: в современном мире растет использование систем компьютерного

зрения, в том числе на мультироторных транспортных системах. Для улучшения качества

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

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

удаленном устройстве. «Клевер» - широко распространенная платформа, использующая

компьютерное зрение, ориентированная на пользователей разного уровня, от новичков до

профессионалов. Для первых существует потребность в интуитивно понятной, удобной и

точной программе для калибровки камеры, а для вторых – потребность в гибкости

использования калибровочного функционала.

ОРГАНИЗАЦИИ

ЦМИТ «Коптер»

1. Получение ТЗ

2. Проведение консультаций

3. Предоставление технической базы

ГБОУ Инженерная школа №1581

1. Научное и организационное руководство

ОБОРУДОВАНИЕ

Название Назначение Кем

предоставляется

Условия

предоставления

Квадрокоптер

«Клевер»

Платформа для

разработки и

тестирования

программы

ЦМИТ «Коптер» Разработка

программы для

калибровки с моей

стороны.

Калибровочные

мишени разных

размеров

Проведение

калибровок

Texel, Inc. Во временное

пользование

Одноплатный

компьютер

Raspberry Pi 3

Платформа для

отладки программы

Личное

Page 6: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

6

ЭТАП 1. ИЗУЧЕНИЕ ПРИНЦИПОВ КАЛИБРОВКИ КАМЕРЫ

Под калибровкой камеры [3] подразумевается способ получения так называемых

внутренних и внешних параметров калибровки. Любой калибровочный алгоритм

определяет их, сопоставляя координаты точек на изображении и координаты этих же точек

в реальности. Впоследствии эти параметры можно будет использовать для «исправления»

изображений.

Внутренние параметры калибровки – матрица внутренней калибровки, содержащая в

себе информацию о фокусном расстоянии объектива, координатах принципиальной точки

и выражении, связывающем фокусное расстояние линзы и угол наклона пикселя. Так же в

это число входят коэффициенты дисторсии. Параметры внутренней калибровки относятся

к самой камере и не зависят от объекта съемки (сцены). Важно, что для разных разрешений

получаемого изображения эти параметры будут разными.

Внешние параметры калибровки – матрицы векторов переноса и поворота,

определяющие преобразование координат, переводящее координаты точек сцены из

системы координат, связанную с Землей, в систему координат, связанную с камерой.

Параметры внешней калибровки связаны непосредственно с фотографируемой сценой,

поэтому (в отличие от параметров внутренней калибровки) каждой фотографии

соответствует свой набор этих параметров. Для калибровки камеры эти параметры

усредняются.

ЭТАП 2. ВЫБОР КАЛИБРОВОЧНОГО АЛГОРИТМА

Разница в работе существующих алгоритмов состоит лишь в способах получении

информации о сопоставляемых точках в реальности и на изображении. На данный момент

времени фигурируют два алгоритма калибровки:

Калибровка по мишеням. Программе задаются характеристики какого-то объекта –

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

реперные точки и по ним проводит калибровку.

Авто-калибровка. Отличается от первого способа тем, что программа считает все

изображение мишенью. Реперными точками становятся различные контрастные точки

(изъяны текстур, углы и т.д.). Недостаток этого способа – возможность возникновения

ситуации, при которой программа не может определить автоматически определить

реперные точки на изображении при отсутствии контрастных точек.

Page 7: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

7

Исходя из этого, я решил, что буду пользоваться калибровкой по мишеням, так как

использование этого способа дает стопроцентную гарантию того, что любой пользователь

сможет правильно выбрать калибровочную мишень и успешно провести калибровку.

ЭТАП 3. ИЗУЧЕНИЕ АНАЛОГОВ

На данный момент для калибровки камеры по мишени существуют такие варианты:

Различные desktop-программы [4,5]. Преимущества – широкий функционал.

Недостаток – невозможность интеграции в «Клевер» ввиду особенностей операционной

системы (ОС) последнего. То есть, для работы с ними пользователю требуется сначала

получить фотографии с «Клевера», перенести их на свой компьютер, по ним получить

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

«Клевер».

Уже существующие скрипты [6,7]. Преимущества – возможность запуска на

«Клевере». Недостатки – невозможность получения изображений в реальном времени с

камеры «Клевера», из-за чего камера может калиброваться по некорректным фотографиям

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

системы «Клевера» могли работать с ним.

Таблица сравнения аналогов приложена.

ЭТАП 4. РАЗРАБОТКА ПРОГРАММЫ

Основной код программы я решил написать на языке Python. Этот язык сейчас очень

популярен, поэтому многие смогут взять мой выложенный в открытый доступ код и

доработать его под свои нужды.

Для реализации калибровочного функционала я использовал библиотеку OpenCV, так

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

сайте [8], все камеры.

Калибровка камеры реализуется в три этапа:

1. Получение изображений мишени с разных ракурсов.

2. Обработка изображений, вычисление различных коэффициентов.

3. Формирование полученных данных и запись в файл.

Page 8: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

8

Получение изображений я решил проводить в реальном времени. Это позволит

программе сразу определять, корректна ли полученная пользователем фотография или нет.

Фотография считается корректной, если программа может ее обработать и найти на ней

реперные точки. Это позволит пользователю понять, сколько корректных фотографий он

сделал. Таким образом, точность калибровки будет выше, так как все полученные

фотографии всегда будут пригодны к обработке.

Для работы функции cv2.calibrateCamera(), отвечающей за формирование

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

точности их количество необходимо увеличить (обычно делают 50). Порог, установленный

мною в программе – 25 фотографий. Как показала практика, этого количества достаточно,

чтобы калибровка была точной.

В качестве мишени я выбрал самый распространенный вариант – «клетчатую доску».

В этом случае реперными точками являются точки пересечения линий сетки.

Формат файла, являющегося результатом работы программы, я решил сделать

идентичным формату, используемым системой ArUco-навигации на «Клевере», так как

чаще всего именно для этого камера и будет калиброваться.

Первоначально я реализовал программу в виде консольного скрипта. Затем я

доработал программу, переделав её в Web-приложение, а функционал консольного скрипта

переформировал в Python-модуль. При этом алгоритм работы с программой оставался

почти тем же, изменялся только принцип взаимодействия с пользователем. О каждом из

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

Весь исходный код, содержащий в себе объясняющие комментарии, можно найти в

репозитории GitHub [9].

Page 9: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

9

НАПИСАНИЕ КОНСОЛЬНОГО СКРИПТА

Формат консольного скрипта подразумевает взаимодействие пользователя с

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

со стороны пользователя выглядит так (рис. 9):

1. Пользователь устанавливает программу и требуемые пакеты.

2. Запускает скрипт при помощи команды calibrate_cam.

3. Вводит характеристики мишени.

4. Делает фотографии мишени с различных ракурсов при помощи команды

catch. Если полученная фотография определялась программой как корректная, она

добавлялась в массив, и пользователь получал об этом сообщение. Если же фотография

определялась как некорректная, то она, соответственно, не добавлялась, и пользователь так

же получал уведомление об этом.

5. Пользователь получает возможность закончить калибровку, как только

количество фотографий в массиве становится равно двадцати пяти, о чем он тоже получает

уведомления.

6. Заканчивает калибровку при помощи команды finish. Полученный файл

сохраняется в директории, в которой выполняется скрипт. Пользователь информируется о

результате выполнения программы.

Также пользователю доступны команды stop (остановка программы), delete (удаление

предыдущей фотографии), help (получение общей справки), help <команда> (получение

справки по конкретной команде).

В дальнейшем, я переделал программу, добавив Web-интерфейс. Старый код скрипта,

а также различные дополнительные функции я объединил в Python-модуль.

Состав Python-модуля:

Основной функционал:

Калибровочные файлы для стандартной камеры «Клевера»:

CLEVER_FISHEYE_CAM_320, CLEVER_FISEYE_CAM_640 (Под разрешения 320х240 и

640х480 соответственно).

Функция для получения исправленного изображения:

get_undistorted_image(cv2_image, camera_info), где cv2_image – изображение (массив cv2),

camera_info – путь до калибровочного файла либо стандартный калибровочный файл

(предыдущий пункт).

Page 10: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

10

Функция для калибровки камеры по уже существующим изображениям:

set_camera_info(chessboard_size, square_size, path), где chessboard_size – кортеж (длина

доски, ширина доски), square_size – длина ребра клетки мишени, path – путь до директории

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

Функция для real-time калибровки (основная часть скрипта):

calibrate(chessboard_size, square_size, saving_mode=False), где chessboard_size - кортеж

(длина доски, ширина доски), square_size – длина ребра клетки мишени, saving_mode –

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

директории (по умолчанию отключен).

Служебные функции:

Функция для формирования и записи калибровочного файла (расширение .yaml):

__yaml_save(mtx, dist, rvecs, tvecs, resolution), где mtx, dist, rvecs, tvecs –

калибровочные коэффициенты и матрицы, resolution – разрешение изображения (кортеж).

Функция для вычисления проекционной матрицы: __compute_proj_mat(mtx, rvecs,

tvecs), где mtx, rvecs, tvecs – калибровочные матрицы.

Точка входа для скрипта calibrate_cam: __calibrate_command(). Через нее

происходит вход в основной скрипт real-time калибровки.

Точка входа для скрипта calibrate_cam_ex: __calibrate_ex_command(). Через нее

происходит вход в дополнительный скрипт, выполняющий калибровку по уже

существующим изображениям (функция set_camera_info()).

Разработанный мной отдельный Python-модуль, содержащий в себе готовые решения,

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

программы в своем коде.

Демонстрация работы скрипта

Page 11: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

11

НАПИСАНИЕ WEB-ПРИЛОЖЕНИЯ

К сожалению, я столкнулся с тем, что алгоритм, на основе которого написана моя

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

Обработка таких изображений приводит к тому, что точность калибровки сильно

падает. Так как корень проблемы лежит в принципе работы алгоритма, на программном

уровне невозможно получить информацию о корректности полученных реперных точек.

Поэтому, чтобы увеличить точность, необходимо дополнительное взаимодействие

пользователя с программой. Пользователь должен просмотреть каждую полученную

фотографию с программно отрисованными реперными точками и подтвердить, что это

точки распознаны правильно.

На «Клевере» стоит ОС, сделанная на основе ROS[10]. Она не обладает графическим

интерфейсом, поэтому не существует возможности отобразить фотографию напрямую на

«Клевере».

Мое решение – Web-интерфейс. Пользователь, устройство которого подключено к

«Клеверу» по Wi-Fi, может зайти на веб-страницу, хостом которой является сам «Клевер».

Помимо возможности отбора изображений, это решает сразу несколько проблем:

Пользователю не требуется ставить какое-либо ПО на свое устройство. «Клевер» сам

запустит предустановленный на него сервер, и пользователь будет связываться с ним по

Wi-fi с помощью одного лишь браузера.

Для калибровки пользователь может использовать любое устройство, на котором

есть браузер, в том числе и смартфон. Эта возможность делает процесс калибровки очень

удобным.

Процесс калибровки становится более наглядным. На Web-страницы можно

выводить поток с камеры, использовать кнопки вместо команд, что сделает получение

фотографий и сам процесс калибровки еще удобнее.

Page 12: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

12

Для написания серверной части я решил использовать Python-framework Flask[11]. Он

прост в использовании и занимает меньше памяти, чем его аналог – Django. Также для

оформления интерфейса я использовал популярный сейчас css-framework Bootstrap[12].

Как упоминалось ранее, сам алгоритм работы программы не сильно изменился, но для

работы с Flask мне потребовалось изменить структуру программы. Если раньше весь код

находился в одном файле, то теперь программа структурирована так:

camera.py

app.py

templates:

o main.html

o catching.html

o checking.html

o final.html

static:

o css:

main.css

bootstrap.min.css

Файл camera.py отвечает за калибровочный процесс. В нем находится класс

CalibrationCamera,

который содержит в себе функции, во многом схожие с функциями из Python-модуля, но

имеющие немного другой формат ввода/вывода. Состав файла:

Функция, инициализирующая калибровку: start(self, width, length, square_size), где

width, length, square_size – характеристики доски.

Функция, возвращающая «сырое» изображение в формате cv2: get_raw(self).

Функция, возвращающая «сырое» изображение в расширении .jpg: get_frame(self).

Функция, проверяющая наличие углов на изображении: exists(self).

Функция, возвращающая изображение с отрисованными углами: get_preview(self).

Функция, возвращающая изображение в пригодном для обработки формате и

координаты углов: chessboard(self).

Функция, добавляющая результаты обработки изображения в калибровочный

массив: add_pic(self).

Page 13: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

13

Функция, возвращающая количество фотографий, которые надо добавить, чтобы

закончить калибровку: amount_left(self).

Функция, завершающая калибровку: finish(self).

Функция для формирования и записи калибровочного файла (расширение .yaml):

__yaml_save(mtx, dist, rvecs, tvecs, resolution), где mtx, dist, rvecs, tvecs –

калибровочные коэффициенты и матрицы, resolution – разрешение изображения (кортеж).

Функция для вычисления проекционной матрицы: __compute_proj_mat(mtx, rvecs,

tvecs), где mtx, rvecs, tvecs – калибровочные матрицы.

Функция, возвращающая значение репроекционной ошибки: reproj_error(self, rvecs,

tvecs, mtx, dist), где rvecs, tvecs, mtx, dist – различные калибровочные матрицы.

Во всех функциях присутствует аргумент self. Он означает, что данная функция

исполняется объектом CalibrationCamera.

Файл app.py отвечает за связь между Web-интерфейсом и объектом CalibrationCamera

из camera.py. Он содержит в себе различные функции, отвечающие за маршрутизацию, и

не требует особого рассмотрения, ровно как и .html и .css файлы, отвечающие за внешний

вид интерфейса. Дополнительные разъяснения присутствуют в комментариях внутри кода.

Page 14: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

14

Процесс калибровки при использовании Web-интерфейса со стороны пользователя

выглядит так:

1. Пользователь, подключившись к «Клеверу» по Wi-Fi, заходит на адрес

192.168.11.1:8081 (порт можно настроить в файле config.py).

2. На первой странице вводит характеристики используемой мишени. Нажав на

кнопку Start calibration он переходит на следующую страницу. Используется функция

start().

3. На следующей странице он, смотря на поток с камеры, подбирает нужный

ракурс и нажимает на кнопку Catch, чтобы сделать фото.

Page 15: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

15

4. Следующая страница предназначена для отбора изображений. Если

программа находит на изображении углы (функция exists()), то на страницу выводится

изображение с отрисованными углами (функция get_preview()), которые нашла программа.

5. Если эти углы расположены корректно, то он, нажав на кнопку Add photo,

добавляет фотографию в калибровочный массив (функция add_photo()) и переходит на

предыдущую страницу. Если же углы расположены некорректно, он пропускает эту

фотографию, нажав кнопку на Skip, и так же возвращается на предыдущую страницу.

6. На странице с потоком отображается, сколько еще нужно добавить

фотографий (функция amount_left()), чтобы закончить калибровку. Как только

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

кнопка Finish (рис.7). Пользователь может продолжить добавлять фотографии. В этом

случае на странице уже будет отображаться нынешнее количество фотографий.

7. Как только пользователь захочет закончить калибровку, он должен будет

нажать на кнопку Finish.

Page 16: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

16

8. После этого программа некоторое время будет обрабатывать полученные

фотографии (функция finish()), а затем откроется страница, информирующая пользователя

об успешности калибровки, а также выводящая информацию о репроекционной ошибке

(функция reproj_error()) и об имени сохраненного файла.

ЭТАП 5. ТЕСТИРОВАНИЕ

При работе с программой был выявлен баг: в случаев программа «пропускала» на

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

Добавление такого изображения в калибровочный массив приводит к ошибке при

завершении калибровки. Работа над исправлением ведется.

ИТОГИ

Для калибровки камеры была написана программа с Web-интерфейсом, а также пакет

готовых решений для продвинутых пользователей. Поставленные цели были достигнуты –

приложение просто и удобно в использовании, а возможность проверки на корректность

делает калибровку точнее. Наличие отдельного Python-модуля позволяет продвинутым

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

Данная работа была представлена заказчику, и была им одобрена.

ПЕРСПЕКТИВЫ

Разработанная мною система после небольшой доработки позволит калибровать

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

компьютерного зрения постоянно расширяется, и в нее вовлекается все больше новых

пользователей, то и потребность в интуитивно понятном, удобном и точном приложении

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

доступ, я помогу многим людям освоиться в этой области.

Page 17: роектная работа J : A J : ; H L H A > : G I J H = J : FЫ Я ...mgk.olimpiada.ru/media/work/24954/Проект_мгк.pdf · Разработанный мной отдельный

17

СПИСОК ИСТОЧНИКОВ

1. https://copterexpress.ru/ - Официальный сайт ООО «Коптер Экспресс

Технологии».

2. https://clever.copterexpress.com/ru/calibration.html - ArUco-навигация.

3. https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BB%D0%B8%D0%B1%

D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%B0%D0%BC%D0%B5%D1

%80%D1%8B – Материал про калибровку камеры.

4. https://www.mathworks.com/help/vision/ug/camera-calibration.html - Аддон

MATLAB для калибровки камеры.

5. http://www0.cs.ucl.ac.uk/staff/Dan.Stoyanov/calib/ - Программа для калибровки

камеры.

6. https://github.com/smidm/video2calibration - Скрипт для калибровки камеры.

7. http://wiki.ros.org/camera_calibration - Пакет для калибровки камеры для ROS

8. https://opencv.org/ - Библиотека OpenCV.

9. https://github.com/tinderad/calibration_web_2.7 - исходный код (репозиторий

GitHub)

10. http://www.ros.org/about-ros/ - Robot Operation System (ROS)

11. http://flask.pocoo.org/ - Python-framework Flask

12. https://getbootstrap.com/ - css-framework Bootstrap

МАТЕРИАЛЫ

Все материалы лежат в облаке:

https://drive.google.com/open?id=1JgU0RFrfb5Q-VtS4MDHtO0TK0VvB5aPF