O projeto Talking Head ou a história do desenvolvimento de software para um robô de telepresença

Meu trabalho na T-Systems começou com um projeto bastante incomum. Na verdade, em grande parte por causa desse projeto, eu vim para a empresa. Durante nossa primeira conversa telefônica, a tarefa foi descrita para mim da seguinte maneira: é necessário desenvolver um sistema de tradução de fala para um robô de telepresença. Ouvi falar de robô de telepresença pela primeira vez, mas o que poderia ser mais emocionante do que desenvolver para robôs? Portanto, eu concordei quase imediatamente.



Minha primeira ligação para o cliente. A tarefa é apresentada aproximadamente dessa maneira - queremos que o sistema de tradução de fala funcione durante a conversa através desse robô de telepresença, ou seja, a pessoa fala russo e, do outro lado do fio, o robô reproduz sua fala em alemão e vice-versa. Imediatamente após essa afirmação do problema ter sido seguida pela pergunta de quantas pessoas e tempo são necessários para desenvolvê-lo e quanto custará. Concordamos em examinar a documentação do robô (o robô em si não estava em nosso escritório), estudar os sistemas de tradução e fazer estimativas aproximadas em um mês, mas, por enquanto, ligaremos algumas vezes por semana para esclarecer os detalhes.

A documentação para o robô era bastante escassa, para dizer o mínimo. Era impossível encontrar algo além de materiais de marketing, então escrevi para os desenvolvedores. O sistema existente tornou possível fazer uma chamada de vídeo para um robô de telepresença a partir de um navegador da Web e controlar seus movimentos em um local remoto, e a idéia óbvia que eu tinha era: é possível de alguma forma integrar um sistema de tradução de fala no sistema atual?

Paralelamente, era necessário entender como o sistema de tradução pode ser feito e, o mais importante, qual será a qualidade dessa tradução, será aceitável para o cliente? Portanto, simultaneamente à correspondência com os desenvolvedores do robô, decidi fazer uma ligação com o cliente e me comunicar com ele através do Translator. O Translator é um aplicativo móvel da Microsoft que pode traduzir e traduzir por voz em diferentes idiomas. O aplicativo é gratuito, instalado no Android ou iOS e usa o serviço apropriado da Microsoft. Durante a ligação, tivemos que descobrir se é possível conduzir uma conversa dessa maneira. Pela pureza do experimento, eu falava russo e o cliente em alemão, ou seja, ambos não conheciam o segundo idioma, ligavam por meio de uma teleconferência e primeiro falavam o idioma nativo no Translator,e depois trouxe o celular para o telefone da conferência. 

Em geral, isso não parecia muito conveniente, mas era uma ideia geral da qualidade da tradução (um leitor curioso diria que era mais fácil telefonar pelo Skype com a tradução ativada, mas por algum motivo isso não ocorreu na época). Após a conversa, decidimos que o projeto e a qualidade do cliente são aceitáveis.

Portanto, de acordo com os resultados do primeiro mês de trabalho no projeto, o seguinte foi revelado. O sistema existente para o robô de telepresença não pode ser modificado, pois os desenvolvedores do robô não fornecem uma API para isso. No entanto, verificou-se que o robô é um tipo de Segway ao qual o iPad se conecta e existe um SDK para iOS, com o qual você pode controlar o Segway. Ou seja, você deve escrever seu próprio sistema completamente, sem contar com a integração com o existente. A primeira representação esquemática de um produto futuro apareceu.

 

Após uma discussão com o cliente, foi decidido que três pessoas trabalhariam no projeto - desenvolvedor iOS, desenvolvedor de back-end e front-end. Dividiremos o projeto em etapas de 2 a 3 meses e definiremos uma meta para cada etapa com a conclusão de um contrato separado. No final da etapa - uma demonstração dos resultados para o cliente e investidor do projeto. Era importante para o cliente que, no ano novo, já houvesse um POC em funcionamento. Desde que entrei na empresa em julho, os prazos eram bastante apertados.

A meta para o primeiro estágio de dois meses foi estabelecida para encontrar mais dois desenvolvedores, escolher serviços para videochamadas e tradução. No final do estágio, era necessário mostrar um aplicativo da web simples que permite fazer uma chamada de vídeo com um serviço de tradução integrado.

O WebRTC agora é amplamente usado para fazer chamadas de vídeo, atualmente suportadas pela maioria dos navegadores da web. No entanto, em vista dos recursos limitados, não ousamos escrever no WebRTC simples e escolhemos um provedor que fornece o serviço sobre o WebRTC. Consideramos dois serviços - TokBox e Voxeet. Como resultado, eles escolheram o TokBox. É necessário levar em consideração que esses serviços são pagos; portanto, juntamente com a descrição da arquitetura do aplicativo, realizamos cálculos de custo por um minuto de uma vídeo chamada com tradução.



Também consideramos vários serviços de tradução: TranslateYourWorld.com (fornece uma única API que une vários provedores de tradução de uma só vez, incluindo Google e Microsoft, mas a empresa é muito pequena e não confiável, seu site não foi aberto no momento da redação deste artigo), tradução do Google Cloud, Microsoft Speech. Como resultado, paramos no serviço MS Speech, uma vez que possui uma API mais conveniente, podemos transmitir o fluxo de áudio para o serviço via websocket e imediatamente receber gravações de áudio com tradução, além de boa qualidade de tradução. Além disso, a Microsoft é parceira de nossa empresa, o que facilita a cooperação com eles.

Um desenvolvedor experiente e talentoso (Misha, olá!) Juntou-se a mim e, no início de outubro, nossa pequena equipe fechou com êxito o próximo estágio e demonstrou um aplicativo Web simples que, usando os serviços TokBox e MS Speech, possibilitou organizar chamadas de vídeo com tradução para vários idiomas incluindo russo e alemão.

A próxima etapa foi projetada por 3 meses e seu objetivo era MVP com um robô. Nesta fase, o terceiro e o último desenvolvedor se juntaram a nós. A seguinte pilha de tecnologia foi escolhida para o projeto: o back-end - NodeJS + MongoDB, o front-end da web no ReactJS e Swift para o aplicativo iOS que interage com o robô. Uma história merece uma história separada sobre como eu dirigi um robô da Alemanha para São Petersburgo e expliquei primeiro para o alemão e depois para nossos funcionários da alfândega que tipo de dispositivo é esse na caixa.





Nos primeiros estágios, embora não tivéssemos um robô, o aplicativo iOS só nos permitiu fazer uma videochamada com tradução. Quando o robô estava conosco, no início de dezembro, adicionamos rapidamente o envio de sinais de controle ao robô por meio de uma conexão de chamada já depurada, e tornou-se possível controlá-lo pressionando as setas do teclado. Assim, em janeiro, encerramos a terceira etapa e demonstramos seus resultados ao cliente.

O resultado do penúltimo estágio foi um sistema depurado com a correção de todos os bugs críticos. Ao chamar um robô, o operador pode ver a sala através da câmera principal e o chão através da câmera secundária (para facilitar a contornar obstáculos). O rosto do operador é exibido na tela do robô. Nesse caso, a conversa pode ser conduzida com tradução para qualquer um dos sete idiomas suportados, incluindo russo, alemão e alguns outros idiomas. Durante a tradução, duas linhas de texto são executadas: a primeira é a fala reconhecida e a segunda tradução para outro idioma com iluminação de karaokê, para que fique claro qual parte da frase está sendo reproduzida no outro extremo da conexão.



E, finalmente, na última etapa, adicionamos um sistema de gerenciamento de usuários, grupos de usuários, estatísticas e relatórios sobre o número e a duração das chamadas. Assim, um ano depois, concluímos o projeto com sucesso e transferimos para o cliente. 

No decorrer do trabalho no projeto, surgiram idéias novas e interessantes. Por exemplo, use óculos de realidade virtual no operador para que ele tenha o efeito de imersão total e a capacidade de controlar o robô girando a cabeça. 

Também conduzimos um estudo sobre a criação de um robô autônomo usando a estrutura ROS para “ensiná-lo” a evitar obstáculos por conta própria e ir do ponto A ao ponto B ou encontrar convidados na entrada do escritório. Em geral, o projeto acabou sendo bastante fascinante e quem sabe quais outros recursos interessantes adicionaremos ao sistema no futuro.


All Articles