Equipe PCT se apresentando! Estamos muito animados pra esse Hackaton
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
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 - brenopelegrin/pytasks: pytasks is a complete and customizable microservice for running computational tasks on remote machines and viewing its results through an API.
- GitHub - brenopelegrin/pytasks-subtitles: Subtitles pytasks taskpack
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 usandodocker 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 - brenopelegrin/pytasks: pytasks is a complete and customizable microservice for running computational tasks on remote machines and viewing its results through an API.
- GitHub - brenopelegrin/pytasks-subtitles: Subtitles pytasks taskpack
GitHub do terraform e do frontend:
Participantes:
- José Guilherme Santos Riberto (Zé)
- Rafael de Almeida (Boituva)
- Breno Henrique Pelegrin da Silva (Pelegras)