Курсовое проектирование (Весна-2019)

[Обновление от 13.06.2019]

У многих в последние дни были замечены проблемы со сборкой программы. Обязательно проверьте установлен ли у вас libopencv-dev:
sudo apt install libopencv-dev

Обновление 2: практика выставляется с оценкой в зачетку (последние страницы с пометкой «Практика»). Поэтому если я ранее не проставил — передайте зачетку к новой дате (которые я пока что от вас не получил)

[Обновление от 09.06.2019]

UPD: Опаздываю с работы, буду в 10:00

Т.к. случились накладки с вашими экзаменами, то расширяем срок до 30.06, каждая группа может выбрать удобный день и время (кроме первой половины пятницы) и сообщить мне — я подтвержу или скорректируем. Сдача 10 июня будет, кто готов — приходите. Я как и обещал буду с 09-30 до 12-00. Т.к. абсолютно точно не ясно свободно ли 2408, перед заходом проверьте на третьем этаже (на кафедре) — я повешу листок, где именно будет проводиться прием работ.

================================================================================

Сдача практики:

Практику по условию кафедры необходимо сдать до 10 июня (т.е. осталось 3 недели). 10 июня, в понедельник с 9-30 до 12-00 я буду принимать в 2408. Если пересекается с одним из ваших событий — сообщите заранее. Сдать можно и раньше — на консультации.
Консультация будет во вторник, 21 мая, с 16-30 до 17-30 на кафедре. Подходите, я посмотрю что есть свободного из аудиторий и оставлю записку на доске у расписания. Если ваш вопрос не глобальный и не требует пространных разговоров — см. первый абзац следующего раздела «Общие данные».

P.S. Старост прошу выслать текущие списки групп любым доступным способом

Как происходит сдача практики

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

Если нет такой возможности, то я принимаю небольшин отчеты. 1-2 страницы общих слов о том, что вы использовали и как: ОС, постановка задания и ваш проект модификации. Далее — исходный код проекта с выделенным (Bold) вашим текстом в коде. Не стесняйтесь, если кода мало, меня устроит и 10 строчек модификации если при этом вы сделали что-то осознанное и знаете как примерно работает все остальное.

P.S. Зрение у меня хорошее, поэтому коды можно распечатать и мелким шрифтом (9-11 pt), не расходуйте бумагу.

================================================================================

Общие данные

Вопроcы по курсовику принимаю:
1) здесь, в комментариях к курсовику (лучший вариант)
2) телеграмме @SergeyGrs
3) vk (id8903)

Цель курсовой простая — попробовать техники компьютерного зрения (CV) / работы с фреймбуфером (Game / VideoPlayer), попробовать себя в комбинаторике имеющихся методов.

В рамках курсового проекта вы:

  • будете находиться в ОС Linux, пользуясь её инфраструктурой и возможностями (можно в рамках виртуальной машины). Но можно и Windows, если очень хочется, но тут с моей стороны по самой среде сильно помощи не ждите — я в Visual Studio уже давно не программировал и не гарантирую качественный сервис (см. по Windows информацию ниже).
  • Попробуете Python (еще раз) или C/C++.
  • Освоите простейший подход для программирования: окно блокнота и компилятор gcc/g++.
  • Чтобы упростить сборку мы применим по отношению к вашей программе систему сборки. После небольших (или больших изменений) в коде вы сможете обновлять результат командой make. В примерах с системой cmake нужно будет сначала единожды вызвать <cmake .> (настройка под ваш компьютер), а потом уже <make>.
  • Менеджмент CV-кода. Вам будут предложены различные варианты алгоритмов компьютерного зрения, читающие видео с камеры или различных источников (сеть, файл и т.д.). Это материал будет обрабатываться исходя из выбранной цели. Вам будет предложено изменение этого алгоритма или его улучшение (добавление информации в кадр, например). В задании будет базовая задача — дальнейшее улучшение полностью на ваше усмотрение, в интернете очень много материалов, которые позволяют вам накидать в ваш «проект мечты» нужный функционал.
  • [extra] Попробуете Mobile Dev (на примере Android). Для тех кто справляется с запуском базового примера и знает, что улучшение кода не вызовет у него существенных проблем я предлагаю попробовать себя в мобильной разработке. Установите на вашу ОС Android Studio( https://developer.android.com/studio) и скачайте сэмпл для Android. В рамках сэмпла вам предлагается вложить ваш пример в заранее подготовленное место в коде и немного модифицировать вход и выход данных. В итоге ожидается получение функционала вашего приложения в мобильном варианте.

Язык программирования: C/C++ для основной ветки заданий. Возможен Python (и в чем-то вам будет много легче), но тут вам больше самостоятельно и придётся проявить. Попробуйте первые сэмплы этапа 1 для обоих языков и решите.

Подготовка к работе (рабочее окружение)

Сам Linux, если нет проще всего поставить в виртуальной машине. Ставите VirtualBox (Vmware не надо, он слишком тяжелый) и создаете виртуальную машину Linux. Параллельно качаем образ одного из современных GNU/Linux с самой легкой графической оболочкой (для виртуалки большего не надо). Если для себя будете ставить, то можете выбрать более красивые версии (Mate или Cinnamon)

https://linuxmint.com/edition.php?id=266 (Linux Mint XFCE 32bit) — если машина совсем дохлая и оперативной памяти там <= 2-3 Гб. 64 бита на такую лучше не ставить, проиграете 10-20 процентов производительности.

https://linuxmint.com/edition.php?id=265 (Linux Mint XFCE 64bit) — если что-то от Core2Duo и выше.

После того, как образ виртуальной машины создался и вот он перед вами пустой, зайдите в его опции и в качестве CDROM/DVD-ROM выберите для него скачанный образ. Он будет подхвачен в качестве диска. Как запустите виртуалку — сразу начнется загрузка Linux LiveCD, где прямо на рабочем столе есть инсталлятор. Устанавливайте все по рекомендуемым настройкам и, вуаля, через 5-6 минут у вас в виртуальной машине полноценная ОС GNU/Linux. После этого в настройках можно удалить образ из CD-ROM/DVD-ROM, чтобы он не предлагал вам переустанавливать систему еще раз. Внимательно отнеситесь на этой стадии к паролю вашего аккаунта. Это пароль root-команд, он будет нужен довольно часто.

Для настройки системы можете попробовать воспользоваться вот этим скриптом:

Запуск скрипта:

переименовать скачанный документ в install_programs.sh
chmod a+x install_programs.sh

sh ./install_programs.sh

Я не гарантирую, что где-то в этих файлах не пройзойдет сбой — все файлы будут качаться с интернета, какие-то изменения произошедшие в дистрибутивах библиотек всегда могут пустить сборку мимо кассы. Но в любом случае выкладываю запасную команду, если что-то пойдет не так и сборка будет заканчиваться с ошибками:

Запасные команды:

sudo apt install libopencv* ffmpeg x264 x265 python3 python3-numpy python3-matplotlib python-opencv python-opencv-apps cmake cmake-curses-gui g++ build-essential

для Python выполните отдельно еще (несколько строчек):

sudo apt-get install python python-dev —force-yes —assume-yes —fix-broken curl —silent —show-error —retry 5 https://bootstrap.pypa.io/get-pip.py | sudo python2.7 sudo -H pip install setuptools wheel virtualenv —upgrade

sudo apt-get install python-dev

pip install imutils pyopencv

pip install numpy

sudo pip install opencv-contrib-python

В Linux рекомендую пользоваться каким-нибудь текстовым редактором с подсветкой (geany, bluefish) — их можно легко поставить из консоли через волшебные sudo apt install <пакет>. В этом случае есть 2 варианта — их можно использовать как текстовый редактор, а сборку и запуск проводить в консоли рядом. Или же, посмотрите настройки и укажите редактору свою систему сборки и можете запускать и видеть выхлоп программы прямо в редакторе в спецокне. Я все же предпочитаю в таком подходе по старинке консоль — там больше информации видно, ее удобно развернуть на весь экран на соседнем виртуальном рабочем столе. Или же можете поставить целую среду программирования, из которой можно и запускать сразу (eclipse, codeblocks) — их нынче тоже уже можно поставить через менеджер пакетов.

Если будете писать на Python расклад то же самый. Разве что в качестве специализированных средств не ставьте гигантские комбайны типа Eclipse (под ваши мини-проекты они скорее всего будут избыточны), а сконцентрируйтесь на чисто Python-средах, вроде PyDev. Их также ставьте через apt-менеджер.

P.S. Если вы прочитали все вышеперечисленное и все-таки не хотите связываться с Linux, не видите вариантов его дальнейшего использования, то в случае реализации алгоритмов CA (компьютерное зрение) можете воспользоваться настройкой под Windows: http://study.rusvision.com/wp-content/uploads/2019/04/Установка-OpenCV-3-в-Windows.pdf

Если говорить о Windows + Python, то здесь тоже много различных туториалов-статей. Вот, к примеру, можно настраиваться по этому видео: https://www.youtube.com/watch?v=u21B2L5g884

P.S. Если у вас возникли тем не менее большие проблемы с Windows — поступайте следующим образом — скачивайте из сети любой готовый проект на OpenCV под Windows (например с github.com). Следите, чтобы версия совпадала с вашей установочной — если вы ставили OpenCV 3.0 и выше, то следите, чтобы проект скачиваемый был помечен как OpenCV 3.x. Если скачанный проект заработал из коробки, то просто поменяйте его код (содержимое функции int main() ) на свое и запустите пересборку.

Выбор задания

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

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

Ядро 1. Алгоритм компьютерного зрения: в базовом варианте это алгоритм компьютерного зрения. им мы посвятим наибольшее количество времени. Это различные варианты обработки кадра, которые будут одна за одной вести нас к результату.

поиск лица в кадре
модификация: запомнить лица, выводить имя / нумерация детекций

поиск объекта определённого цвета
модификация: предложить пользователю палитру для выбора цвета объекта

обработка видео в реальном времени
модификация: по нажатию кнопки делать различные обработки видео.

Ядро 2. Игра. Второй вариант разработки. Возможно среди вас есть будущие игроделы или создатели виртуальных тренажеров (список игроподобных применений можно продолжать). У нас будет занятие по библиотеке SDL, которая представляет собой одну из самых низкоуровневых библиотек работы с графикой и звуком (мультимедиа). На базе SDL написано немало мультимедиа-приложений и игр в том числе. Здесь последовательность следующая — на занятии мы рассмотрим основной механизм SDL, рассмотрим вывод графики и основные проблемы. Этот сэмпл будет доступен и здесь. Далее я передаются вам исходники более сложного проекта, где подключается считывание кнопок управление. Так, размещая героя на экране, мы начинаем его перемещать по экрану. После того как я передам вам код вам его нужно будет запустить и немного модифицировать. Вариант более сложный, бесспорно. Я постараюсь идти навстречу.

SDL-игру можете также писать и под Windows, есть много статей и видео, которые поясняют особенности настройки: https://www.youtube.com/watch?v=QQzAHcojEKg

Также есть целые мануалы по созданию таких игр, вы можете воспользоваться например этим руководством: https://www.youtube.com/playlist?list=PLhfAbcv9cehhkG7ZQK0nfIGJC_C-wSLrx

Ядро 3. Плейер: Здесь мы наблюдаем распаковку видео и каждый раз, когда у нас есть кадр (для реконструкции которого хватает NAL-юнитов), мы отображаем его средствами SDL2. SDL достаточно низкоуровневая библиотека, работать с ней не очень легко. Однако она открывает понимание, как это работает в железе. Очень подробно о программировании графики на SDL2 — https://lazyfoo.net/tutorials/SDL/ . В соответствии с этими туториалами я ожидаю от вас небольшой коррекции только части визуализации.

Ядро 4. Альтернатива: если вы имеете навыки или уже делаете какой-то проект на базе существующих графических движков (Unity/Unreal3D) или с применением библиотек построения в том числе интерфейсов (Qt, wxWidgets и т.д.), или другой проект на базе OpenCV, то я приветствую такую активность. Прошу только определиться до конца марта и сообщить мне) Подходите и консультируйтесь, если есть идеи. Если вам интересно какое-то направление, то я без проблем приму и незаконченный проект. Главное, чтобы это было действительно вам интересно.


Формулировка задания

  1. Проверить работоспособность вашего рабочего окружения на базе исходников этапа 1.
  2. Внимательно исследовать исходники этапа 2, запустить их
  3. После ознакомления литературой провести модификацию, сохранить исходники этапа 3. Это результат, его нужно будет описать в небольшой записке к работе
  4. В случае если это задание группы CA(на С++), то возможно выполнение адаптации для Android (этап 4). Это по вашему желанию.

Исходные коды для всех заданий

(все исходники, кроме интеграции в android, на месте)

Постановка задания

№ ЗаданияРекомендации по заданию
CA1
(C++/Детектор лиц)
http://study.rusvision.com/2019/03/ca1-детектор-лиц
СА2
(С++/Трекер моноцвет.)
http://study.rusvision.com/2019/03/cа2-поиск-одноцветного-объекта
СА3
(С++/Видеопроцессинг)
http://study.rusvision.com/2019/03/ca3-видеопроцессинг
CB
(C++/Игра)
Модификация исходников на свое усмотрение. Добавление препятствий на карту или ячеек, которые вызовут смерть героя и т.д. Любая имеющая реальный смысл модификация принимается.
CC
(С++/Плейер)
В плейере необходимо добавить рисование графических примитивов, которые имитируют новости. Т.е. полосу и произвольный текст снизу видео.
Все это можно сделать внутри тела визуализации:
if(got_picture)
{
....
SDL_Delay(40);
}
PA1http://study.rusvision.com/2019/03/ca1-детектор-лиц
PA2http://study.rusvision.com/2019/03/cа2-поиск-одноцветного-объекта
PA3http://study.rusvision.com/2019/03/ca3-видеопроцессинг
BAXСогласовать. Предпочтение проектам на 3D-движках и приложениям
компьютерного зрения (дополненая реальность, трекеры, анализаторы и т.д.).
CA++(Android Dev)В разработке 🙁 доступно при личном обращении, пока что не сделал полные пояснения так, чтобы можно было разобраться без меня. Но есть полуфабрикат, могу отдать отдельным умельцам если есть желание)

Лекции по курсу:

Тестовый ролик (если в вашем задании нужно видео):

Вливайтесь в общение

3 комментария

  1. Сергей, здравствуйте!
    Пытаюсь запустить исходники, stage1, на Python, чтобы начать делать проект по распознаванию лиц.
    Возникает ошибка: «list index out of range» в следующей строке:
    cap = cv.VideoCapture(sys.argv[1],1)
    Такая же ошибка в скриптах для изображения и простого видео. Что это может быть?
    На занятии эти скрипты работали на моем ноутбуке без ошибок.

  2. Точнее, в этом файле строка такая:
    cap = cv.VideoCapture( sys.argv[1] )

    1. Доброй ночи! Да, это самая типичная ошибка
      sys.argv[1] — это аргумент, который скрипт ожидает в рамках вызова (python script.py [argv] ). Т.е. вызов видимо идет без указания материала для обработки (файл (путь к файлу) или камера /dev/video0).

      тест: python script.py /dev/video0

Оставьте комментарий

Добавить комментарий для gross Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *