API Client criado para visualizar fotos e vídeos de doguinhos e gatinhos. O objetivo é praticar diversos conceitos da linguagem e padrões de projeto, além de descontrair com imagens e vídeos engraçados durante a quarentena. O padrão de projeto escolhido para o desenvolvimento é o MVC (Model-View-Controller), implementado em Python.
edit: Infelizmente a API que seria utilizada para visualizar os gatinhos parou de funcionar durante o desenvolvimento, portanto foi substituída por outra responsável por visualizar raposas! Em respeito aos gatinhos que seriam mostrados e eram muito legais, as referências visuais a eles serão mantidas no repositório.
As API's utilizadas neste projeto foram a random.dog/ e aws.random.cat/, que disponibilizam acesso gratuito e sem registro. Nessas API's é possível realizar requisições que retornam links de vídeos e fotos de gatos e cachorros aleatórios. Na maioria das vezes são imagens engraçadas e divertidas de assistir, por isso é perfeito para o objetivo desse projeto. Os links são processados e as imagens e vídeos baixados para que os resultados sejam visualizados na tela. Diversas funcionalidades como utilização do teclado são utilizados para passar as imagens e oferecer uma experiência mais fácil. A velocidade em que as imagens aparecem dependem diretamente da velocidade da internet do usuário.
Sumário
- Introdução
- Instalando pacotes
- Padrão Model-View-Controller
- To-Do List da Aplicação
- Uso do API Client
- Teste na sua máquina sem precisar do python
Instalando pacotes
Para instalar os pacotes utilizados no projeto, basta ter o python 3 e pip instalado e utilizar o comando a seguir na pasta do projeto:
pip install -r requirements.txt
- requests é utilizado para realizar todas as requisições à API's citadas na introdução
- numpy é utilizado para fazer as transformações da imagem em array, para que todas as informações dos pixels (RGB) sejam armazenadas de uma forma que o opencv consiga ler
- open_cv carrega as imagens e vídeos para visualização na tela.
AnimalModel
A implementação do AnimalModel consiste em realizar as requisições para as API's e tratar dados como tipo de arquivo, se é imagem, vídeo, gif. Cada classe (Cachorro e Gato) possui suas próprias requisições, a fim de resolver as particularidades de cada tipo de dado que é retornado. Além disso, lança exceções para diversos problemas que podem ocorrer no processo, seja pelo usuário ou pela API.
AnimalView
A implementação do AnimalView consiste apenas em organizar a visualização dos dados retornados pelo AnimalModel. A visualização deve ser feita de forma clara para o usuário, a fim de oferecer uma experiência boa para quem utiliza. Atualmente toda a visualização é feita utilizando o Opencv, utilizando a janela padrão de visualização. Com a classe de visualização separada o projeto se torna mais modularizado, com responsabilidades independentes, tornando mais fácil futuras manutenções e melhorias.
AnimalController
A implementação do AnimalControl é feita para que o usuário tenha acesso aos métodos para o uso da API como um cliente. Estes métodos coletam os dados necessários do usuário, invoca o model para tratá-los e organizar os dados, depois utiliza esses resultados para invocar o view e exibir os dados para o usuário. Essa orquestração é feita apenas pelo controller, ao qual o usuário tem contato. Nele também são feitos os tratamentos de exceção, simplificando ainda mais o retorno para o usuário verificar e realizar ações a respeito.
Aqui serão apresentadas as próximas ideias a serem implementadas para que o projeto tenha cada vez mais funcionalidades.
- Visualiza fotos de doguinhos
- Visualiza vídeos de doguinhos
- Visualiza fotos e vídeos de doguinhos
- Ajuste de dimensão
- Fotos
- Videos
- Visualizar fotos de raposinhas
- Salvar fotos e vídeos que gostou
edit: Todos os itens da lista foram concluídos durante a live e algumas pequenas melhorias após o final do projeto, com o objetivo de garantir o funcionamento sem erros.
Versão do Python que funcionará: Python 3.x
A versão final da aplicação oferece 4 opções quando o main.py
é executado:
- Visualizar apenas fotos de doguinhos
- Visualizar apenas vídeos de doguinhos
- Visualizar fotos e vídeos de doguinhos
- Visualizar apenas fotos de raposas
Em todas elas os seguintes comandos são válidos:
- Pressionar letra 's' para salvar foto ou vídeo
- Pressiocar ESC para encerrar aplicação
- Pressionar qualquer outra letra para carregar próxima foto ou vídeo
1. Visualizando apenas fotos
main.py
python main.py
> Escolha opção de fotos
Pressione letra 'ESC' para fechar a visualização
Pressione a letra 's' para salvar a foto
Pressione qualquer outra tecla para ver mais fotos
2. Visualizando apenas vídeos
main.py
python main.py
> Escolha opção de fotos
Pressione letra 'ESC' para fechar a visualização
Pressione a letra 's' para salvar o vídeo
Pressione qualquer outra tecla para ver mais fotos
Teste na sua máquina sem precisar do python
Utilizando a biblioteca pyinstaller foi possível realizar um build para criar um executável do protótipo apresentado, a fim de que possa ser executado em qualquer máquina com Windows ou Linux.
Executando no Windows
Download do executável para Windows
Foi realizado o upload do executável para windows, portanto basta fazer o download e executar na sua máquina. É possível que apareça uma mensagem dizendo que o executável pode não ser seguro. Ainda não sei como resolver isso, mas caso tenha dúvidas, pode analisar o código e criar seu próprio executável utilizando a biblioteca citada acima.
Executando no Linux
Download do executável para linux
Foi realizado o upload do executável para linux também, portanto basta fazer o download e executar pelo terminal na sua máquina. No linux não há problemas com mensagens de segurança, basta abrir a pasta do arquivo no terminal e executar o comando:
./app-caes-e-raposas-linux