Дополненная Реальность в Облаке

480
-1

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
480
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Дополненная Реальность в Облаке

  1. 1. Дополненная Реальность в Облаке NODE.JS И С++ ПОД ОДНОЙ КРЫШЕЙ Хведченя Евгений Computer Vision Talks
  2. 2. Дополненная реальность Дополненная реальность (англ. augmented reality, AR), — термин, относящийся ко всем проектам, направленным на дополнение реальности любыми виртуальными элементами.
  3. 3. Дополненная реальность сегодня u  Возможности ограничены мощностью устройства u  Высокое энергопотребление u  30FPS – это минимум u  Обилие и фрагментация платформ u  Разнообразие языков программирования
  4. 4. Дополненная реальность в облаке u  Работает везде u  Потребляет меньше энергии u  С++ для алгоритмов u  Производительность и масштабируемость u  Легкий обмен данными между устройствами
  5. 5. Так появился CloudCV – Cloud Computer Vision Platform Цель – Algorithms as a Service
  6. 6. Так появился CloudCV – Cloud Computer Vision Platform u  Инфраструктура для алгоритмов в облаке: u  u  3Д реконструкция u  Анализ видео (подсчет людей, выявление дефектов) u  u  Дополненная реальность Распознавание объектов и лиц Node.js & C++
  7. 7. Альтернативы Node.js & C++ u  SWIG & JAVA u  RoR & C++ u  Boost.Python
  8. 8. Почему C++ и Node.js С++ Node.js •  Производительность •  Простая обработка запросов •  Библиотеки •  Поддержка С++ •  Опыт разработки •  Легковесный •  Он прикольный J
  9. 9. Node.js и C++ такие разные u  Компиляция vs Интерпретация u  Строгая типизация vs Слабая типизация u  Makefile vs nothing u  И это работает!
  10. 10. Взаимодействие Node.js и С++ u  Node.js построен на базе движка V8 u  V8 написан на С++ u  Можно грабить корованы писать свои модули u  ????? u  PROFIT!
  11. 11. Минимальный модуль #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"),              FuncPonTemplate::New(Method)-­‐>GetFuncPon());   }     NODE_MODULE(hello,  init)  
  12. 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"),              FuncPonTemplate::New(Method)-­‐>GetFuncPon());   }     NODE_MODULE(hello,  init)  
  13. 13. Неблокирующие вычисления в С++ u  Node.js работает асинхронно u  Блокирующие задачи - в отдельном потоке u  Код С++ также должен следовать парадигме
  14. 14. Как правильно 1.  Вызов функции С++ из JavaScript 2.  Создание рабочего потока (libuv) 3.  WorkerFn – чистый С++ код (без V8) 4.  Возврат результата через callback
  15. 15. Запуск обработчика Handle<Value>  Async(const  Arguments&  args)  {          HandleScope  scope;          Local<FuncPon>  callback  =  Local<FuncPon>::Cast(args[0]);          Task*  task  =  new  Task();          task-­‐>request.data  =  baton;          task-­‐>callback  =  Persistent<FuncPon>::New(callback);          uv_queue_work(uv_default_loop(),  &task-­‐>request,                  AsyncWork,  AsyncAber);          return  Undefined();   }  
  16. 16. Передача данных между потоками struct  Task  {          uv_work_t  request;          Persistent<FuncPon>  callback;                    //  Custom  data          int32_t  theAnswer;   };  
  17. 17. Передача данных между потоками struct  Task  {          uv_work_t  request;                                              //  Хранит  внутреннее  состояние  задачи          Persistent<FuncPon>  callback;                    //  Custom  data          int32_t  theAnswer;   };  
  18. 18. Передача данных между потоками struct  Task  {          uv_work_t  request;   //  Хранит  внутреннее  состояние  задачи        Persistent<FuncPon>  callback;   //  JavaScript  функция,  которая  будет  вызвана  по                    //  Custom  data          int32_t  theAnswer;   };   выполнению  работы  
  19. 19. Асинхронный обработчик void  AsyncWork(uv_work_t*  req)  {          //  No  HandleScope!          Task*  task=  staPc_cast<  Task  *>(req-­‐>data);          sleep(1000);                                              //  Do  something  useful          task-­‐>theAnswer  =  42;   }  
  20. 20. Получение результата void  AsyncAber(uv_work_t*  req)  {          HandleScope  scope;          Task*  task  =  staPc_cast<  Task  *>(req-­‐>data);            task-­‐>callback-­‐>Call(…);      //  Call  Task-­‐>callback  with  results.          task-­‐>callback.Dispose();  //  Clean-­‐up  memory:          delete  baton;   }  
  21. 21. О чем следует помнить u  AsyncWork – блокирующая функция u  Внутри AsyncWork запрещен доступ к V8 u  Task хранит аргументы и результат u  Используйте TryCatch при обращениях к V8
  22. 22. Использование 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::FatalExcepPon(try_catch);   }  
  23. 23. Демонстрация
  24. 24. Дополненная реальность в браузере u  Используется только браузер и веб-камера u  Вся «магия» происходит на сервере u  Потоковая обработка в реальном времени Захват кадра (JavaScript) Отправка кадра (node.js) Визуализация Обработка (С+ +) Отправка ответа (node.js)
  25. 25. Попробовать дома u  http://cloudcv.io/demo/ar/live u  http://cloudcv.io Посмотреть код u  https://github.com/BloodAxe/CloudCV https://github.com/BloodAxe/CloudCVBackend
  26. 26. А давайте поговорим?
  27. 27. Спасибо за внимание! u  ekhvedchenya@gmail.com   u  @cvtalks   u  computer-­‐vision-­‐talks.com   u  cloudcv.io  
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×