Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,209 views

Published on

  • Be the first to comment

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

  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  

×