2. Дополненная реальность
Дополненная реальность (англ. augmented reality, AR), — термин,
относящийся ко всем проектам, направленным на дополнение
реальности любыми виртуальными элементами.
3. Дополненная реальность сегодня
Возможности ограничены мощностью
устройства
Высокое энергопотребление
30FPS – это минимум
Обилие и фрагментация платформ
Разнообразие языков программирования
4. Дополненная реальность в облаке
Работает везде
Потребляет меньше энергии
С++ для алгоритмов
Производительность и масштабируемость
Легкий обмен данными между устройствами
5. Так появился CloudCV –
Cloud Computer Vision Platform
Цель – Algorithms as a Service
6. Так появился CloudCV –
Cloud Computer Vision Platform
Инфраструктура для алгоритмов в облаке:
3Д реконструкция
Анализ видео (подсчет людей, выявление дефектов)
Дополненная реальность
Распознавание объектов и лиц
Node.js & C++
8. Почему C++ и Node.js
С++
Node.js
• Производительность
• Простая обработка запросов
• Библиотеки
• Поддержка С++
• Опыт разработки
• Легковесный
• Он прикольный
9. Node.js и C++ такие разные
Компиляция vs Интерпретация
Строгая типизация vs Слабая типизация
Makefile vs nothing
И это работает!
10. Взаимодействие Node.js и С++
Node.js построен на базе движка V8
V8 написан на С++
Можно грабить корованы писать свои модули
?????
PROFIT!
12. Что тут неправильно?
#include <node.h>
#include <v8.h>
using namespace v8;
Handle<Value> Method(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("world"));
}
void init(Handle<Object> exports) {
exports->Set(String::NewSymbol("hello"),
FunctionTemplate::New(Method)->GetFunction());
}
NODE_MODULE(hello, init)
13. Неблокирующие вычисления в С++
Node.js работает асинхронно
Блокирующие задачи - в отдельном потоке
Код С++ также должен следовать парадигме
14. Как правильно
1.
Вызов функции С++ из JavaScript
2.
Создание рабочего потока (libuv)
3.
WorkerFn – чистый С++ код (без V8)
4.
Возврат результата через callback
16. Передача данных между потоками
struct Task {
uv_work_t request;
Persistent<Function> callback;
// Custom data
int32_t theAnswer;
};
17. Передача данных между потоками
struct Task {
uv_work_t request;
Persistent<Function> callback;
// Custom data
int32_t theAnswer;
};
// Хранит внутреннее состояние задачи
18. Передача данных между потоками
struct Task {
uv_work_t request;
// Хранит внутреннее состояние задачи
Persistent<Function> callback; // JavaScript функция, которая будет вызвана по
выполнению работы
// Custom data
int32_t theAnswer;
};
21. Использование в JS
var cppModule = require(‘hello’);
cppModule.hello(“some input”, function(result) {
// result.theAnswer = 40
});
22. О чем следует помнить
AsyncWork – блокирующая функция
Внутри AsyncWork запрещен доступ к V8
Task хранит аргументы и результат
Используйте TryCatch при обращениях к V8
23. Использование TryCatch
// Trying to call JavaScript callback:
TryCatch try_catch;
callback->Call(Context::GetCurrent()->Global(),
1, /* Number of arguments of callback */
res /* Array of arguments */);
if (try_catch.HasCaught()) {
node::FatalException(try_catch);
}
25. Дополненная реальность в браузере
Используется только браузер и веб-камера
Вся «магия» происходит на сервере
Потоковая обработка в реальном времени
Захват кадра
(JavaScript)
Отправка
кадра
(node.js)
Визуализация
Обработка
(С++)
Отправка
ответа
(node.js)