# data[].attributes.body
O Objetivo deste projeto é conseguir utilizar algumas funções do módulo de câmera de Raspberry Pi.

# data[].attributes.body
Python é uma linguagem de programação de alto nível tem como sua vantagem a sua enorme quantidade de bibliotecas disponibilizadas para o desenvolvedor não ter de estar a criar tudo do zero.
Esta linguagem tem como desvantagem a sua velocidade de execução, sendo mais lenda comparada a outras.

# data[].attributes.body
Raspberry Pi é um computador muito compacto, mas o forte deste produto é a sua força para desenvolvedores, já tem um tamanho muito reduzido reparei que é muito bom para automatizar tarefas.

# data[].attributes.body
Flask é uma web framework escrita em Python que permite desenvolver aplicações web mais facilmente com as suas ferramentas.

Web framework é representa uma coleção de bibliotecas e módulos que permitem aos desenvolvedores de aplicativos da Web escrever aplicativos sem se preocupar com detalhes de baixo nível, como protocolo, gerenciamento de encadeamento e assim por diante.

# data[].attributes.body
Tenho como objetivo criar um servidor local no Raspberry Pi com a utilização da linguagem de programação Python.
Com isso pretendo disponibilizar localmente na rede, uma página web que utilizador possa exercer um conjunto pequeno de atividades na câmera.

# data[].attributes.body
Para realizar esta tarefa utilizei as ferramentas do Flask, para tal tive de escrever algum código e descobrir o IP do meu Raspberry Pi e criar uma simples página com HTML e CSS.
Código:

from flask import Flask, render_template, requestapp = Flask(__name__)

@app.route('/')
def page():
return render_template('index.html')

if __name__ == '__main__':    app.run(debug=True)

Segue-se agora uma Imagem do Index.html, a página onde o utilizador terá acesso.

# data[].attributes.body
Para a realização deste trabalho, existe a necessidade de um Raspberry Pi com ligação à internet e um módulo de câmera.
Neste caso eu antes de pensar neste projeto, já tinha em minha posse o Raspberry PI B+ 512 Mb uma versão relativamente antiga, tendo custado 50€ na altura, hoje em dia com 50€ já se consegue comprar o modelo Raspberry Pi 4 B 2Gb.
Finalmente, apenas é necessário o módulo de câmera que custa por volta de 14€ na amazon.es, vem com um sensor OV5647 que permite realizar fotos até 1080p e gravar vídeo a 30fps a 1080p, 60fps a 720p ou 90fps a 480p.
Mais informações do módulo podem ser encontradas na página oficial da marca do produto: https://labists.com/collections/raspberry-pi-camera/products/labists-raspberry-pi-1080p-camera-module (1/1/2021)

# data[].attributes.body
Como primeira funcionalidade quero que o utilizador possa clicar num botão que realize uma foto passado 2 segundos de ser clicado, para tal antes de ir logo para esse código quero testar primeiro o script de tirar uma simples foto:

from picamera import PiCameraimport timecamera = PiCamera()camera.start_previewtime.sleep(2)camera.capture("photoPi7.jpg")

# data[].attributes.body
O botão irá mandar um sinal à página que irá executar uma função chamada takePhoto() que foi uma função que criei em python que abre um ficheiro de texto previamente criado, e guarda numa variável o número que estava lá escrito e substitui o mesmo com o seu número com a adição de 1. após isso ele tira a foto e guarda numa pasta chamada Images e mete o nome da foto como FotoX.jpg sendo o X o número lido no ficheiro de texto. Assim com este processo nunca vai ocorrer substituição das imagens ficando com Foto1.jpg, Foto2.jpg, Foto3.jpg e por assim adiante.

# data[].attributes.body
A implementação desta funcionalidade corre no mesmo patamar que a outra, pois, continuamos a ter um ficheiro de texto para guardar o número do vídeo.  Assim com este processo nunca vai ocorrer substituição das imagens ficando com Video1.mp4, Video2.mp4, Video3.mp4 e por assim adiante. Um passo que estive mais tempo em torno foi converter o ficheiro de video de h264 para MP4, isso porque, o Raspberry Pi grava por natureza em formato h264 logo é necessário convertê-lo para mp4.

# data[].attributes.body
Após realizar o grosso do projeto comecei a pensar em disponibilizar página através da internet. Existem várias formas de realizar isso sem meios de terceiros como por exemplo o mapeamento de portas do router, mas,  abrir uma porta do router mesmo com pouco risco, é um bocado inseguro. Para isso utilizei um serviço chamado Pitunnel, este serviço oferece muitas funcionalidades tais como um monitor do sistema, um terminal remoto e a possibilidade de transformar o nosso Raspberry Pi num servidor web.

# data[].attributes.body
Para finalizar este projeto refiz a página principal para ficar mais apelativa, pois,a anterior tinha sido uma muito simples só para usar em fases de testes. Para isso utilizei recursos de HTML e CSS. Ficando com o seguinte resultado final.