Powered by Google Gemini AI

Wind Turbine
Inspection Reports
Automatizados

Transforma fotografias de inspeção em relatórios Excel profissionais usando inteligência artificial. Sem esforço manual, 100% automatizado.

~$0
Custo por 200 fotos
2min
Tempo de processamento
100%
Automatizado

O Que Este Workflow Faz

Da fotografia ao relatório final em minutos, não horas

Upload Fotos
Organizadas por localização
Análise IA
Gemini Vision identifica problemas
Gera Excel
Fotos + descrições formatadas
Download
Relatório pronto a usar

Análise Visual com IA

O Gemini Vision analisa cada fotografia e identifica automaticamente problemas como corrosão, parafusos soltos, danos na pintura, e muito mais.

Organização Automática

As fotos são automaticamente ordenadas por localização (Basement, S1, Nacelle, etc.) e numeradas sequencialmente.

Rotação Automática

Fotos tiradas com iPhone que vêm ao contrário são automaticamente corrigidas usando os metadados EXIF.

Template Personalizado

Usa o teu próprio template Excel com o branding da tua empresa. As fotos e descrições são inseridas nas células corretas.

Rápido e Eficiente

Processa 200+ fotos em menos de 5 minutos. O que antes levava horas, agora leva minutos.

Praticamente Gratuito

O Gemini oferece ~1500 imagens gratuitas por dia. Para a maioria dos casos, não vais pagar nada pela IA.

Pré-requisitos

O que precisas antes de começar

Requisito Descrição Onde Obter
VPS/Servidor Servidor Linux com Docker Contabo, DigitalOcean, AWS (~€5/mês)
n8n Plataforma de automação Instalamos via Docker (gratuito)
Gemini API Key Chave para a IA do Google Google AI Studio (gratuito)
Template Excel Ficheiro base para os relatórios Crias tu ou usas um existente
SSH Access Acesso ao servidor via terminal Configurado no teu servidor

Instalação Passo a Passo

Segue estas instruções cuidadosamente - cada comando está explicado

Passo 1: Conectar ao Servidor

Abre o terminal (Mac/Linux) ou PowerShell (Windows) e conecta via SSH:

Terminal
ssh root@SEU_IP_DO_SERVIDOR
O que isto faz?
Estabelece uma conexão segura com o teu servidor remoto. Substitui SEU_IP_DO_SERVIDOR pelo IP real (exemplo: 185.215.180.4).
Passo 2: Instalar Docker

Se ainda não tiveres Docker instalado:

Instalar Docker
curl -fsSL https://get.docker.com | sh
O que cada parte faz?
curl - descarrega um ficheiro da internet
-fsSL - opções para fazer isso silenciosamente
| sh - executa o ficheiro como um script
• No final, o Docker fica instalado no servidor

Verifica se instalou corretamente:

Verificar versão
docker --version
Resultado esperado
Docker version 24.0.7, build afdd53b (ou similar)
Passo 3: Instalar n8n
Criar container n8n
docker run -d \
  --name n8n \
  --restart always \
  -p 5678:5678 \
  -e NODE_FUNCTION_ALLOW_EXTERNAL=exceljs \
  -v n8n_n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n:latest
O que cada linha faz?
docker run -d - Executa um container em background
--name n8n - Dá o nome "n8n" ao container
--restart always - Reinicia automaticamente se o servidor reiniciar
-p 5678:5678 - Expõe a porta 5678 para acesso via browser
-e NODE_FUNCTION_ALLOW_EXTERNAL=exceljs - Permite usar a biblioteca ExcelJS
-v n8n_n8n_data:/home/node/.n8n - Guarda os dados de forma persistente
Passo 4: Instalar ImageMagick

O ImageMagick é necessário para processar as imagens (rodar, redimensionar, etc.):

Instalar ImageMagick
docker exec -u root n8n apk add imagemagick
O que isto faz?
docker exec - Executa um comando dentro do container
-u root - Executa como administrador
n8n - Nome do container
apk add imagemagick - Instala o ImageMagick
Passo 5: Instalar ExcelJS

ExcelJS é a biblioteca que permite criar ficheiros Excel:

Instalar ExcelJS
docker exec -it n8n sh -c "cd /home/node/.n8n && npm install exceljs"
Passo 6: Criar Pastas
Criar estrutura de pastas
mkdir -p /var/lib/docker/volumes/n8n_n8n_data/_data/inspections
mkdir -p /var/lib/docker/volumes/n8n_n8n_data/_data/templates
mkdir -p /var/lib/docker/volumes/n8n_n8n_data/_data/outputs
Para que servem?
inspections/ - Onde colocas as fotos de inspeção
templates/ - Onde fica o template Excel base
outputs/ - Onde os relatórios gerados são guardados
Passo 7: Dar Permissões
Configurar permissões
chmod -R 777 /var/lib/docker/volumes/n8n_n8n_data/_data/inspections
chmod -R 777 /var/lib/docker/volumes/n8n_n8n_data/_data/templates
chmod -R 777 /var/lib/docker/volumes/n8n_n8n_data/_data/outputs
chown -R 1000:1000 /var/lib/docker/volumes/n8n_n8n_data/_data/inspections
chown -R 1000:1000 /var/lib/docker/volumes/n8n_n8n_data/_data/templates
chown -R 1000:1000 /var/lib/docker/volumes/n8n_n8n_data/_data/outputs
Porquê isto?
O n8n corre como utilizador UID 1000. Sem estas permissões, o workflow não consegue ler/escrever ficheiros nas pastas.
Passo 8: Criar Script de Geração

Este é o script mais importante - cria o ficheiro Excel final:

Criar generate-report.js
cat > /var/lib/docker/volumes/n8n_n8n_data/_data/generate-report.js << 'EOF'
const ExcelJS = require('exceljs');
const fs = require('fs');
const { execSync } = require('child_process');

const args = JSON.parse(process.argv[2]);
const { results, config } = args;

async function generate() {
  const workbook = new ExcelJS.Workbook();
  await workbook.xlsx.readFile(config.templatePath);
  const sheet = workbook.worksheets[0];

  const DATA_START_ROW = 6;
  const ROW_HEIGHT = 70;
  
  const IMG_WIDTH = 120;
  const IMG_HEIGHT = 91;

  for (const item of results) {
    const row = DATA_START_ROW + item.n;
    
    sheet.getRow(row).height = ROW_HEIGHT;
    
    sheet.getCell('A' + row).value = item.n;
    sheet.getCell('A' + row).alignment = { vertical: 'middle', horizontal: 'center' };
    
    sheet.getCell('B' + row).value = item.position;
    sheet.getCell('B' + row).alignment = { vertical: 'middle', horizontal: 'center', wrapText: true };
    
    sheet.getCell('C' + row).value = item.observation || '';
    sheet.getCell('C' + row).alignment = { vertical: 'middle', horizontal: 'left', wrapText: true };

    if (fs.existsSync(item.imagePath)) {
      try {
        const tmpImg = `/tmp/img_${item.n}.jpg`;
        
        execSync(`magick "${item.imagePath}" -auto-orient -resize 800x600 -quality 70 "${tmpImg}"`, { stdio: 'pipe' });
        
        const imageId = workbook.addImage({
          buffer: fs.readFileSync(tmpImg),
          extension: 'jpeg'
        });
        
        sheet.addImage(imageId, {
          tl: { col: 6.15, row: row - 1 + 0.02 },
          ext: { width: IMG_WIDTH, height: IMG_HEIGHT },
          editAs: 'oneCell'
        });
        
        fs.unlinkSync(tmpImg);
        
      } catch(e) {
        console.error('Erro na imagem:', item.imagePath, e.message);
      }
    }
  }

  const timestamp = Date.now();
  const outPath = config.outputFolder + '/Report_' + timestamp + '.xlsx';
  await workbook.xlsx.writeFile(outPath);
  
  console.log(JSON.stringify({ success: true, path: outPath, count: results.length }));
}

generate().catch(e => console.log(JSON.stringify({ error: e.message })));
EOF

Estrutura de Pastas

Como organizar as fotos de inspeção

📁 inspections/ ├── 📁 1 - Basement/ │ ├── 📷 foto1.jpg │ └── 📷 foto2.jpg ├── 📁 2 - S1 Outside/ │ └── 📷 foto3.jpg ├── 📁 3 - S1/ ├── 📁 4 - S2/ ├── 📁 5 - S3/ ├── 📁 7 - Yaw/ ├── 📁 8 - Nacelle/ ├── 📁 9 - Hub/ ├── 📁 10 - Blades/ ← usar _A, _B, _C no nome do ficheiro └── 📁 11 - Service Lift/
Nome da Pasta Posição no Relatório
1 - BasementBasement
2 - S1 OutsideS1 - Outside
3 - S1S1
4 - S2S2
5 - S3S3
7 - YawYaw
8 - NacelleNacelle
9 - HubHub
10 - Blades (com _A/_B/_C)Blade A / Blade B / Blade C
11 - Service LiftService Lift

Configuração do n8n

Como configurar o workflow no n8n

1

Aceder ao n8n

Abre o browser e vai a: http://SEU_IP:5678
Na primeira vez, cria uma conta com o teu email.

2

Importar o Workflow

No n8n, clica no "+" → Menu (3 pontinhos) → "Import from File" → Seleciona o ficheiro JSON do workflow.

3

Configurar API Key do Gemini

Vai a Google AI Studio"Get API Key" → Cria uma nova key → Copia.

No workflow, abre o node "⚙️ Config" e cola a key no campo geminiApiKey.

4

Upload do Template Excel

Usa rsync/rclone para enviar o teu template Excel para a pasta /templates/ no servidor.

Como Usar

O processo é simples: upload → executar → download

1. Upload das Fotos

Organiza as fotos em pastas por localização e envia para o servidor usando o script de sync.

2. Executar Workflow

Abre o n8n no browser, abre o workflow e clica em "Execute Workflow". Aguarda até completar.

3. Download do Relatório

Usa o script de download para obter o relatório Excel. Está pronto a usar!

Resolução de Problemas

Soluções para os problemas mais comuns

"Permission denied" ao ler/escrever ficheiros
Solução
chmod -R 777 /var/lib/docker/volumes/n8n_n8n_data/_data/
chown -R 1000:1000 /var/lib/docker/volumes/n8n_n8n_data/_data/
Imagens aparecem ao contrário

Verifica se o ImageMagick está instalado:

Verificar
docker exec -it n8n magick -version

Se não estiver instalado:

Instalar
docker exec -u root n8n apk add imagemagick
"Module 'exceljs' not found"
Reinstalar ExcelJS
docker exec -it n8n sh -c "cd /home/node/.n8n && npm install exceljs"
docker restart n8n
O workflow não encontra imagens

Verifica quantas fotos estão na pasta:

Contar imagens
find /var/lib/docker/volumes/n8n_n8n_data/_data/inspections -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | wc -l
Erro 404 no Gemini

O modelo pode ter sido atualizado. No node "Gemini Vision", atualiza a URL:

Muda gemini-1.5-flash para gemini-2.0-flash (ou a versão mais recente)