Time Pensa errado, Coda fofo, Testa fraco

Equipe PCT se apresentando! Estamos muito animados pra esse Hackaton :smiley:

2 curtidas

Por enquanto, estamos pensando sobre a seguinte ideia de aplicação:

  • Uma aplicação que gere legendas para vídeos, com o objetivo de criar maior acessibilidade para pessoas surdas
2 curtidas

Implementamos a aplicação e fizemos o deploy com Terraform.

O sistema consiste em alguns subsistemas:

  • API (Flask)
  • Worker (Celery)
  • Broker AMQP (RabbitMQ)
  • Banco de dados (Postgres)

Documentação do backend: pytasks
GitHub do backend:

GitHub do terraform e do frontend:

MagaluSubs

O MagaluSubs foi um projeto criado para o Hackaton MagaluCloud 24, com o objetivo de melhorar a acessibilidade a conteúdos em vídeo. O projeto consiste em um backend que permite baixar vídeos e gerar legendas usando WhisperAI.

Além disso, foi criado um frontend para inserir a URL de um vídeo e gerar as legendas.

Como o terraform entra nisso?

O terraform foi utilizado para fazer o deploy do backend na MagaluCloud. Inicialmente, testamos o deploy utilizando apenas uma VM e utilizamos o docker para rodar o backend.

Todavia, dada a arquitetura distribuída do backend (temos subsistemas de workers, message broker, API e banco de dados), é possível distribuir o projeto em várias máquinas ou, melhor, em containers rodando no Kubernetes e, conforme necessário, spawnar mais instâncias desses subsistemas caso o load seja muito alto.

A arquitetura do backend

O backend foi construído usando Python, Celery, RabbitMQ e Postgres. O processamento dos vídeos foi feito com yt-dlp e a transcrição usando o modelo WhisperAI, mais especificamente, a biblioteca GitHub - SYSTRAN/faster-whisper: Faster Whisper transcription with CTranslate2.

Basicamente, o funcionamento do backend segue o seguinte diagrama:

Temos workers, responsáveis por processar os vídeos, que são inscritos em uma fila AMQP. O cliente envia o request para a API para processar o vídeo, passando a URL do vídeo.

Em seguida, a API envia uma mensagem na fila e os workers recebem a mensagem.

Enquanto o vídeo é processado, é possível consultar o status do processo pela API. Após completado, o resultado com a transcrição em SRT fica disponível pela API.

O frontend

Visamos construir um frontend intuitivo e de fácil acesso, usando apenas HTML e CSS e JS.

A interface é simples, apenas um input onde o usuário pode inserir a URL do vídeo. Após clicar no botão, é enviado um request para o backend, e, após processado o vídeo, é possível baixar o SRT gerado.

Considerações sobre o Terraform

Infelizmente, não tivemos tempo suficiente para adicionar mais complexidade ao deploy no terraform. Fizemos apenas:

  • Uso do remote exec para fazer o deploy dos containers na VM usando docker compose
  • Configuração de rede (grupo de segurança e IPs)
  • Configuração de chaves (API key e SSH)

Tinhamos planejado fazer as seguintes coisas, para melhorar o deploy:

  • Separar cada módulo do backend em máquinas separadas
  • Configurar a rede de cada máquina para que cada parte pudesse se comunicar uma com a outra
  • Utilizar Kubernetes para fazer o escalamento do sistema de acordo com métricas de uso. Ex: se a fila estiver muito cheia, spawnar mais workers.
  • Além disso, implementar um load balancer para a API, e spawnar mais instâncias de API caso a load seja muito alta.

Se tivessemos mais algumas horas, provavelmente seria possível ao menos separar os subsistemas em máquinas diferentes e configurar a rede delas.

Considerações finais

Aprendemos muito com esse Hackaton, desde o frontend até backend e soluções para cloud.

O grupo não tinha contato prévio com Terraform ou Kubernetes, mas ao final do Hackaton, aprendemos a fazer o básico nessas tecnologias.

Foi uma experiência muito enriquecedora e agradecemos a MagaluCloud e a UFScar pela oportunidade! A infraestrutura do evento estava extraordinária, e a disponibilização dos recursos computacionais ajudou muito no aprendizado.

OBS: arquivo do terraform está na pasta backend/terraform no repositório do terraform+frontend.

GitHub do backend:

GitHub do terraform e do frontend:

1 curtida

Participantes:

  • José Guilherme Santos Riberto (Zé)
  • Rafael de Almeida (Boituva)
  • Breno Henrique Pelegrin da Silva (Pelegras)
1 curtida