Компьютерное зрение на квадрокоптере

Несколько постов назад я рассказывал, как потерял тестовый квадрокоптер. Идею подкинула мне жена: «Ты же можешь полетать своим основным квадрокоптером над полем и снять видео? А потом написать программу, которая в этом видео найдет потерянный квадрокоптер.» И я подумал: «А почему нет?»…

 Площадь поисков — примерно один квадратный километр. В поле кое-где растет кустарник и высокая трава. Имеются большие лужи. Ходить-искать там довольно скучно и трудно. Лопасти у квадрокоптера — ярко-зеленые. В ближайшие же выходные я налетал над полем минут 40 видео. Для тестов положил в траву образцы лопастей. Летать пришлось на высоте от 20 до 30 метров. Ниже — слишком малую площадь захватывает камера и приходится делать слишком частые загзаги по полю. Но с такой высоты разглядеть глазами тестовую лопасть практически не возможно, судите сами:

снимок с квадрокоптера лопасть

И я взялся за С++ и Qt. Для работы с видео была выбрана библиотека OpenCV. Из нее мне понадобилась возможность получения отдельных кадров из видеофайла и перевод изображения из цветовой схемы RGB в HSV, поскольку в HSV удобно выделять объекты определенного цвета.

rgb vs hsv

Интерфейсы пользователя в Qt создаются легко: выбор множества видеофайлов, задание диапазона цветов для поиска, таблица со всеми кадрами всех видео. Обработка отдельного кадра занимает от 40 до 100 миллисекунд. С помощью QtConcurrent удалось расспараллелить поиск по всем доступным ядрам процессора. После продолжительного ожидания завершения обработки из всех видео были автоматически выброшены все кадры, в которых не было ничего найдено. Остались только «подозрительные кадры», которые требовали уже «ручного» отбора.

Тестовые лопасти программа обнаруживала и выделяла с любой высоты и с любого ракурса:

лопасть квадрокоптера лопасть квадрокоптера

лопасть квадрокоптера лопасть квадрокоптера

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

компьютерное зрение с борта квадрокоптера

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

квадрокоптер с Arduino Mega

…программа подправлена и залита. И коптер взлетел! На этот раз с GPS трекером на всякий случай.

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

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

Что же касается поиска объектов: собираюсь вспомнить про свою программу, когда будет HD видео с квадрокоптера «в прямом эфире». Работа над этим постепенно ведется. Применений можно найти массу: поиск бедствующих рыбаков на льдине, потерявшихся туристов в горах и т.п.

Не теряйтесь и не теряйте квадрокоптеры!

2 коммментариев

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

  2. Вадим, вас интересует написание собственной прошивки? В любом случае начать лучше отсюда
    http://habrahabr.ru/post/227425/
    ну а хорошие готовые прошивки уже давно избавили пользователей от нужны заливать код как в Ардуину.

Добавить комментарий