15 ноября 2015 г.

Получение данных с камеры телефона на Unreal Engine 4 + Android

Задача: получить и обработать данные с камеры телефона на Android в рамках проекта на Unreal Engine 4.

Необходимость в этом возникла при попытке использовать камеру на телефоне для определения местоположение телефона относительно помещения, в котором его используют. Это касается и AR- и VR-игр.

Как обычно, я запишу, что я делал для этого, чтобы потом вспомнить. Будет небольшая каша из-за того, что у меня используется моя библиотека markers detector, которая вам, скорее всего, не нужна. Но, надеюсь, вы поймёте ход моих мыслей и сможете увидеть всю картину целиком. Учитывая необходимость править файлы из директории игрового движка, использовать Java, NDK и C++, я бы не назвал весь этот подход очевидным.

28 августа 2015 г.

Как подключить MarkersDetector.dll в проект Unreal Engine 4

В этом посте описана инструкция, как можно подключить мою библиотеку MarkersDetector.dll, которая использует несколько вызовов библиотеки OpenCV. Мне пришлось собрать свою dll, а не использовать OpenCV напрямую, из-за особенности сборщика мусора в UE4 - он крашился при вызове некоторых нужных методов, например, cv::findContours(). В MarkersDetector.dll упакован необходимый минимум, чтобы получать в реальном времени координаты и вектор поворота веб-камеры относительно статичных маркеров.

20 августа 2015 г.

Некоторые проблемы и их решения при работе с Unreal Engine 4, Visual Studio и OpenCV

Здесь я запишу, чтобы не забыть и, может быть, кому-нибудь помочь, как я решал те или иные проблемы, когда работал с UE 4.8.3 и Visual Studio 2013, подключая OpenCV.
Пусть вещи и тривиальные для тех, кто знает зачем нужны заголовочные файлы и что такое .lib-файлы и как работает LINK, но описывать я буду в формате "Ошибка - Решение", так как так проще искать решение.
Осторожно! Советы могут быть вредными, так как я новичок в C++ и UE4.

15 марта 2015 г.

Конвертировать Twitch видео в gif, mp4 онлайн

FLV - Flash Video. На данный момент этот формат видео довольно сильно распространен в интернете. Например, сервис Twitch.tv транслирует записанные показы, используя его. Видео кодируется в H.264, звук в AAC. Содержит в себе заголовок и подряд идущие теги. Теги бывают трёх видов: метаданные, видеоданные, аудиоданные. Метаданных может не быть или быть больше одного тега. Метаданные могут содержать произвольные данные, например, караоке или ID3 подобные данные. Кроме того, метаданные Твича содержат временные метки ключевых фреймов и их позиции в файле (Твич использует flvmeta для создания onMetadata в своих flv).

В данном посте я запишу, что я узнал о FLV, когда реализовывал частичную выгрузку видео с Твича с указанными временными метками начала и конца отрезка. В освоении flv мне очень помогла статья от авторов red5. Итоговый продукт для конвертации Twitch-видео в gif онлайн - tw2gif.com.

UPD: Twitch внедрил поддержку HLS-видео. Теперь tw2gif.com поддерживает ссылки вида /v/, а всё далее идущее в статье уже не актуально.

4 октября 2014 г.

Мой опыт изучения Unreal Engine 4 и С++ с нуля

Я, будучи полным новичком в C++, Visual Studio и Unreal Engine 4, буду записывать ответы на вопросы, которые возникли у меня в ходе освоения вышеперечисленных технологий.
Кому-то мои ошибки покажутся абсолютно примитивными, но для меня они всё-таки представляли сложность. На данный момент я использую UE 4.4, Visual Studio 2013.

Первая ошибка была в том, что у меня был UE 4.3, и из него не могла запуститься Visual Studio Express. Я обновился до UE 4.4 и скачал Vusial Studio 2013. Проблемы взаимодействия редакторов решены.

GEngine. Проблемы билда первого проекта, когда я в стартовый First Person C++ добавил свой класс с дебагом через
GEngine->AddOnScreenDebugMessage.
Проект не собирался. Оказалось, что в стартовом проекте в главном хедер-файле подключался
#include "EngineMinimal.h".
Я исправил эту строку на  
#include "Engine.h".
После этого GEngine стал доступен.

Установка категории логирования. Я пытался наладить режим отладки с выводом необходимой мне информации. Я использовал руководство https://wiki.unrealengine.com/Logs,_Printing_Messages_To_Yourself_During_Runtime. Но не уделил особого внимания части, где говорится о определении своей категории логирования. В хедере вашего проекта или отдельного файла нужно добавить
DECLARE_LOG_CATEGORY_EXTERN(YourLog, Log, All);
Причем не в рамках класса, а после. Аналогично и с файлом .cpp, нужно добавить не в рамках класса, а просто в файл DEFINE_LOG_CATEGORY(YourLog);
А затем уже можно будет вызывать
UE_LOG(YourLog, Warning, TEXT("Sub Location is %s"), *subLocation.ToString());
Причем 4й аргумент (конвертация вектора в строку) должен быть со звездочкой.

Правка исходного кода без запуска Visual Studio оказалась возможной. Сначала я собирал проект используя эту монструозную IDE, затем для мелких правок одного файла я начал использовать Sublime Text, а сборку выполнять с помощью команды:
D:\путь-до-движка\Engine\Build\BatchFiles\Build.bat НазваниеПроектаEditor Win64 Development "путь-до-папки-с-проектом\НазваниеПроекта.uproject"
После этого я запускал редактор вручную. Но этот вариант не подходит для нормального дебага с Break Point-ами.

2 апреля 2014 г.

Log Reader - парсер логов ошибок веб-сервера

В этом посте я расскажу  о простой утилите для просмотра журнала ошибок php (под apache) и nginx, написанной на php. В парсинге логов на php нет ничего сложного, и обычный разбор по регулярным выражениям позволяет решить задачу. Найденные готовые решения не удовлетворили меня либо по встраивомости, либо по коду, поэтому я написал свой велосипед с необходимым мне уровнем абстракции. Это позволило применить один и тот же код и для проекта на Zend Framework и для отдельного веб-сервера совсем без фреймворков. Исходный код выложен на github по ссылке - LogReader.

14 марта 2014 г.

Установка и настройка Jenkins + Vagrant + Selenium с нуля на Linux (Debian)

В предыдущих постах я описал свой переход от флагово-хукового тестирования к Jenkins под Windows и последующим развертыванием виртуальной машины с WinXP для Selenium-тестов. История получилась в 4х частях, многое не нужно, и от этого её трудно использовать.
В этом посте я постараюсь кратко, но целостно описать процесс развертывания системы Selenium-тестирования, запускаемого из Jenkins с использованием универсального средства переносимых виртуальных машин Vagrant с провайдером VirtualBox и образом Ubuntu desktop для запуска тестов в Chrome и Firefox. Так как целью является именно целостность статьи, я повторю некоторые описанные ранее шаги, например, запуск Selenium хаба и нодов к нему.
В результате мы получим headless сервер для автозапуска Selenium-тестов веб-приложения.

Начальное состояние

Веб-сервер под управлением Debian 7 / Ubuntu с установленным и настроенным php и виртуальными хостами и установленной java (достаточно jre). Так как мы строим систему для запуска автотестов некоторого веб-приложения, то это веб-приложение должно быть настроено и работать на этом сервере. Кроме того, предполагаем, что мы используем систему контроля версий, и у нас есть скрипт, которым можно обновить (задеплоить) это веб-приложения в этой среде в автоматическом режиме. К этому моменту должен быть написан хотя бы один Selenium-тест этого приложения, использующий класс PHPUnit_Extensions_Selenium2TestCase. Примеры тестов можно найти по ссылке.