Как избежать распространенных ошибок при работе с камерами и другими датчиками в общественных местах.

Еще в 2016 году я создал Kinectron, инструмент, который отправляет объемные и скелетные данные в онлайн с помощью Microsoft Kinect. С тех пор Kinectron стал широко использоваться студентами NYU ITP, особенно в шоу в конце семестра. Получив отзывы от студентов, я подумал, что было бы полезно написать небольшой пост с некоторыми советами по использованию Kinectron в общедоступных установках. Я специально писал о своем опыте работы с сенсором Kinect, но стоит помнить о советах при использовании любого сенсора, который будет реагировать на пользователей в общественном месте.

Совет №1: используйте Ethernet, а не Wi-Fi

Этот первый совет важен для любой установки, использующей локальную или общедоступную сеть для передачи данных датчика, например Kinectron. Проводные линии Ethernet гарантируют определенную полосу пропускания на каждом гнезде. Wi-Fi, с другой стороны, разделяет пропускную способность между всеми пользователями, подключенными к каждому маршрутизатору. Чем больше людей присоединяется к сети Wi-Fi, тем меньше пропускная способность у каждого пользователя.

Это распространенная ошибка, потому что Wi-Fi обычно будет стабильным во время настройки и тестирования, но как только несколько человек входят в комнату и присоединяются к сети, пропускная способность уменьшается, и тогда уже слишком поздно для устранения неполадок.

Лучший способ избежать этого - занять жесткую позицию в сети. Помните, что когда вы подключаетесь к Ethernet, вы также должны выключить Wi-Fi. Таким образом вы предотвратите переключение вашего компьютера между сетями во время работы вашего проекта.

Если вы работаете с Kinectron, убедитесь, что вы подключили как компьютер, на котором запущен ваш сервер, так и компьютер, на котором запущен ваш клиентский код. Если у вас есть доступ только к одному порту Ethernet, отдайте приоритет компьютеру, на котором работает сервер Kinectron.

Совет № 2: Контролируйте свое окружение

Важно потратить время на настройку вашей установки, чтобы свести к минимуму попадание непреднамеренных данных в диапазон действия вашего датчика. Это правда, что невозможно полностью контролировать среду установки (особенно на выставке ITP!), Но есть определенные способы минимизировать воздействие.

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

При работе с Kinect убедитесь, что вы располагаете свою установку так, чтобы Kinect был обращен в сторону от толпы или места с интенсивным движением людей. Kinect отслеживает до шести тел, поэтому, если вы намеренно не ищете хаоса, не позволяйте ему смотреть прямо в толпу - хороший способ свести к минимуму неожиданные результаты. Отсюда используйте все, что вам доступно - шторы, ширмы, ленту, вывески или другие искусственные барьеры, - чтобы помочь пользователям узнать, как лучше всего перемещаться по вашей установке. Поразительно, насколько эффективными могут быть несколько полосок клейкой ленты на полу, чтобы не допустить попадания нежелательных пользователей перед камерой или датчиком, работающим в режиме реального времени.

Совет № 3: будьте конкретны в том, что вы отслеживаете (и не отслеживаете)

Каждый датчик имеет разные возможности и требования, но всегда есть способ отточить нужные данные и отложить в сторону данные, которые могут помешать.

Например, при использовании Kinectron вы можете использовать идентификаторы отслеживания игроков, чтобы отслеживать определенных людей и игнорировать других. Допустим, у вас есть инсталляция для одного человека. Вы можете создать функцию, которая ищет игрока при нажатии клавиши. Как только он находит одного игрока, он блокирует этот идентификатор отслеживания и игнорирует всех, кто появляется на сцене. При следующем нажатии клавиши программа освобождает плеер и ищет новый.

Вот пример кода для отслеживания нажатия клавиши одним игроком с помощью Kinectron в p5.js.

// create a boolean to indicate if we're tracking a player
let tracking = false;
// create a variable to hold ID of current player
let playerID = null;
function keyPressed() {
  // press enter to reset tracking to false 
  // this will allow you to look for a new player
  if (keyCode == ENTER) tracking = false;
}
// this function runs each time body data is received
function trackBody(allbodies) {
  // get all bodies
  let bodies = allbodies.bodies;
  // kinect tracks up to six bodies
  // let's loop through each of the six bodies
  for (let i = 0; i < bodies.length; i++) {
    
    // if we are not yet tracking a player/body 
    // and we find a tracked body
    // set tracking boolean to true
    // and set the playerID to the trackingId of the current body
    if (tracking == false && bodies[i].tracked == true) {
      tracking = true;
      playerID = bodies[i].trackingId;
    }
    // if we are tracking and the current tracked body 
    // is the same as the player ID
    // then draw the joints of the body  
    if (tracking == true && bodies[i].trackingId == playerID) {
      // iterate through all of the joints and draw them to canvas
      for(let j = 0; j < body.joints.length; j++) {   
          joint = body.joints[j];
          drawJoint(joint);
      }
    }
  }
}

Вывод

Каждый раз, когда вы пишете программу, вы принимаете 10, 100, может быть, 1000 (в зависимости от размера вашей программы) решений, которые повлияют на то, как кто-то взаимодействует с вашей работой.

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

Я написал эту статью как ответ на вопросы творческих программистов, использующих программное обеспечение с открытым исходным кодом Kinectron. Kinectron - это одноранговый сервер в реальном времени для Kinect V2, который делает скелетные и объемные данные доступными в браузере через простой в использовании API.

Kinectron был разработан в рамках гранта Google Experiments in Storytelling (xStory) в рамках программы интерактивных телекоммуникаций Нью-Йоркского университета (ITP). В настоящее время он находится в стадии разработки. Пожалуйста, свяжитесь с нами, если вы хотите внести свой вклад.

Большое спасибо Аарону Монтойя-Морага за все полезные идеи и за его непоколебимую приверженность творческим инструментам с открытым исходным кодом.