Um processador de imagens baseado na web que utiliza Flask e OpenCV para aplicar diversos filtros e técnicas avançadas de processamento de imagem e visão computacional.
- Características
- Filtros Disponíveis
- Instalação
- Uso com Docker
- Configuração
- API
- Desenvolvimento
- Contribuição
- Licença
- Interface web moderna e responsiva com design intuitivo
- 10+ algoritmos de processamento de imagem implementados
- Explicações detalhadas de cada filtro e seus parâmetros
- Processamento em tempo real com feedback visual
- Suporte a múltiplos formatos de imagem (JPG, PNG, BMP, TIFF)
- Containerização com Docker para fácil deployment
- Configuração flexível via variáveis de ambiente
- Logs detalhados para monitoramento
- Tratamento de erros robusto
- Canny Edge Detection: O algoritmo mais popular para detecção de bordas
- Sobel Edge Detection: Detecta bordas usando gradientes direcionais
- Segmentação Adaptativa: Limiarização automática baseada em regiões locais
- Segmentação Manual: Controle total sobre valores de limiarização
- Limiarização Otsu: Cálculo automático do limiar ótimo
- Filtro Gaussiano: Suavização preservando bordas
- Filtro de Média: Redução de ruído por média aritmética
- Equalização de Histograma: Melhoria automática de contraste
- Análise de Histograma: Visualização da distribuição de intensidades
- Contagem de Objetos: Detecção e contagem automática de objetos
- Python 3.8+
- pip
- Docker (opcional)
- Clone o repositório
git clone https://github.com/mferraz56/Web_OpenImageProcessor.git
cd Web_OpenImageProcessor- Crie um ambiente virtual
python -m venv venv
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windows- Instale as dependências
pip install -r requirements.txt- Configure as variáveis de ambiente
cp .env.example .env
# Edite o arquivo .env conforme necessário- Execute a aplicação
python app.pyA aplicação estará disponível em http://localhost:7000
- Configure as variáveis no .env
# Exemplo de configuração para produção
FLASK_DEBUG=false
DOCKER_CPU_LIMIT=2.0
DOCKER_MEMORY_LIMIT=2048- Execute com Docker Compose
docker-compose up -d# Build da imagem
docker build -t web_image_processor .
# Execute o container
docker run -d \
-p 7000:7000 \
-v $(pwd)/Entrada:/app/Entrada \
-v $(pwd)/Saida:/app/Saida \
--name web_image_processor \
web_image_processor| Variável | Padrão | Descrição |
|---|---|---|
FLASK_HOST |
0.0.0.0 | Host da aplicação |
FLASK_PORT |
7000 | Porta da aplicação |
FLASK_DEBUG |
false | Modo debug |
UPLOAD_FOLDER |
./Entrada | Diretório de upload |
PROCESSED_FOLDER |
./Saida | Diretório de saída |
MAX_FILE_SIZE |
16 | Tamanho máximo em MB |
DOCKER_CPU_LIMIT |
2.0 | Limite de CPU |
DOCKER_MEMORY_LIMIT |
2048 | Limite de memória em MB |
O docker-compose.yml permite parametrizar limites de hardware:
deploy:
resources:
limits:
cpus: '${DOCKER_CPU_LIMIT:-2.0}'
memory: '${DOCKER_MEMORY_LIMIT:-2048}M'
reservations:
cpus: '${DOCKER_CPU_RESERVATION:-1.0}'
memory: '${DOCKER_MEMORY_RESERVATION:-1024}M'| Endpoint | Método | Descrição |
|---|---|---|
/ |
GET | Interface web principal |
/get_image/<filename> |
GET | Serve imagens processadas |
/adaptativeSegmentation |
POST | Segmentação adaptativa |
/canny |
POST | Detecção Canny |
/cannyEdge |
POST | Contagem de objetos |
/equalize |
POST | Equalização de histograma |
/gaussian |
POST | Filtro Gaussiano |
/histogram |
POST | Análise de histograma |
/manualSegmentation |
POST | Segmentação manual |
/mediam |
POST | Filtro de média |
/otsu |
POST | Limiarização Otsu |
/sobel |
POST | Detecção Sobel |
import requests
# Upload e processamento
files = {'file': open('imagem.jpg', 'rb')}
data = {'mediana': 5, 'canny1': 50, 'canny2': 150}
response = requests.post('http://localhost:7000/canny',
files=files, data=data)
if response.json()['success']:
image_url = response.json()['image_url']
print(f"Imagem processada: {image_url}")Web_OpenImageProcessor/
├── app.py # Aplicação Flask principal
├── requirements.txt # Dependências Python
├── Dockerfile # Configuração Docker
├── docker-compose.yml # Orquestração Docker
├── .env # Variáveis de ambiente
├── templates/
│ └── index.html # Interface web
├── static/
│ └── styles.css # Estilos CSS
├── Entrada/ # Diretório de upload
├── Saida/ # Diretório de saída
└── logs/ # Logs da aplicação
- Implemente o método na classe
ImageProcessorFilters:
def new_filter(self, img: np.ndarray, filename: str, param1: int) -> str:
"""
Descrição do novo filtro.
Args:
img: Imagem de entrada
filename: Nome do arquivo
param1: Parâmetro do filtro
Returns:
str: Caminho do arquivo processado
"""
# Implementação do filtro
processed_img = cv2.some_operation(img, param1)
output_path = self._generate_output_filename(filename, "NewFilter")
cv2.imwrite(output_path, processed_img)
return output_path- Adicione a rota Flask:
@app.route('/newfilter', methods=['POST'])
def new_filter_route():
try:
file = request.files['file']
param1 = int(request.form['param1'])
filepath, filename, img = save_uploaded_file(file)
output_path = image_processor.new_filter(img, filename, param1)
return jsonify({
"success": True,
"output_path": output_path,
"image_url": url_for('get_image', filename=os.path.basename(output_path))
})
except Exception as e:
return jsonify({"success": False, "error": str(e)}), 500- Atualize o frontend adicionando a definição no JavaScript.
# Instalar dependências de teste
pip install pytest pytest-cov
# Executar testes
pytest tests/ -v --cov=app
# Executar testes com relatório HTML
pytest tests/ --cov=app --cov-report=html# Logs são configurados automaticamente
# Localização: ./logs/app.log
# Rotação automática quando atingir 10MB
# Mantém 5 arquivos de backupO container inclui healthcheck automático:
# Verificar status
docker-compose ps
# Logs do healthcheck
docker-compose logs web_image_processor- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
- Mantenha o código bem documentado
- Adicione testes para novas funcionalidades
- Siga o padrão de commit convencional
- Atualize a documentação quando necessário
- Canny Edge Detection: Implementa supressão de não-máximos e histerese
- Sobel Operator: Calcula gradientes nas direções X e Y
- Adaptive Thresholding: Usa média local para calcular limiares
- Otsu's Method: Maximiza variância inter-classe
- Gaussian Blur: Convolução com kernel Gaussiano 2D
- Histogram Equalization: Redistribuição de intensidades no espaço YUV
- Validação de tipos de arquivo
- Sanitização de nomes de arquivo
- Limites de tamanho configuráveis
- Execução em usuário não-root no Docker
- Logs de segurança para auditoria
| Filtro | Tempo Médio (512x512) | Memória |
|---|---|---|
| Gaussian | ~50ms | ~20MB |
| Canny | ~80ms | ~25MB |
| Otsu | ~30ms | ~15MB |
| Histogram | ~100ms | ~30MB |