El proyecto Talking Head, o la historia del desarrollo de software para un robot de telepresencia

Mi trabajo en T-Systems comenzó con un proyecto bastante inusual. En realidad, en gran parte debido a este proyecto, vine a la empresa. Durante nuestra primera conversación telefónica, se me describió la tarea de la siguiente manera: es necesario desarrollar un sistema de traducción de voz para un robot de telepresencia. Escuché sobre el robot de telepresencia por primera vez, pero ¿qué podría ser más emocionante que desarrollar para robots? Por lo tanto, acepté casi de inmediato.



Mi primera llamada al cliente. La tarea se plantea aproximadamente de esta manera: queremos que el sistema de traducción de voz funcione durante la conversación a través de este robot de telepresencia, es decir, la persona habla ruso y, en el otro extremo del "cable", el robot reproduce su discurso en alemán y viceversa. Inmediatamente después de tal declaración del problema fue seguida por la pregunta de cuánta gente y tiempo lleva desarrollar esto, y cuánto costará. Acordamos que miraré la documentación del robot (el robot en sí no estaba en nuestra oficina), estudiaré los sistemas de traducción y daré estimaciones aproximadas en un mes, pero por ahora llamaremos un par de veces a la semana para aclarar los detalles.

La documentación para el robot era bastante escasa, por decir lo menos. Era imposible encontrar otra cosa que materiales de marketing, así que escribí a los desarrolladores. El sistema existente hizo posible hacer una videollamada a un robot de telepresencia desde un navegador web y controlar sus movimientos en una ubicación remota, y la idea obvia que tuve fue: ¿es posible de alguna manera integrar un sistema de traducción de voz en el sistema actual?

Paralelamente, era necesario comprender cómo se puede hacer el sistema de traducción y, lo que es más importante, ¿cuál será la calidad de esta traducción? ¿Será aceptable para el cliente? Por lo tanto, simultáneamente con la correspondencia con los desarrolladores del robot, decidí hacer una llamada con el cliente y comunicarme con él a través de Translator. Translator es una aplicación móvil de Microsoft que puede traducir y traducir por voz en diferentes idiomas. La aplicación es gratuita, está instalada en Android o iOS y utiliza el servicio apropiado de Microsoft. Durante la llamada, tuvimos que averiguar si es posible mantener una conversación de esta manera. Por la pureza del experimento, hablé ruso y el cliente en alemán, es decir, ambos no sabían el segundo idioma, llamaron a través de una llamada de conferencia y primero hablaron su idioma nativo en Translator,y luego llevó el móvil al teléfono de la conferencia. 

En general, esto no parecía muy conveniente, pero dio una idea general de la calidad de la traducción (un lector curioso diría que era más fácil llamar por Skype con la traducción activada, pero por alguna razón no se nos ocurrió en ese momento). Después de la conversación, decidimos que el proyecto y la calidad para el cliente son aceptables.

Entonces, de acuerdo con los resultados del primer mes de trabajo en el proyecto, se reveló lo siguiente. El sistema existente para el robot de telepresencia no se puede modificar, ya que los desarrolladores del robot no proporcionan una API para esto. Sin embargo, resultó que el robot es una especie de Segway al que se conecta el iPad, y hay un SDK para iOS con el que puede controlar el Segway. Es decir, debe escribir su propio sistema por completo, sin contar con la integración con el existente. Ha aparecido la primera representación esquemática de un producto futuro.

 

Después de una discusión con el cliente, se decidió que 3 personas trabajarían en el proyecto: desarrolladores de iOS, desarrolladores de backend y frontend. Dividiremos el proyecto en etapas de 2 a 3 meses y estableceremos una meta para cada etapa con la conclusión de un contrato por separado. Al final de la etapa, una demostración de los resultados al cliente e inversor del proyecto. Era importante para el cliente que para el año nuevo ya hubiera un POC en funcionamiento. Desde que me uní a la compañía en julio, los plazos eran bastante ajustados.

El objetivo para la primera etapa de 2 meses fue establecer dos desarrolladores más, elegir servicios para videollamadas y traducción. Al final de la etapa, era necesario mostrar una aplicación web simple que le permitiera hacer una videollamada con un servicio de traducción integrado.

WebRTC ahora se usa ampliamente para hacer videollamadas, que actualmente es compatible con la mayoría de los navegadores web. Sin embargo, en vista de los recursos limitados, no nos atrevimos a escribir en el WebRTC simple y elegimos un proveedor que proporcione el servicio además de WebRTC. Consideramos dos servicios: TokBox y Voxeet. Como resultado, eligieron TokBox. Es necesario tener en cuenta que estos servicios se pagan, por lo tanto, junto con la descripción de la arquitectura de la aplicación, realizamos cálculos de costos durante un minuto de una videollamada con traducción.



También consideramos varios servicios para la traducción: TranslateYourWorld.com (proporciona una única API que une a varios proveedores de traducción a la vez, incluidos Google y Microsoft, pero la compañía es muy pequeña y poco confiable, al momento de escribir este artículo su sitio web no se abrió), traducción de Google Cloud, Microsoft Speech. Como resultado, nos decidimos por el servicio MS Speech, ya que tiene una API más conveniente, podemos transmitir la transmisión de audio al servicio a través de websocket e inmediatamente recibir grabaciones de audio con traducción, además de una buena calidad de traducción. Además, Microsoft es socio de nuestra empresa, lo que facilita la cooperación con ellos.

Un desarrollador experimentado y talentoso (Misha, hola!) Full stack se unió a mí, y a principios de octubre, nuestro pequeño equipo cerró con éxito la siguiente etapa y demostró una aplicación web simple que, utilizando los servicios TokBox y MS Speech, hizo posible organizar llamadas de video con traducción a varios idiomas. incluyendo ruso y alemán.

La siguiente etapa fue diseñada por 3 meses y su objetivo era MVP con un robot. En esta etapa, el tercer y último desarrollador se unió a nosotros. Se eligió la siguiente pila de tecnología para el proyecto: el backend: NodeJS + MongoDB, la interfaz web en ReactJS y Swift para la aplicación iOS que interactúa con el robot. Una historia merece una historia separada sobre cómo conduje un robot de Alemania a San Petersburgo y primero le expliqué al alemán, luego a nuestros funcionarios de aduanas, qué tipo de dispositivo hay en la caja.





En las primeras etapas, aunque no teníamos un robot, la aplicación iOS solo nos permitía hacer una videollamada con traducción. Cuando el robot estaba con nosotros, a principios de diciembre, agregamos rápidamente el envío de señales de control al robot a través de una conexión de llamada ya depurada, y fue posible controlar el robot presionando las flechas en el teclado. Así, en enero cerramos la tercera etapa y mostramos sus resultados al cliente.

El resultado de la penúltima etapa fue un sistema depurado con la corrección de todos los errores críticos. Al llamar a un robot, el operador puede ver la habitación a través de la cámara principal y el piso a través de la cámara secundaria (para que sea más fácil sortear obstáculos). La cara del operador se muestra en la pantalla del robot. En este caso, la conversación se puede llevar a cabo con la traducción a cualquiera de los 7 idiomas admitidos, que incluyen ruso, alemán y algunos otros idiomas. Durante la traducción, se ejecutan dos líneas de texto: la primera es un discurso reconocido y la segunda traducción a otro idioma con iluminación de karaoke, para que quede claro qué parte de la frase se está reproduciendo actualmente en el otro extremo de la conexión.



Y finalmente, en la última etapa, agregamos un sistema de administración de usuarios, grupos de usuarios, estadísticas e informes sobre el número y la duración de las llamadas. Por lo tanto, un año después, completamos con éxito el proyecto y lo transferimos al cliente. 

Durante el trabajo en el proyecto, surgieron nuevas ideas interesantes. Por ejemplo, use gafas de realidad virtual en el operador para que tenga el efecto de inmersión total y la capacidad de controlar el robot al girar la cabeza. 

También realizamos un estudio sobre el tema de la creación de un robot autónomo utilizando el marco ROS para "enseñarlo" a fin de evitar obstáculos por sí solo y llegar del punto A al punto B o encontrarse con invitados en la entrada de la oficina. En general, el proyecto resultó ser bastante fascinante, y quién sabe qué otras características interesantes agregaremos al sistema en el futuro.


All Articles