Armazene imagens remotamente com Image Storage

Novo projeto Open Source disponível no Github

Érick Barbosa
Data Hackers
4 min readApr 30, 2020

--

Photo by Eric Park on Unsplash

Em projetos que envolvem processamento de streaming de vídeos, armazenar imagens remotamente trás a possibilidade de desacoplar a função de processamento e armazenamento de imagem. Este arranjo permite que estas funções possam ser desempenhadas por dispositivos diferentes. Como consequência temos a possibilidade de alocar hardware específico para o atendimento de cada função: processamento e armazenamento.

Figura 1 — Ilustração de duas situações: A-As imagens são processadas e armazenadas no mesmo equipamento; B-Imagens são processadas em um equipamento, enviadas pela rede e armazenadas em outra máquina. Icones criados por Those Icons e catkuro do site ‘www.flaticon.com'.

O Image Storage é a versão básica de um serviço que armazena imagens remotamente, um código base para adição de novas funcionalidades. Foi projetado com o conceito de ser leve, ter poucas dependências, fácil instalação, fácil operação e extensível. Está disponível no github sob a licença MIT, ou seja, autorizado a sua utilização em projetos pessoais ou comerciais.

Caso haja a necessidade de armazenar muitos dados, na faixa de tera ou petabytes, considere a utilização de ferramentas robustas para Big Data como o HDFS, projeto da Apache Software Foundation.

Image Storage no Github: https://github.com/ebsouza/ImageStorage

1. Visão Geral

O Image Storage segue o modelo cliente-servidor. O cliente é capaz de enviar, recuperar e remover imagens no servidor utilizando o protocolo HTTP enquanto o servidor tem a responsabilidade de processar estas requisições.

Figura 2-Codificação e decodificação de um arquivo binário utilizando o método base64

O processo de codificação e decodificação, que é a transformação de um arquivo binário em texto, é o ponto-chave desta aplicação. É através deste processo que as imagens são enviadas entre cliente e servidor via JSON.

O envio de uma imagem para o servidor segue exatamente o fluxo descrito pela Figura 2. A recuperação de imagem, quando o cliente solicita uma imagem ao servidor, utiliza o processo inverso: o servidor recebe a requisição do cliente, codifica a imagem em base64 e em seguida em via para o cliente.

Por questão de design, todas as imagens enviadas ao Image Storage devem possuir a mesma extensão. Por exemplo, não é possível enviar imagens com extensão ‘.jpeg’ e ‘.png’ para a mesma instância do servidor.

2. Recursos da API

A API possui somente dois recursos: imagem e informação. No servidor uma imagem pode ser criada, removida ou recuperada. A informação se trata de variáveis de estado do servidor, esta pode apenas ser consultada.

2.1. Imagens

  • Uma imagem é criada no servidor quando este recebe o JSON enviado pelo cliente. Apenas duas informações são necessárias: identificador único da imagem e sua codificação em texto.
  • Existem duas maneiras de remover as imagens no servidor: remoção de uma imagem específica e remoção de todas as imagens.
  • Uma imagem pode ser recuperada do storage pelo processo inverso de sua criação, ou seja, o servidor envia uma cópia da imagem via JSON. Não é possível recuperar uma lista de imagens, apenas um JSON relacionando ID e seu tamanho em Mb.

2.2. Informação

Este recurso tem a finalidade levar informações a respeito do estado do servidor para o cliente. Ao requisitar este recurso o servidor envia um JSON com o número de imagens armazenadas e o seu total em Mb.

3. Como rodar a aplicação

O projeto possui poucas dependências, todas elas estão listadas no arquivo requirements.txt. A versão do interpretador é Python nas versões 3.x. Seguem abaixo algumas dicas e instruções de uso:

  • No código do servidor, a extensão é definida pela variável ‘image_extension’ encontrada nos arquivos test.py e run.py;
  • As imagens são identificadas por seu ID. Espera-se que cada imagem enviada tenha um identificador único;
  • A aplicação pode ser rodada nos modos ‘development’, ‘testing’ e ‘production’. O modo ‘production’ trabalha com diretório de armazenamento diferente dos demais;
  • O código do cliente está na pasta ‘client’ e conta atualmente com as requisições escritas em Python;
  • Os testes são rodados com a execução do script ‘test.py’.

Mais detalhes sobre utilização estão no arquivo REAME.md do projeto no github.

O Image Storage foi desenvolvido para ser simples, leve e funcional. Aproveite o projeto para estendê-lo de acordo com os seus requisitos. Uma simples exposição das imagens por um servidor HTTP pode enriquecer muito a aplicação.

Apesar de ter sido completamente projetado para atender o armazenamento de imagens remotamente, toda estrutura permite trabalhar com arquivos binários em outros formatos.

Deixe aqui suas dúvidas ou sugestões, elas serão muito bem-vindas.

--

--