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

Внимание! Занятия 13 ноября
не будет

(не успеваю из командировки)

файл для ffmpeg+sdl.
Компиляция: gcc -o ffdecode player.c -L/usr/local/lib -lavutil -lavcodec -lavformat -lswscale -lSDL

Правила семестра «осень-2019» для КСМиПВС (курс 2)

Выходная оценка состоит из 100 потенциальных баллов, которые определяют сетку оценок. 5ка — от 70 до 100, 4ка — от 50 до 70. Ниже — по рассмотрению ситуации лично (что-то то вы же должны были запомнить…).
Баллы можно получить с контрольной (100 баллов максимально). Контрольная непростая, состоит из практической части в линуксе и теории. Далеко не все можно вытащить из слайдов и методички (см. раздел материалы к курсу), что-то требует внимательности и самостоятельной работы на лекциях , поэтому предлагаю подстраховаться — получить баллы самостоятельной работой: мини-курсовик. Вы выбираете одну из нижепредложенных тематик, разбираетесь с исходниками (запускаете на своем оборудовании) и только после этого подходите и получаете доп. задание по модификации исходников или же предлагаете свое. За это можно получить до 80 баллов, т.е. в случае если я вижу, что вы очень хорошо вложились в программирование, то я освобождаю вас от контрольной.

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

Общие данные

Вопро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-кода. Вам будут предложены различные варианты алгоритмов компьютерного зрения, читающие видео с камеры или различных источников (сеть, файл и т.д.). Это материал будет обрабатываться исходя из выбранной цели. Вам будет предложено изменение этого алгоритма или его улучшение (добавление информации в кадр, например). В задании будет базовая задача — дальнейшее улучшение полностью на ваше усмотрение, в интернете очень много материалов, которые позволяют вам накидать в ваш проект нужный функционал.

Язык программирования: 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 libopencv-dev

для 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/ . В соответствии с этими туториалами я ожидаю от вас небольшой коррекции только части визуализации.


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

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

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

(все исходники на месте)

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

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

Лекции/методичка по курсу:

Слайды (часть 1): http://study.rusvision.com/wp-content/uploads/2019/10/lections_ksmipts_1.zip (пароль на занятии)

Методичка: http://study.rusvision.com/wp-content/uploads/2019/10/Gross_metodical_materials_KSMiPTS.zip (пароль на занятии)

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