Skip to content

IsadoraVanco/Gamellito

Repository files navigation

Projeto Gamellito (carinhosamente "HC")

A ideia do projeto é construir um reprodutor de vídeos, que ao final de cada execução, exiba um questionário para reforçar o aprendizado.

Esse projeto têm como objetivo auxiliar as crianças que possuem diabete, para que entendam e aprendam sobre a condição e como podem cuidar de sua saúde.

De uma forma mais técnica, o projeto envolve não só código, mas também desafios de hardware, já que a máquina que será utilizada terá poucos recursos de execução. Mais precisamente: um processador Celeron D331 que possui um núcleo físico de 2.66GHz dos anos 2000 com barramento de 533MHz, 3GB de memória DDR2, com a possibilidade de no máximo 1GB de expansão. Carinhosamente, a chamarei de "Dino" para ficar mais fácil.

Pessoalmente, será um grande desafio, já que estou no início da programação, e conciliar o projeto com a grade da faculdade não será nada fácil.

1. Ferramentas

1.1. Linguagem e biblioteca

Para esta difícil tarefa, irei utilizar a linguagem C++ e a biblioteca Qt5 (versão 5.15) (no momento existe a 6, mas utiliza-lá ocasionaria outros problemas). A IDE utilizada será o QtCreator, que é responsável por compilar o código, além disso, nele é muito mais fácil criar as interfaces gráficas, já que possui o sistema Drag and Drop.

Referências

Para consultas futuras, aqui estão as documentações de cada classe utilizada:

(Em geral)

(Em main.cpp)

(Em arquivos.h/cpp)

(Em mainwindow.h/cpp)

(Em reprodutor.h/cpp)

(Em senha.h/cpp)

(Em sequencia.h/cpp)

(Em somambiente.h/cpp)

(Em video.h/cpp)

Bibliotecas para a reprodução de vídeo

Existem várias bibliotecas para a reprodução de vídeo em Qt. Abaixo, algumas testadas e seus resultados:

  • QVideo: Não foi possível alterar a dimensão do reprodutor;
  • QVideoWidget: Altera a dimensão do vídeo, porém, abrindo outra janela.
  • QGraphicsVideoItem: É possível alterar a dimensão do vídeo, e colocá-lo em um widget, sem a necessidade de abrir outra janela para reproduzir o vídeo. Apesar desses benefícios, o vídeo reproduz travando um pouco (quase imperceptível).

Outras classes possíveis (mas que não foram testadas):

1.2. Virtualização

Como utilizo Windows no dia-a-dia, preciso de uma ferramenta para virtualizar o sistema Linux para compilar o código e testá-lo. Para isso, utilizarei o VM Virtual Box e nele virtualizo o Linux Mint XFCE versão 21.2 (Victoria) (64bits). Utilizando 2 GB de RAM da máquina hospedeira e 1 núcleo de 1.80GHz do AMD Ryzen 7 5700U with Radeon Graphics.

Cogitei utilizar Docker, mas creio que seria muito para a máquina Dino, além de não ser muito viável para o usuário replicar o programa em outra máquina (creio eu).

1.3 Papelada

Assim como uma casa, um software também precisa de uma planta que foi planejada para poder ser estruturado de forma segura. E para fazer algumas partes do processo, utilizei:

2. Software

Estrutura do armazenamento do software na máquina:

projeto{
    assets{
        somAmbiente.wav
        ...
    }

    backups{
        paciente{
            videos.mp4
            ...
        }
        profissional{
            videos.mp4
            ...
        }
        responsavel{
            videos.mp4
            ...
        }
    }
    
    configuracoes{
        sequenciaPaciente.json
        sequenciaProfissional.json
        sequenciaResponsavel.json

        respostasPaciente.json
        respostasProfissional.json
        respostasResponsavel.json
    }

    .executavel
    config.json
}

Onde projeto é a pasta da aplicação do Gamellito, e dentro dela contém todos os arquivos necessários para o funcionamento da aplicação.

A pasta assets contém sons, ícones e fotos da aplicação.

backups trata-se da pasta que armazena os vídeos que foram salvos para as sequências. Dentro desta pasta, possui uma pasta separada para cada perfil.

configuracoes é a pasta que armazena os arquivos .json de cada perfil, incluindo a sequência de cada perfil e as respostas coletadas em perguntas.

.executavel é o arquivo executável do programa.

config.json é o arquivo de configurações gerais, que armazena algumas informações do programa, como: Número de reproduções das sequências, número de vezes que o programa foi aberto, a última vez que o programa foi aberto, a senha do administrador e a última vez que um relatório foi gerado.

Assets

/assets
    /botoes
        /configuracoes
        /menu
    /fontes
        /aplicacao
        /configuracoes
        /informacoes
        /iniciar-menu
        /lapis
        /lixeira
        /opcao
        /pagina-inicial
        /perfil
        /pergunta
        /proximo
        /reprodutor
        /sair
        /salvar
        /seta
        /som
        /video
        /voltar
    /icones
    /imagens
    /logos
    /sons
    /videos

Sequências

As sequências dos perfis são representadas por arquivos .json, e dentro deles, estão estruturados objetos Json para representar um item. Os itens são representados da seguinte maneira:

  • Para o vídeo:
{
    "id": numero;
    "tipo":"video";
    "caminho":"caminho/do/video"
}
  • Para a pergunta:
{
    "id": numero;
    "tipo":"pergunta";
    "pergunta":"texto";
    "opcao1":"texto";
    "opcao2":"texto";
    "opcao3":"texto";
    "opcao4":"texto";
    "correta":0-4;
}

Como compilar?

Para compilar o código para outra máquina, é necessário ter instalado algumas bibliotecas:

qtbase5-dev
cmake
build-essential

No Linux, é possível instalar via apt.

Após instala-las, copie os arquivos de um projeto (.h .cpp ui e cmake) para a sua máquina (não esqueça da pasta de assets). Depois, na pasta do projeto, abra o terminal e utilize o Cmake para criar o Makefile:

cmake .

Depois disso, um arquivo Makefile será criado, então, é só executá-lo para gerar o executável do programa:

make

Assim, seu executável está pronto!

3. Hardware

Por enquanto, a máquina foi desbloqueada para utilizar sistemas operacionais. Procuro por sistemas Linux que são leves o suficientes para a máquina Dino.

Sistemas testados até o momento (na máquina Dino):

  • Linux Mint XFCE versão Vera (64 bits) => O sistema é pesado para a máquina. Vídeos em HD rodam até bem, mas em fullHD não tem um bom desempenho.
  • Lubuntu 22.04 (64bits) => Sistema leve, rodou tranquilamente os testes e vídeos. A inicialização é um pouco lenta, mas geralmente utiliza menos CPU que o Q4OS.
  • Q4OS (64bits) => Sistema leve, rodou tranquilamente os testes e vídeos. Utiliza menos memória RAM que o Lubuntu.

Testar outros Linux mais leves. OBS: Pode ser que haja incompatiblidade de bibliotecas

  • Bodhi Linux
  • Xubuntu
  • Puppy Linux
  • AntiX
  • Debian
  • Zorin OS Lite
  • MX Linux
  • Peppermint

4. Testes

Irei guardar cada teste para caso precise testar em um novo sistema operacional, e assim eu posso comparar cada resultado. Por enquanto, temos:

  1. Roadmap -> Um exemplo simples de tela inicial, com redimensionamento e botões que levam a novas janelas. Tamanho mínimo da tela: 960x540.
  2. PaginasDinamicas -> Apesar do nome, é um exemplo simples de aplicação que possui elementos estáticos, sem responsividade, mas que navega entre widgets dentro de uma StackedWidgets, sem a necessidade de criar uma nova janela para alterar o conteúdo.
  3. Menus -> Um esboço de como imagino a aplicação (com exceção do reprodutor de vídeo), ainda sem as telas dinâmicamente alocadas. Este exemplo possui a navegação entre as telas (em StackedWidgets) e som ambiente no menu. A aplicação é ajustada conforme o tamanho do monitor e sem a barra de título da janela. Tamanho mínimo da tela: 800x600 (SVGA).
  4. ReprodutorMenu -> Essa versão é um leve aprimoramento do "Menus". Armazena uma sequência de vídeos escolhidos em um arquivo JSON e reproduz um vídeo (fixo) após clicado o botão "iniciar". Foram testados vídeos em FullHD e HD.
  5. Modulados -> Versão (quase) final do projeto, com sequências de vídeos e perguntas armazenadas e manipuladas. Troca de perfis já pré definidos.
  6. Gamellito -> Versão final do projeto com assets corretos e correção de bugs.

5. Como replicar

  1. Compile o arquivo na máquina desejada
  2. Guarde o executável gerado
  3. Para replicar em uma máquina semelhante à máquina alvo da compilação, copie o executável e a pasta de Assets dentro de uma pasta chamada "Gamellito" e no mesmo diretório, copie os arquivos executáveis de instalação. Transfira tudo isso para a nova máquina
  4. Mude o arquivo install_gamellito.sh para executável e rode no terminal, ele é responsável pela instalação do projeto na máquina, as bibliotecas do Qt e os arquivos de inicialização

6. Melhorias futuras

  • Adicionar vídeo no menu
  • Trocar imagens png por svg
  • Adicionar uma confirmação para sair do programa
  • Adicionar o ícone da aplicação corretamente. No momento o ícone aparece apenas na notificação
  • Adicionar corretamente a fonte do programa
  • Separar as telas em classes diferentes e tentar adicionar as páginas na Stack Widgets de forma dinâmica, atribuindo um nome a cada uma delas. Dessa forma, caso uma página seja trocada de lugar na edição, não afete outras partes do código
  • Adicionar recurso para recuperação de senha

About

A ideia é criar um reprodutor de vídeos que faça um questionário depois.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors