Le projet Talking Head, ou l'histoire du développement de logiciels pour un robot de téléprésence

Mon travail chez T-Systems a commencé avec un projet assez inhabituel. En fait, en grande partie à cause de ce projet, je suis venu dans l'entreprise. Lors de notre première conversation téléphonique, la tâche m'a été décrite comme suit: il est nécessaire de développer un système de traduction vocale pour un robot de téléprésence. J'ai entendu parler du robot de téléprésence pour la première fois, mais quoi de plus excitant que de développer pour les robots? Par conséquent, j'ai accepté presque immédiatement.



Mon premier appel au client. La tâche se pose à peu près comme ceci - nous voulons que le système de traduction vocale fonctionne pendant la conversation à travers ce robot de téléprésence, c'est-à-dire que la personne parle russe, et à l'autre extrémité du «fil», le robot reproduit son discours en allemand et vice versa. Immédiatement après une telle déclaration du problème a été suivie par la question de combien de personnes et de temps il faut pour développer cela, et combien cela coûtera. Nous avons convenu que je regarderai la documentation sur le robot (le robot lui-même n'était pas dans notre bureau), j'étudierai les systèmes de traduction et donnerai des estimations approximatives dans un mois, mais pour l'instant nous appellerons deux fois par semaine pour clarifier les détails.

La documentation du robot était pour le moins assez rare. Il était impossible de trouver autre chose que du matériel de marketing, alors j'ai écrit aux développeurs. Le système existant permettait de passer un appel vidéo à un robot de téléprésence à partir d'un navigateur Web et de contrôler ses mouvements dans un endroit éloigné, et l'idée évidente que j'avais était: est-il possible d'intégrer en quelque sorte un système de traduction vocale dans le système actuel?

En parallèle, il fallait comprendre comment le système de traduction peut être réalisé, et surtout, quelle sera la qualité de cette traduction, sera-t-elle acceptable pour le client? Par conséquent, en même temps que la correspondance avec les développeurs du robot, j'ai décidé de passer un appel avec le client et de communiquer avec lui via Translator. Translator est une application mobile de Microsoft qui peut traduire et traduire la voix dans différentes langues. L'application est gratuite, installée sur Android ou iOS et utilise le service approprié de Microsoft. Pendant l'appel, nous avons dû déterminer s'il était possible de mener une conversation de cette manière. Pour la pureté de l'expérience, je parlais russe et le client en allemand, c'est-à-dire qu'ils ne connaissaient absolument pas la deuxième langue, appelé par conférence téléphonique et parlant d'abord leur langue maternelle dans Translator,puis amené le mobile sur le combiné de la conférence. 

En général, cela ne semblait pas très pratique, mais une idée générale de la qualité de la traduction a donné (un lecteur curieux dirait qu'il était plus facile de téléphoner via Skype avec la traduction activée, mais pour une raison quelconque, cela ne nous était pas venu à l'esprit à l'époque). Après la conversation, nous avons décidé que le projet devait être et que la qualité pour le client était acceptable.

Ainsi, selon les résultats du premier mois de travail sur le projet, ce qui suit a été révélé. Le système existant pour le robot de téléprésence ne peut pas être modifié, car les développeurs du robot ne fournissent pas d'API pour cela. Cependant, il s'est avéré que le robot est une sorte de Segway auquel l'iPad se connecte, et il existe un SDK pour iOS, avec lequel vous pouvez contrôler le Segway. Autrement dit, vous devez écrire complètement votre propre système, sans compter sur l'intégration avec le système existant. La première représentation schématique d'un futur produit est apparue.

 

Après discussion avec le client, il a été décidé que 3 personnes travailleraient sur le projet - développeur iOS, développeurs backend et frontend. Nous diviserons le projet lui-même en étapes de 2 à 3 mois et fixerons un objectif pour chaque étape avec la conclusion d'un contrat séparé. À la fin de l'étape - une démonstration des résultats au client et à l'investisseur du projet. Il était important pour le client qu'à la nouvelle année, il y ait déjà un POC fonctionnel. Depuis que j'ai rejoint l'entreprise en juillet, les délais étaient assez serrés.

L'objectif de la première étape de 2 mois était de trouver deux autres développeurs, de choisir des services pour les appels vidéo et la traduction. À la fin de l'étape, il fallait montrer une application web simple qui vous permet de passer un appel vidéo avec un service de traduction intégré.

WebRTC est désormais largement utilisé pour passer des appels vidéo, ce qui est actuellement pris en charge par la plupart des navigateurs Web. Cependant, compte tenu des ressources limitées, nous n'avons pas osé écrire sur le WebRTC nu et avons choisi un fournisseur qui fournit le service en plus du WebRTC. Nous avons considéré deux services - TokBox et Voxeet. En conséquence, ils ont choisi TokBox. Il faut tenir compte du fait que ces services sont payants, donc, avec la description de l'architecture de l'application, nous avons effectué des calculs de coût pour une minute d'un appel vidéo avec traduction.



Nous avons également envisagé plusieurs services de traduction: TranslateYourWorld.com (il fournit une seule API qui unit plusieurs fournisseurs de traduction à la fois, y compris Google et Microsoft, mais la société est très petite et peu fiable, leur site ne s'est pas ouvert au moment de la rédaction de cet article), traduction Google Cloud, Microsoft Speech. En conséquence, nous avons opté pour le service MS Speech, car il dispose d'une API plus pratique, nous pouvons diffuser le flux audio vers le service via websocket et recevoir immédiatement des enregistrements audio avec traduction, ainsi qu'une bonne qualité de traduction. De plus, Microsoft est partenaire de notre entreprise, ce qui facilite la coopération avec eux.

Un développeur expérimenté et talentueux (Misha, bonjour!) Full stack m'a rejoint, et début octobre, notre petite équipe a clôturé avec succès l'étape suivante et a démontré une application Web simple qui, à l'aide des services TokBox et MS Speech, a permis d'organiser des appels vidéo avec traduction en plusieurs langues. y compris le russe et l'allemand.

L'étape suivante a été conçue pour 3 mois et son objectif était MVP avec un robot. A ce stade, le troisième et dernier développeur nous a rejoint. La pile technologique suivante a été choisie pour le projet: le backend - NodeJS + MongoDB, le web frontend sur ReactJS et Swift pour l'application iOS qui interagit avec le robot. Une histoire mérite une histoire distincte sur la façon dont j'ai conduit un robot d'Allemagne à Saint-Pétersbourg et expliqué d'abord à l'allemand, puis à nos agents des douanes, quel type d'appareil se trouve dans la boîte.





Au début, alors que nous n'avions pas de robot, l'application iOS nous permettait uniquement de passer un appel vidéo avec traduction. Lorsque le robot était avec nous, début décembre, nous avons rapidement ajouté l'envoi de signaux de contrôle au robot via une connexion d'appel déjà déboguée, et il est devenu possible de contrôler le robot en appuyant sur les flèches du clavier. Ainsi, en janvier, nous avons clôturé la troisième étape et montré ses résultats au client.

Le résultat de l'avant-dernière étape a été un système débogué avec la correction de tous les bogues critiques. Lors de l'appel d'un robot, l'opérateur peut voir la pièce à travers la caméra principale et le sol à travers la caméra secondaire (pour faciliter le contournement des obstacles). Le visage de l'opérateur est affiché sur l'écran du robot. Dans ce cas, la conversation peut être menée avec traduction dans l'une des 7 langues prises en charge, notamment le russe, l'allemand et certaines autres langues. Pendant la traduction, deux lignes de texte sont exécutées: la première est la parole reconnue et la seconde traduction dans une autre langue avec éclairage karaoké, de sorte qu'il est clair quelle partie de la phrase est actuellement jouée à l'autre extrémité de la connexion.



Enfin, à la dernière étape, nous avons ajouté un système de gestion des utilisateurs, des groupes d'utilisateurs, des statistiques et des rapports sur le nombre et la durée des appels. Ainsi, un an plus tard, nous avons mené à bien le projet et l'avons transféré au client. 

Au cours des travaux sur le projet, de nouvelles idées intéressantes sont nées. Par exemple, portez des lunettes de réalité virtuelle sur l'opérateur afin qu'il ait le plein effet d'immersion et la capacité de contrôler le robot en tournant la tête. 

Nous avons également mené une étude sur le thème de la création d'un robot autonome en utilisant le cadre ROS afin de «lui apprendre» à éviter les obstacles par lui-même et à se rendre du point A au point B ou rencontrer des invités à l'entrée du bureau. En général, le projet s'est avéré assez fascinant, et qui sait quelles autres fonctionnalités intéressantes nous ajouterons au système à l'avenir.


All Articles