Experiencia personal usando sensores de proximidad en desarrollo

Buen dia a todos! Mi nombre es Maxim, soy un desarrollador líder en Habilect.

En la vida de cada programador, llega un momento en el que quieres compartir en qué gastas 2/3 de tu vida: una descripción del trabajo y los proyectos :)

Históricamente, el campo principal de mi actividad fue el desarrollo de sistemas basados ​​en sensores sin contacto.

Durante casi 7 años, se han probado muchas opciones: Microsoft Kinect (tanto la versión para XBOX 360 como Kinect One para Windows), Intel RealSense (comenzando con la primera versión disponible en el mercado: F200, continuando el SR300 y, por el momento, la última lanzada - D435), Orbbec (Astra y Persee), Leap Motion (que incluso escribí aquí sobre el procesamiento de gestos personalizados). Naturalmente, no podría funcionar sin cámaras web normales: análisis de imágenes, OpenCV, etc.

Los que están interesados, pido un gato.

Por si acaso, un breve programa educativo sobre este tema de sensores sin contacto:

Imagine una situación que necesita para realizar un seguimiento programático de las acciones de una persona en particular.

Por supuesto, puede usar una cámara web normal, que se puede comprar en cualquier tienda. Pero con este caso de uso, debe analizar las imágenes, que requieren muchos recursos y, francamente, son importantes (el problema de asignación de memoria en el mismo OpenCV sigue siendo relevante).

Por lo tanto, es más óptimo reconocer a las personas no como parte de la imagen de la cámara, sino como un "esqueleto" obtenido por un sensor especializado que utiliza telémetros activos. Esto le permite rastrear a una persona (o varias personas) y trabajar con partes individuales del "esqueleto".

En la terminología del SDK de Microsoft Kinect, estas partes individuales se denominan "articulaciones". En el caso de un sensor por defecto, su estado se actualiza cada 30 ms.

Cada articulación contiene:

  • datos sobre la posición del punto esquelético correspondiente en el espacio (coordenadas X, Y y Z) en relación con el eje óptico del sensor,
  • estado de la visibilidad del punto (determinada, no determinada, posición calculada por el sensor),
  • cuaternión de rotación con respecto al punto anterior

La figura muestra las articulaciones procesadas por Kinect v2 utilizando el Hombre de Vitruvio de Leonardo Da Vinci como ejemplo.

KinectV2Joints

Por lo tanto, al trabajar con un sensor sin contacto, el desarrollador tiene la oportunidad de analizar las acciones de una persona o grupo de personas (por ejemplo, con Kinect es posible rastrear simultáneamente 6 personas en un marco). Y qué hacer con la matriz de datos recibida depende de la aplicación específica.

Las aplicaciones para tales sensores son infinitas. Las principales áreas de mi trabajo son publicidad y medicina.

Considere la dirección de publicidad . Ahora, para la operación de stands publicitarios interactivos, se necesitan varios módulos básicos, a saber:

  1. Materiales publicitarios en sí
  2. Recopilación de estadísticas sobre el grado de atracción de la atención de los visitantes a la visualización de un anuncio en particular, que es interesante para el anunciante.
  3. Posibilidad de configuración remota de un stand publicitario.
  4. El atractivo efecto que distingue un soporte interactivo de los televisores convencionales con comerciales y pancartas impresas.

Si todo está claro con los materiales publicitarios, entonces se utilizan sensores para recopilar estadísticas. Por ejemplo, ¿algún anunciante está interesado en cuántas personas prestaron atención a su anuncio? Hombres, mujeres o niños? ¿A qué hora se detienen con mayor frecuencia? ¿Cuánto tiempo miran los anuncios, y no solo se paran al lado del soporte, cavando en el teléfono? Usando un sensor, esto puede ser rastreado y hacer un informe en una forma conveniente para el anunciante.

Para la configuración remota, se utiliza el modelo simple y obvio más probable: Google Calendar. Cada calendario está conectado a un stand específico y, al estar en San Petersburgo, puede administrar stands en cualquier parte del mundo.

Y el efecto de atracción es la funcionalidad misma, por lo que el soporte se llama interactivo. Puede hacer un juego dirigido por una persona con el logotipo del patrocinador, obtener un sonido de bienvenida cuando una persona aparece en el campo de visión del sensor, hacer un código QR con un cupón de descuento en la tienda del anunciante si, por ejemplo, una persona se paró un minuto y vio un anuncio. Las opciones están limitadas principalmente por la fantasía, y no por la tecnología.

¿Por qué usar sensores en medicina ? La respuesta a esta pregunta es simple: el costo de los exámenes y la rehabilitación se reduce manteniendo la precisión.

Uno de los ejemplos sorprendentes es el desarrollo en el campo de la estabilometría, la ciencia de las desviaciones del centro de gravedad al caminar, que afecta la postura, la columna vertebral y la función muscular adecuada. Puede ir a centros especiales para simuladores especiales, que es un procedimiento muy costoso que, sin embargo, no siempre se proporciona. Y puede comprar un sensor y un software para el hogar, conectarse a un televisor y realizar pruebas de diagnóstico, cuyos resultados se envían automáticamente a su médico.

Otro ejemplo es la rehabilitación en el hogar. Para nadie es un secreto que existen dos problemas principales en la rehabilitación: la costosa llamada de un médico a la casa (lo que debe hacerse varias veces a la semana) y la renuencia de una persona rehabilitada a realizar ejercicios similares durante mucho tiempo. Para esto, se desarrollaron varios postulados básicos del sistema, a saber:

  1. Recopilación remota de programas de rehabilitación por un médico para el monitoreo remoto de la implementación. Por ejemplo, un médico de San Petersburgo puede controlar de forma remota el curso de los ejercicios prescritos para un paciente de Vladivostok y, si es necesario, cambiar los ejercicios, aumentar o disminuir la complejidad e intensidad de las clases, estudiar estadísticas en tiempo real, etc.
  2. Proceso de ejercicio gamificado. Si los simuladores modernos se centran principalmente en realizar movimientos básicos para desarrollar músculos y articulaciones dañados, entonces el sistema de rehabilitación interactivo le permite realizar ejercicios, literalmente, sin esfuerzo. Por ejemplo, con la ayuda del conocido Tetris, que, en lugar de presionar los botones, está controlado por los movimientos prescritos por el médico (levantando la mano izquierda, moviendo la pierna derecha, inclinando la cabeza hacia adelante, etc.).
  3. Implementación de criterios de rendimiento del ejercicio. Cuando trabaja junto con el paciente, el médico supervisa el ejercicio con la ayuda de consejos y ayuda táctil (por ejemplo, no puede doblar el brazo por el codo cuando separa el brazo; esto afecta el funcionamiento de la articulación del hombro). El sistema interactivo estima los ángulos relativos entre las articulaciones y, en el caso de exceder el rango aceptable, hace una advertencia al usuario y no tiene en cuenta la ejecución incorrecta del ejercicio.

Tal sistema le permite reducir tanto el tiempo (tanto el médico como el paciente, para viajar entre ellos) y mantener la precisión de los ejercicios necesarios para el progreso.

Para la implementación de proyectos utilizando la pila de tecnología .NET. Yo trabajo solo en Windows :). Sí, debido a esto, tuve que escribir envoltorios para el SDK nativo varias veces (como ejemplo vívido, hice adaptadores para el SDK Intel RealSense, ya que en ese momento solo era código no administrado). Costó una cantidad considerable de tiempo, nervios y canas, pero permitió conectar la biblioteca a varios proyectos desarrollados en la plataforma Windows.

Vale la pena señalar que los sensores principales (Kinect y RealSense) requieren una resolución x64 para su desarrollo.

Para simplificar el trabajo de las aplicaciones del cliente, se implementó un servicio separado, trabajando con un sensor, empacando datos en un formato conveniente para nosotros y enviando datos a los suscriptores usando el protocolo TCP. Por cierto, esto nos permitió crear un sistema que funciona con varios sensores, lo que puede mejorar significativamente la precisión del reconocimiento.

KinectMultiSensorModel
El diagrama simplificado muestra los beneficios de usar múltiples sensores para rastrear un objeto. Los puntos azules (juntas) están determinados de manera estable por el primer y segundo sensor, verde, solo por el segundo. Naturalmente, la solución desarrollada se implementa bajo el "modelo N-sensor".

KinectMultiSensorWorkflow
En el diagrama anterior se presenta un proceso detallado de procesamiento de datos de varios sensores.

Con casi cualquier desarrollo, uno de los criterios principales para un artista intérprete o ejecutante es el interés. Después, durante varios años seguidos, implementé el mismo tipo de aplicación web en ASP.NET y PHP, quería algo nuevo y más, digamos, inteligente. En el desarrollo web (con raras excepciones), todo ya ha sido inventado. Bien sitio, buen servicio, buena base de datos. En el caso de trabajar con sensores, siempre surgen tareas interesantes y controvertidas, por ejemplo, "¿cómo transmitiría el video en HD desde el sensor a través de TCP para que esto no cuelgue el sistema?" (un ejemplo de la vida, aunque se hizo hace mucho tiempo). Y es difícil predecir que se necesitará lo siguiente para mejorar y desarrollar el sistema. Está claro que hay un sprint de desarrollo principal donde se describen mejoras globales y planificadas previamente. Pero tales subtareas locales son una de las más interesantes en el oficio de un programador.

Tal trabajo definitivamente no es rutina. Si alguien está interesado en aprender con más detalle, o si alguien quiere saber por dónde empezar en esta área, estoy abierto a la comunicación. Listo para responder cualquier pregunta :) ¡Y que la fuerza te acompañe!

Source: https://habr.com/ru/post/es430418/


All Articles