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