HoloLens, Xbox One Dev Mode і можливості для розробників з конференції //Build

Здрастуйте, дорогі читачі!

В цьому році на конференції Microsoft //Build представлено не тільки багато технологічних анонсів і нововведень, але і не мало цікавих можливостей на самому заході.


HoloLens і Holographic Academy, Xbox One Developer Mode і подробиці цікавих технологічних проектів з фіналу Imagine Cup США — про це я хочу розповісти вам в цій статті.


HoloLens і NASA
Microsoft спільно з NASA представили спільний проект з вивчення Марса за допомогою використання пристрою HoloLens під назвою: «Destination: MARS».

На конференції був присутній великий стенд з демонстрацією висадки на марс, де кожен відвідувач, який отримав квиток на демо, міг відчути себе у вигляді дослідника Марса.

Трохи передісторіїСвоїми коренями проект йде далеко в 2012 рік, коли марсохід «Сuriosity» успішно висадився на Марс і почав дослідження «червоної планети».


Минуло кілька років, і у NASA з'явилося багато різних даних, знімків, аналізів поверхні і атмосфери марса.
Весь матеріал, отриманий з curiosity і його попередників, був використаний для відтворення точної поверхні марса. Саме на неї ти потрапляєш під час демонстрації «Destination: MARS».

У самій NASA всі можливості та інструменти HoloLens використовуються для вивчення марса і планування маршруту та діяльності Curiosity на червоній планеті». Це ті ж самі інструменти розробки, які кожен розробник вже зараз може встановити собі на комп'ютер і почати працювати в емуляторі над створенням голограм.




Потрапляючи в кімнату приблизно 25 кв. м., всі учасники розташовуються по кімнаті і, після невеликого вступу, потрапляють на 3d модель поверхні марса. Демонстрація дає відчути, а яке знаходиться на «червоній планеті», коли ти стоїш на її землі.

Можна ходити, розглядати всі об'єкти навколо, побачити сам марсохід Сuriosity в тому числі.



Паралельно з цим з'являються 3d моделі співробітників NASA, які пояснюють і розповідають, що відбувається навколо і всю історію проекту в цілому.

За рахунок потужного процесора для HoloLens можна використовувати моделі будь-якого ступеня якості, в шоломі модель з'явиться саме такою, якою її створили.

Технічні характеристики HoloLens
  • 2 процесора: Microsoft Holographic Processing Unit (HPU) і Intel 32 bit процесор
  • RAM: 2 gb

  • Flash-пам'ять: 64 gb
  • Підтримка bluetooth (в комплекті Bluetooth Clicker), Micro USB роз'єм
  • Інерціальна вимірювальний блок (inertial measurement unit), сенсор зовнішнього освітлення та 4 узгоджені камери. Камера вимірювання глибини (для сприйняття HoloLens простору).
  • 2-мегапіксельна HD камера для запису відео і зйомки фото.
  • 4 мікрофона всередині пристрої, що дозволяють записувати голосові команди користувача.
  • Вага: не більше 579 г
  • Час роботи батареї: 2-3 години активного використання, 2 тижні в режимі очікування
сайт представлена більш детальна картина з візуалізацією всіх частин, з яких складається HoloLens.


Holographic Academy – еволюція навчання розробки голограм
У минулому році на //Build 2015 була вперше представлена академія розробки під HoloLens – Holographic Academy. Це цілих 4.5 години цікавого навчання створення голограм для Microsoft HoloLens з нуля.

За всі 3 дні з усіх відвідувачів в 2015р. на неї змогло потрапити тільки ~180 осіб, в тому числі і мені посміхнулася удача.
На академії крок за кроком навчали як розробляти голограми, і досліджувався досвід використання саме «персональних голограм»: кожна людина розробляє свою персональну голограму і взаємодіє з нею, ніяк не може вплинути на голограму іншої людини.

Перед початком академії всіх просили підписати дозвіл на використання фото та відео матеріалів, т. к. на академії камери стояли в кожному кутку. Всі пристрої ми здали в сейфи і проходили через рамку металошукача, щоб додатково просканувати, чи залишилося щось у кишенях.


Потім йде важливий процес – вимірювання відстані між очима і дальності видимості, т. до. кожен пристрій HoloLens програмно налаштовується персонально під людину.

Академія в себе включала наступні етапи:
  • Короткий курс розробки під Unity і конфігурація середовища
    Для створення голограм HoloLens використовується ігровий движок Unity. Для перетворення звичайної сцени в сцену, придатну для створення голограм, необхідно певним чином змінити налаштування камери і світла.
    Розробка під HoloLens гранично проста, реалізація кожної функції займає буквально кілька рядків на C#.

    Вже зараз можна почати розробляти під HoloLens, встановивши інструменти розробки.
    Не існує спеціального HoloLens SDK, всі інструменти для роботи з голограмами вже вбудовані в Visual Studio 2015 Update 2 & Windows 10 SDK (версія 1511 і вище).
    Що вам знадобиться:
    Далі необхідно сконфігурувати сконфигурировать проект Unity для HoloLens.
    НалаштуванняКонфігурація сцени:
    1. Hierarchy виберіть Main Camera
    2. На панелі Inspector, виставити значення transform position на 0, 0, 0, таким чином розташування голови користувачів буде на початку рівня Unity
    3. Змінити Clear Flags на Solid Color
    4. Змінити Background color на RGBA 0,0,0,0. Увага: чорний колір рендерится як прозорий в HoloLens.
    5. Змінити Clipping Planes — значення Near рекомендується поставити 0.85 (метрів) для HoloLens.
    Конфігурація проекту:
    • Player Settings > Windows Store > Publishing Settings > Capabilities вам необхідно вибрати правильні Capabilities, щоб активувати потрібні вам API:
      Capabilities API
      WebCam PhotoCapture and VideoCapture
      SpatialPerception SurfaceObserver and SpatialAnchor
      Microphone VideoCapture, DictationRecognizer, GrammarRecognizer, and KeywordRecognizer
      picturesLibrary / videosLibrary / musicLibrary PhotoCapture і VideoCapture
    • Необхідно задати Unity проекту експорт як Універсальний Windows Platform app
      1. Виберіть File > Build Settings...
      2. Виберіть пункт Windows Store в списку платформ

      3. Виберіть значення SDK на Універсальний 10
      4. Виберіть значення Build Type на XAML
    • HoloLens дуже важлива продуктивність, тому необхідно встановити налаштування якості на «високу продуктивність»
      1. Виберіть Edit > Project Settings > Quality
      2. Виберіть пункт меню, що випадає близько лого Windows Store і виберіть Fastest.

    • Необхідно, щоб програма використовувала голографічний вигляд, а не 2D вид
      1. Build Settings… вікна, відкрийте Player Settings...
      2. Виберіть Settings для вкладки Windows Store

      3. Розкрийте групу Other Settings
      4. В секції Rendering, установіть прапорець Virtual Reality Supported, щоб додати новий Virtual Reality Devices список і переконайтеся, що «Windows Holographic» є в списку підтримуваних пристроїв.


  • Введення в жести взаємодії з голограмами
    У 2015 році HoloLens не включав в комплекті Bluetooth Clicker, за допомогою якого можна одним натисненням кнопки робити «click» і інші жести.

    У HoloLens виразно кілька стандартних жестів, які дозволяють взаємодіяти з голограмми:
    1. Натиснути\відпустити (Press\Release)Цей жест є основним для активації взаємодії або вибору голограм.
      Щоб його зробити треба підняти руку перед собою долонею вперед, стиснути руку в кулак, підняти вказівний палець. Потім треба опустити його (Press) і підняти знову (Release) — аналогічно ви робите tap по планшету, тільки це в повітрі.
    2. Цвітіння (Bloom)Спеціальний системний жест, який дозволяє повернутися в стартове меню (еквівалент натискання кнопки «Пуск» на клавіатурі або Xbox-кнопки на джойстику)
      Щоб його зробити, треба: простягнути руку долонею вгору, стиснути всі пальці разом (можна в кулак) і повністю розтиснути їх назад.
      Варто відзначити, що ви не можете запрограмувати реакцію на даний жест у вашому додатку, т. к. він системний.


    Комбінацій рухів і стандартних жестів можуть дати наступні більш складні рухи:
    1. Утримання (Hold)Якщо утримувати жест Натискання (Press) (не відпускати), то такий жест сприймається системою як Утримання (Hold). Його можна використовувати для другорядних дій, наприклад, щоб підняти об'єкт.
    2. Маніпуляція (Manipulation)Натискання з подальшим рухом руки в 3D світі.
      Ці жести можуть бути використані для руху, масштабування і обертання голограм, коли ви хочете реакції 1:1 по відношенню до рухів вашої руки.
    3. Навігації (Navigation)Для використання даного жесту треба: зробити жест «Натискання» і потім рухати вашу руку всередині нормалізованого 3D куба, центрованого близько точки натискання.
      Дані жести — як віртуальний джойстик, і можуть використовуватися для навігації UI віджетів, таких як радіальні меню.


  • Створення першої голограми на Unity («Орігамі»)
    На поточному етапі були присутні тільки розміщення потрібних об'єктів і підключення камери. Тут варто зазначити, що навіть згорток газети (куля праворуч на скріншоті) виглядає як реальний предмет. Його можна оглянути, перевірити кожну букву, кожну цифру в газеті.



    Microsoft вже опублікувало ресурси минулого року, ви можете завантажити і спробувати самим відтворити проект, використовуючи емулятор.

  • Додавання курсору і жестів
    Щоб легше розуміти, на який предмет ти дивишся в даний момент, Microsoft розробив спеціальний курсор. Переміщає Курсор за допомогою спеціального ассета, а для його роботи необхідно в коді прописати каст променя з «голови» людини (по лінії від головної камери «гравці»).


    Unity надає як низькорівневий доступ (чиста інформація про координати та швидкості), так і високорівневий розпізнавач жестів, який надає комплексні події жестів (наприклад: tap, double tap, hold, manipulation і navigation).

    Enter жестів (Gesture Input)
    Namespace: UnityEngine.VR.WSA.Input
    Типи: GestureRecognizer, GestureSettings, InteractionSourceKind

    Високорівневі жести генеруються за допомогою джерел введення. Кожен Gesture event надає SourceKind для введення, в тому числі і позиціонування променя голови (про який згадувалося вище) під час активації події. Деякі події, які надають додаткову контекстну інформацію.

    Потрібно всього-лише кілька кроків, щоб здійснити захоплення жестів з використанням Gesture Recognizer:
    • Створення нового Gesture RecognizerДля використання GestureRecognizer, вам необхідно створити GestureRecognizer:
      GestureRecognizer recognizer = new GestureRecognizer();
      
    • Вказівку, за якими жестами вести спостереженняВказати зацікавив вас жест з допомогою SetRecognizableGestures():
      recognizer.SetRecognizableGestures(GestureSettings.Tap | GestureSettings.Hold);
      
    • Підписка на події для цих жестівОбов'язково підписатися на події для цих жестів.
      recognizer.TappedEvent += MyTapEventHandler;
      recognizer.HoldEvent += MyHoldEventHandler;
      
    • Старт захоплення жестівЗа замовчуванням, GestureRecognizer не спостерігає за введенням до виклику StartCapturingGestures(). Є можливість, що подія жесту може бути згенеровано після виклику StopCapturingGestures(), якщо enter був здійснений was до кадру обробки StopCapturingGestures(). Саме тому, завжди бажано починати і зупиняти моніторинг жестів в залежності від об'єкта, на який гравець в даний момент дивиться.
      recognizer.StartCapturingGestures();
      
    • Зупинка захоплення жестів
      recognizer.StopCapturingGestures();
      
    • ВидалитиНе забудьте відписатися від підписаних подій до видалення об'єкта GestureRecognizer.
      void OnDestroy()
      {
      recognizer.TappedEvent -= MyTapEventHandler;
      recognizer.HoldEvent -= MyHoldEventHandler;
      }
      
    Enter взаємодії (Interaction Input)
    Namespace: UnityEngine.VR.WSA.Input
    Типи: InteractionManager, SourceState, Source, InteractionSourceProperties, InteractionSourceKind, InteractionSourceLocation

    Як раніше говорилося, низькорівневий введення надає можливість отримати більше інформації про об'єкт введення, такий як координати позиції і швидкість у світі.
    • Як почати обробку події взаємодіїНеобхідно:
      • Підписатися на InteractionManager подія введення
        InteractionManager.SourcePressed += InteractionManager_SourcePressed;
        

      • Обробка події
        void InteractionManager_SourcePressed(SourceState state)
        {
        // state has information about:
        // targeting head ray at the time when the event was triggered
        // whether the source is pressed or not
        // properties like position, velocity, source loss risk
        // source id (which hand id for example) and source kind like hand, voice, controller or other
        }
    • Як зупинити обробку події взаємодіїНеобхідно:
      InteractionManager.SourcePressed -= InteractionManager_SourcePressed;
      
    • Input Source Change Events
      • detected — виявлений (став активним)
      • lost — втрачений (став неактивним)

      • updates — змінився (рухається або змінює стан)

      • is pressed — натиснутий (тап, натискання кнопки, або початок виділення)
      • is released — відпущений (кінець тапа, відпускання кнопки, або кінець виділення)
    • Приклад
      using UnityEngine.VR.WSA.Input;
      
      void Start ()
      {
      InteractionManager.SourceDetected += InteractionManager_SourceDetected;
      InteractionManager.SourceUpdated += InteractionManager_SourceUpdated;
      InteractionManager.SourceLost += InteractionManager_SourceLost;
      InteractionManager.SourcePressed += InteractionManager_SourcePressed;
      InteractionManager.SourceReleased += InteractionManager_SourceReleased;
      }
      
      void OnDestroy()
      {
      InteractionManager.SourceDetected -= InteractionManager_SourceDetected;
      InteractionManager.SourceUpdated -= InteractionManager_SourceUpdated;
      InteractionManager.SourceLost -= InteractionManager_SourceLost;
      InteractionManager.SourcePressed -= InteractionManager_SourcePressed;
      InteractionManager.SourceReleased -= InteractionManager_SourceReleased;
      }
      
      void InteractionManager_SourceDetected(SourceState state)
      {
      // Source was detected
      // state has the current state of the source including id, position, kind, etc.
      }
      
      void InteractionManager_SourceLost(SourceState state)
      {
      // Source was lost. This will be after a SourceDetected event and no other events for this source id will occur until it is Detected again
      // state has the current state of the source including id, position, kind, etc.
      }
      
      void InteractionManager_SourceUpdated(SourceState state)
      {
      // Source was updated. The source would have been detected before this point
      // state has the current state of the source including id, position, kind, etc.
      }
      
      void InteractionManager_SourcePressed(SourceState state)
      {
      // Source was pressed. This will be after the source was detected and before it is released lost or
      // state has the current state of the source including id, position, kind, etc.
      }
      
      void InteractionManager_SourceReleased(SourceState state)
      {
      // Source was released. The source would have been detected and pressed before this point. This event will not fire if the source is lost
      // state has the current state of the source including id, position, kind, etc.
      }
      
    Також з допомогою невеликого коду ми додали взаємодія зі згортком газети і твором орігамі. Якщо подивитися на об'єкт, а потім «натиснути» на нього, то відбувалося наступне:
    Об'єкт падав на віртуальний паперовий літачок, скочувався по ньому на реальний стіл, котився цього столу і падав на реальний підлогу і продовжував далі котитися з урахуванням всієї фізики руху! А також в кінці об'єкт може стукнутися про вашу стопу, якщо ви преградите об'єкту шлях.

  • Додавання звукового та музичного супроводу
    У HoloLens вбудовані вібраційні стерео навушники, за допомогою яких ви чуєте повноцінний 3D звук. Цей факт відкриває безмежні можливості відтворення звуків правдоподібною середовища.

    Адже коли об'єкти знаходяться поза нашої зони видимості, одним із способів, яким ми можемо сприймати те, що відбувається навколо нас, це звук. Для найкращого досвіду змішаної реальності аудіо движок HoloLens забезпечує звук шляхом симуляції 3D звуку з використанням напрямки, відстані і моделювання навколишнього середовища.


    Як додати просторовий звук в ваш проект:
    • Включення просторового звуку в UnityUnity просторовий звук включається за допомогою спеціального аудіо плагіна (Spatializer). Файли плагіна вже вбудовані в Unity, так що вам всього лише треба зайти в Edit > Audio > Spatializer і включити Microsoft HRTF.

      І все, ваш Unity проект тепер може використовувати просторовий звук (Spatial Sound).
    • Використання просторового звуку в UnityНаступні кроки допоможуть вам налаштувати ваш компонент Audio Source для Spatial Sound.

      • На панелі Hierarchy, виберіть game object, до якого прикріплений Audio Source.
      • інспектора, під компонентом Audio Source:
        1. Встановіть прапорець на опцію Spatialize.
        2. Виберіть значення Spatial Blend на 3D (чисельне значення 1).

        3. Для найкращого результату, відкрийте 3D Sound Settings і встановіть Volume Rolloff на Custom Rolloff.





      І все, ваш Unity проект тепер може використовувати просторовий звук (Spartial Sound).
    • Налаштування просторового звукуMicrosoft Spatial Sound плагін надає ряд додаткових параметрів, які можуть бути встановлені на кожну основу Аудіо источинка для активації додаткових налаштувань аудіо симуляції.

      Minimum gain (Мінімальне посилення)
      Мінімальне посилення застосовно (від -96 до +12 децибел) на будь-яку дистанцію. Початкове значення: -96 децибел.

      Maximum gain (Максимальне посилення)
      Максимальне посилення застосовно (від -96 до +12 децибел) на будь-яку дистанцію. Початкове значення: +12 децибел.

      Unity gain distance (Дистанція посилення Unity)
      Дистанція, метрів (від 0.05 до нескінченності), в якій посилення дорівнює 0 децибел. Початкове значення: 1 метр.

      Room Size (Розміри кімнати)
      Розміри кімнати, які можуть бути симулированы з допомогою плагіна. Приблизні розміри кімнат: маленька (від офісної кімнати до маленького конференц-залу), середня (великий конференц-зал) і велика (аудиторія). Також можна поставити значення none для імітації зовнішнього середовища (поза будівлею). За замовчуванням кімната маленька.

      Приклад
      The HoloToolkit for Unity provides a static class that makes setting the Spatial Sound settings easy. This class can be found in the HoloToolkit\SpatialSound folder and can be called from any script in your project. It is recommended that you set these parameters on each Audio Source component in your project. The following example shows selecting the medium room size for an attached Audio Source.
      
      AudioSource audioSource = gameObject.GetComponent<AudioSource>()
      
      if (audioSource != null) {
      SpatialSoundSettings.SetRoomSize(audioSource, SpatialMappingRoomSizes.Medium);
      }
      </source lang>
      <b>Прямий доступ до параметрів з Unity</b>
      Ще один спосіб змінити ці параметри вручну. Скопіюйте це скрипт SetHRTF.cs, який ви прикріпіть до кожного HRTF AudioSource. Після цього ви можете змінювати параметри за допомогою коду.
      <source lang="cs">
      using UnityEngine;
      using System.Collections;
      public class SetHRTF : MonoBehaviour {
      public enum ROOMSIZE { Small, Medium, Large, None };
      public ROOMSIZE room = ROOMSIZE.Small; // Small is regarded as the "most average"
      // defaults and docs from MSDN
      // https://msdn.microsoft.com/en-us/library/windows/desktop/mt186602(v=vs.85).aspx
      public float mingain = -96f; // The minimum gain limit applied at any distance from -96 to + 12
      public float maxgain = 12f; // The maximum gain applied at any distance from -96 to + 12
      public float unityGainDistance = 1; // The distance at which the gain is applied 0dB, from 0.05 to infinity
      public float bypassCurves = 1; // if > 0, will bypass Unity's volume attenuation and make a more accurate volume simulation automatically in the plugin
      AudioSource audiosource;
      void Awake()
      {
      audiosource = this.gameObject.GetComponent<AudioSource>();
      if (audiosource == null)
      {
      print("SetHRTFParams needs an audio source to do anything.");
      return;
      }
      audiosource.spread = 0; // we dont want to reduce our angle of hearing
      audiosource.spatialBlend = 1; // we do want to hear spatialized audio
      audiosource.SetSpatializerFloat(1, (float)room); // 1 is the roomsize param
      audiosource.SetSpatializerFloat(2, mingain); // 2 is the mingain param
      audiosource.SetSpatializerFloat(3, maxgain); // 3 is the maxgain param
      audiosource.SetSpatializerFloat(4, unityGainDistance); // 4 is the unitygain param
      audiosource.SetSpatializerFloat(5, bypassCurves ); // 5 is bypassCurves, which is usually a good idea
      }
      }
      

  • Додавання можливості голосового управління
    Голос — один з трьох способів введення в HoloLens. У HoloLens можливе використання всіх можливостей Cortana, повноцінного голосового управління. Ви просто дивіться на голограму і говорите команду — це головний принцип.
    Є кілька можливостей введення голоси:
    • Команда selectНавіть якщо ви не додали підтримку голосового управління в ваш додаток, користувачі можуть активувати ваші голограми допомогою команди «select». Ця команда доступна в будь-який момент використання HoloLens і споживає мінімум енергії.
    • CortanaМожна використовувати Кортану зі спеціальними командами для HoloLens (команда проговорюється після слів «Hey, Cortana»):
      • Go home — для виклику стартового меню
      • Launch -app-

      • Take a picture

      • Start recording
      • Stop recording
      • Increase the brightness
      • Decrease the brightness
      • Increase the volume
      • Decrease the volume
      • Shut down the device
      • Restart the device
      • Reboot the device
      • Go to sleep
      • What time is it?
      • What is my IP address?
      • Am I connected to the network?
      • Are you listening?
      • How much battery do I have left?
      • Call -contact- (потрібно HoloSkype)
      • Web search
    • ДиктуванняДля введення тексту диктування може бути набагато ефективніше, ніж тапи по повітрю. Коли голографічна клавіатура активно, ви можете переключиться в режим диктування з натискання на значок мікрофона.


    Для цього достатньо прописати кілька рядків, щоб HoloLens очікував від вас будь-якого звуку, і ввести англійською мовою, на яку команду необхідно реагувати, і яка буде реакція.
    Розберемо по порядку, як реалізувати голосове введення:
    • Конфігурація Unity для включення мікрофонаЩоб включити головою enter, вам потрібно декларувати можливість «Microphone» для вашого додатки:
      1. У редакторі Unity, зайдіть на сторінку «Edit > Project Settings > Player»
      2. Натисніть на вкладку «Windows Store»

      3. «Publishing Settings > Capabilities», встановіть прапорець на Microphone

    • Розпізнавання фразІснує два способи розпізнавання фраз: KeywordRecognizer і GrammarRecognizer. Вам необхідно вибрати якісь фрази яким способом слухати, обробити подію OnPhraseRecognized і додати дії для фраз.
      • KeywordRecognizer
        Підключаємо
        using UnityEngine.Windows.Speech;
        using System.Collections.Generic;
        using System.Linq;
        

        Потім додамо кілька полів у ваш клас для зберігання розпізнавання і словника keyword->action:
        KeywordRecognizer keywordRecognizer;
        Словник<string, System.Action> keywords = new Dictionary<string, System.Action>();
        

        Тепер додамо ключове слово (keyword) в словник (наприклад всередині методу Start()). У даному прикладі ми додамо ключове слово «activate»:
        //Додаємо ключові слова для розпізнавання
        keywords.Add("activate", () =>
        {
        // тут перебуватимуть дії, які активуються після розпізнавання фрази
        });
        

        Створіть KeywordRecognizer і задайте йому, що ми хочемо розпізнавати:
        keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());
        

        Підпишіться на подію OnPhraseRecognized:
        keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
        

        Приклад:
        private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
        {
        System.Action keywordAction;
        //Якщо ключове слово є в нашому словнику, то викликаємо keywordAction.
        if (keywords.TryGetValue(args.text, out keywordAction))
        {
        keywordAction.Invoke();
        }
        }
        

        Нарешті запускаємо розпізнавання:
        keywordRecognizer.Start();
        

      • GrammarRecognizer
        GrammarRecognizer призначений для тих випадків, коли ви задаєте власну граматику розпізнавання через SRGS.

        Після створення своєї граматики SRGS, і приміщення її в проект в папку StreamingAssets:
        <PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml
        

        Створюємо GrammarRecognizer і пропускаємо через нього наш файл SRGS:
        private GrammarRecognizer grammarRecognizer;
        grammarRecognizer = new GrammarRecognizer(Application.streamingDataPath + "/SRGS/myGrammar.xml");
        

        Підписуємося на подію OnPhraseRecognized:
        grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;
        

        Ви отримаєте інформацію у відповідності з вашої SRGS граматикою, яку ви можете без проблем обробити. Більшість необхідної інформації буде надано в масиві semanticMeanings.
        private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args)
        {
        SemanticMeaning[] meanings = args.semanticMeanings;
        // зробити щось
        }
        

        Запускаємо розпізнавання:
        grammarRecognizer.Start();
        

    • ДиктуванняПри використанні DictationRecognizer ваш додаток може очікувати будь-яке слово і конвертувати його в текст з подальшими діями.

      Потрібно всього пару кроків для реалізації DictationRecognizer:
      • Створення DictationRecognizer
        dictationRecognizer = new DictationRecognizer();
        

      • Обробка подій диктування
        Всього є 4 події диктування, на які ви можете підписатися і обробити для подальших дій:
        1. DictationResult
          Це подія активується, коли користувач призупиняє мова, наприклад в кінці речення. Тут нам повертається повністю розпізнана рядок.

          Спочатку підписуємося на подію DictationResult:
          dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
          

          Потім обробляємо виклик DictationResult:
          private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
          {
          // дії
          }
          
        2. DictationHypothesis
          Це подія активно протягом усієї промови користувача. Так як розпізнавач слухає мова, то він повертає текст того, що почув.

          Спочатку підписуємося на подію DictationHypothesis:
          dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
          

          Потім обробляємо виклик DictationHypothesis:
          private void DictationRecognizer_DictationHypothesis(string text)
          {
          // дії
          }
          
        3. DictationComplete
          Це подія активується, коли розпізнавач зупиняється, наприклад від виклику методу Stop(), таймауту, або іншої помилки.

          Спочатку підписуємося на подію DictationComplete:
          dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
          

          Потім обробляємо виклик DictationComplete:
          private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
          {
          // дії
          }
          
        4. DictationError
          Це подія активується, коли виникає помилка.

          Спочатку підписуємося на подію DictationError:
          dictationRecognizer.DictationError += DictationRecognizer_DictationError;
          

          Потім обробляємо виклик DictationError:
          private void DictationRecognizer_DictationError(string error, int hresult)
          {
          // дії
          }
          
      • Запуск DictationRecognizer
        dictationRecognizer.Start();

        Щоб завершити роботу розпізнавання необхідно відписатися від подій і застосувати метод Dispose():
        dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
        dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete ;
        dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis ;
        dictationRecognizer.DictationError -= DictationRecognizer_DictationError ;
        dictationRecognizer.Dispose();
        
    На академії в даному випадку ми запрограмували так, щоб після слів «Drop it» предмет, на який ти дивишся, падав на поверхню. (наприклад, згорток газети). У прикладі, наведеному вище, цим словом було «Activate».

  • «Занурення в матрицю» або включення Wireframe mode
    Напевно, після всього зробленого хотілося б дізнатися, а що бачить сам HoloLens? Яким чином він допомагає взаємодіяти з світом?
    На цьому етапі ми включили режим Wireframe і просто одягли HoloLens. Більше не потрібно ніяких слів – все це виглядало дуже надихають.



    Уявіть, він будує сітку світу, кожного об'єкта (на величину свого кута огляду) миттєво, буквально за мілісекунди! Це дуже феєрично!
    Потім ми зробили можливість перенесення столу з орігамі на будь-яку поверхню, хоч навіть в інший кінець залу академії.

  • «А якщо інший світ стане реальністю?»
    Кінець був не менш цікавим, нам сказали помістити спеціальний ассет на підлогу, велику чорну діру. По запуску вона провалювалася, і утворювався прохід в інший світ: з літаючими літачками, деревами, водою, землею і казковою атмосферою.

    Це настільки реально, що хотілося доторкнуться до цього світу, але, на жаль, реальний підлогу заважає це зробити.
    Потім запропонували помістити кому-небудь даний ассет на голову. Після цього весь той світ, який ми бачили в дірі, переходить у наш реальний світ. Вже озираючись навколо мимо вас пролітають паперові літачки, навколо дерева, хлюпається вода, і ви можете взаємодіяти з усім цим світом.


Після кожного етапу нам видавали «досягнення» за виконану роботу, що приносило ще більше позитиву в процес навчання розробки.

Одне відео з академії:


Під час академії у кожного учасника (з його згоди) брали інтерв'ю, запитували про відчуття, які проекти хотілося б розробити під HoloLens і багато інші питання. І можна було підписатися на участь в подальших дослідженнях з HoloLens.

По закінченні академії всі учасники отримують статус «Holographic Developer».

Що ж в цьому році?

На //Build 2016 також проводилася Holographic Academy, але тільки для представників преси та тих, хто передзамовив пристрій HoloLens Development Edition. Поки що програма замовлення доступна тільки розробникам з США та Канади, вартість самого пристрою 3000 $.



Якщо в минулому році головною темою було «персональні голограми», то цього разу – «загальні голограми», тобто доступні для взаємодії одночасно всім учасникам. Всі бачать єдину голограму і взаємодіють з нею.
Тут також крок за кроком Microsoft навчав учасників, як створювати голограми і взаємодіяти з ними на протязі ~4 годин.

В кінцевому підсумку виходила гра, в якій всі учасники, перебуваючи в єдиному світі, знищують ворогів за допомогою вогняних куль, всі взаємодіють з однієї і тієї ж голограмою і один з одним.


Як і минулого разу це не тільки інший унікальний досвід, але і корисне дослідження для Microsoft.

На закінчення теми Holographic Academy я дуже рекомендую вам все налаштувати, спробувати створити свої голограми і подивитися їх на емуляторі. А також пройти якийсь схожий шлях академії по даній посилання.

Xbox One Developer Mode
Як відомо, Microsoft нарешті представили Xbox One Developer Mode, що дозволяє тестувати UWP програми\ігри на Xbox One.

Дана можливість знаходиться в стадії Preview, для установки необхідно завантажити спеціальний додаток Dev Mode Activation.


На конференції //Build 2016 був цілий стенд The Garage, на якому можна було випробувати консолі, які сконвертированы в DevKit саме таким чином.


Що надає Developer Preview:
  • Доступ до 448 MB RAM (з 8 GB пам'яті Xbox One). Після виходу з Preview розробники будуть мати доступ до 1 GB RAM
  • Доступ до 2 ядер CPU по 1.75 GHz. Після виходу з Preview розробники будуть мати доступ до 4 ядер CPU
  • Доступ до 45% GPU. Після виходу з Preview дана цифра не зміниться
  • На даний момент UWP на Xbox One підтримує DirectX 11 Feature Level 10. DirectX 12 поки не підтримується
При цьому ви отримуєте повноцінні можливості з розробки та тестування ваших UWP додатків\ігор на Xbox One. Але є одна особливість: для того щоб випустити гру на Xbox One або використовувати всі потужності консолі, вам все одно треба буде зареєструватися в програмі ID@Xbox.

Як активувати Dev Mode

Перед активацією в першу чергу необхідно переконатися, що у вас консоль в режимі Retail. На жаль, не можна брати участь в двох Preview програмах одночасно.
Якщо ви Xbox One Preview програмі, то через додаток Xbox Preview Dashboard -> Registration вам треба вийти з Preview програми.
Цей процес може затягнутися, оскільки Preview оновлення повинно вийти в стадію Release, після цього вас переключать в Retail режим.

Тепер приступимо до Dev Mode:
  • Відкрийте Xbox One Store і знайдіть програму «Dev Mode Activation»
  • Скачайте додаток і зайдіть в нього
  • Далі уважно прочитайте всю інструкцію і, якщо готові, то натисніть Next і ще раз Next
  • Вам відкриється спеціальний код:


    Зайдіть на developer.microsoft.com/xboxactivate і авторизуйтесь в ваш Dev Center аккаунт.
  • Введіть код з консолі на даній сторінці і натисніть «Agree and activate». Варто зазначити, що ви маєте можливість зареєструвати лише кілька консолей в Dev режим.

Після введення коду ваш Xbox One почне процес активації і після цього консоль почне встановлювати необхідне програмне забезпечення.



Залишилося натиснути на «Switch and Restart».

На PC вам потрібно встановити:
  • Visual Studio 2015 Update 2. Не забудьте відзначити прапорець Universal Windows App Development Tools.
  • Windows 10 SDK preview build 14295 і вище. Ви можете його отримати з допомогою Windows Insider Program.


Фінал Imagine Cup United States
В цьому році на конференції проходив американський фінал технологічного конкурсу Imagine Cup для студентів. До цього проходили регіональні фінали по містах США, з яких обрані проекти перейшли в американський фінал.

В учасників була дуже насичена програма, починаючи від вітання в орендованому ресторані ввечері 29 квітня, зустріччю з Сатья Нанделла і майстер-класів крутих спікерів в інші дні; закінчуючи показом проектів в самому «серці» //Build, питчами та церемонією нагородження.

Я встиг вивчити кілька проектів Imagine Cup під час виставки на конференції.

Категорія «Гри»:

  • Проект «Nova» від команди Nova – гра, яка поєднує музичну планетарну симуляцію й ігровий процес в вражаючий досвід. У гравця є власна планета, і музика допомагає рости його планеті. В кінці гри у гравця виходить своя власна музична планета


    Досить незвичайна гра для планшетів. Є можливість вибору персонажа з своїм унікальним набором характеристик: Fire Water, Wood, Number, Capacity.
    Створена на движку Unity для Windows платформ.
    Сайт проекту

  • Проект «Spire of the Sullen» від команди Spite — фэнтезиный 2.5 D платформер з упором на навик володіння луком. Гравець використовує стріли для усунення ворогів і переміщення платформ. Головна мета: зійти на проклятий шпиль, темну вежу, наповнену невимовними жахами.



    За ігрового процесу гра нагадала мені Trine, якщо грати за персонажа Зою. Відразу помітно, чим надихалися.
    Створена на движку Unity для Windows платформ.
    Сайт проекту

  • Проект «Sundown» від команди Mild Beast Games — мультиплеєрна стелс гра, в якій гравці повністю невидимі в темряві. Єдиний спосіб побачити себе – потрапити під джерела світла, які розкидані по карті, або за допомогою пострілу (т. к. постріл теж генерує частинку світла).


    Чим більше гравців грає, тим гра стає цікавішою. У демці вже було багато різноманітних рівнів, можливо зроблять і редактор рівнів.
    Створена на движку Unity для Windows платформ.
    Сайт проекту

  • Проект «Gibraltar» від команди «Grim Goblin» – покрокова тактична гра, орієнтована на території. Як розповіли творці, головною метою гри є знищення всіх одиниць противника і захоплення його бази, а саме контроль його бази. Крім спроби контролю бази супротивника, необхідно захищати свою базу різними способами.


    Творці надихалися японської настільною грою «Advance Wars». Дуже незвичайна гра для США і Європи, але непогано грають на планшеті.
    Створена на движку Unity для Windows платформ.
    Сайт проекту

  • Для Microsoft Student Partners була виділена унікальна можливість представити свої проекти на //Build. На показі проектів вдалося представити 2 гри: SnakEscape — покрокова гра, перевертає концепцію оригінальної змійки з ніг на голову! Вам належить узяти на себе роль їжі і тікати від переслідуючих вас змійок;
    Lost Story: The last days of Earth — науково-фантастичний шутер з видом від першої особи у всесвіті Half-Life, який дозволить поглянути на події, що відбувалися між Half-Life і Half-Life 2.



Категорія «Соціальні проекти»:

  • Проект «B. E. S. T. Police Training simulator» від команди «BoloVR» – VR симулятор по навчанню де-ескалації конфліктів для поліції та звичайних мешканців міст. Система навчає психологічним жестам, тактильного контакту і багатьом іншим прийомам, які можуть допомогти прибрати конфлікт і загрозу.


    Сайт проекту


Категорія "Інновації":

  • Проект «Tactile» від команди «Tactile» – пристрій конвертирующее друкований текст у абетку Брайля. Пристрій складається з двох компонентів: сканера і 'дисплея' азбуки Брайля.
    Як тільки підносиш сканер до друкованого тексту, зображення сканується і конвертується в текст за допомогою Computer Vision API Microsoft Project Oxford. API повертає словник слів, які поділяються на літери в Python.


    Далі букви переходять в Arduino, де Arduino керує окремими серводвигун, які переміщують контакти Брайля вгору і вниз на підставі букв повідомлення.

    Є в загальній складності два блоки Брайля, і кожен блок має шість контактів Брайля. Два блоки Брайля чергують букви, щоб продемонструвати можливості відтворення всіх букв на завершальній версії дисплея Брайля.
    З 'дисплея' людей з проблемами зору може тактильно вважати вийшло слово.


    На фотографії – третій прототип пристрою, але на //Build був представлений вже четвертий прототип, більш портативний. Команда постійно взаємодіє з фокус-групами і спільнотами людей з проблемами зору, що дає їм цінну зворотний зв'язок.
    Сайт проекту

  • Проект «REST» від команди «No_Sleep»
    REST — Restoring Ecosystems Services Tool. Надає гнучку платформу, яка може бути адаптовані для допомоги у відновленні функцій екосистеми з використанням іноземних інвазійних видів рослин, На даний момент ведеться підтримка екосистеми о. Гаваї, але планують розширити на весь світ.


    Сайт проекту


Церемонія нагородження

Весь останній день проходила презентація проектів перед суддями, представниками індустрії. В завершенні дня була церемонія нагородження, в якій не тільки назвали переможців, але і переможці ще раз розповіли повністю про свій проект і показали його у дії.


Переможці
Категорія Команда Проект
Соціальні проекти BoloVR B. E. S. T. Police Training simulator
Ігри Mild Beast Games Sundown
Інновації HealthX HealthX
У HealthX технологія являє собою комплексне рішення для офтальмологічних клінік і їх пацієнтів, спрямованих на діагностику та лікування амбліопії, широко відомої як «ледачий очей». Амбліопія є найбільш поширеною причиною втрати зору серед дітей.

Кожна команда, що перемогла, отримала в якості призу 4000$ і пройшла в міжнародний півфінал, де буде визначено по одному проекту від кожної країни, які поїдуть на міжнародний фінал Imagine Cup.

Варто зазначити, що російський фінал Imagine Cup буде проходити вже 23 квітня у Москві в Digital October.

Спасибі за увагу!
Якщо з'являться які-небудь питання або щось хочеться дізнатися детальніше, обов'язково напишіть, завжди відповім. До нових зустрічей!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.