Transforma fotografias de inspeção em relatórios Excel profissionais usando inteligência artificial. Sem esforço manual, 100% automatizado.
Da fotografia ao relatório final em minutos, não horas
O Gemini Vision analisa cada fotografia e identifica automaticamente problemas como corrosão, parafusos soltos, danos na pintura, e muito mais.
As fotos são automaticamente ordenadas por localização (Basement, S1, Nacelle, etc.) e numeradas sequencialmente.
Fotos tiradas com iPhone que vêm ao contrário são automaticamente corrigidas usando os metadados EXIF.
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.
Processa 200+ fotos em menos de 5 minutos. O que antes levava horas, agora leva minutos.
O Gemini oferece ~1500 imagens gratuitas por dia. Para a maioria dos casos, não vais pagar nada pela IA.
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 |
Segue estas instruções cuidadosamente - cada comando está explicado
Abre o terminal (Mac/Linux) ou PowerShell (Windows) e conecta via SSH:
ssh root@SEU_IP_DO_SERVIDOR
SEU_IP_DO_SERVIDOR pelo IP real (exemplo: 185.215.180.4).
Se ainda não tiveres Docker instalado:
curl -fsSL https://get.docker.com | sh
curl - descarrega um ficheiro da internet-fsSL - opções para fazer isso silenciosamente| sh - executa o ficheiro como um scriptVerifica se instalou corretamente:
docker --version
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
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
O ImageMagick é necessário para processar as imagens (rodar, redimensionar, etc.):
docker exec -u root n8n apk add imagemagick
docker exec - Executa um comando dentro do container-u root - Executa como administradorn8n - Nome do containerapk add imagemagick - Instala o ImageMagick
ExcelJS é a biblioteca que permite criar ficheiros Excel:
docker exec -it n8n sh -c "cd /home/node/.n8n && npm install exceljs"
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
inspections/ - Onde colocas as fotos de inspeçãotemplates/ - Onde fica o template Excel baseoutputs/ - Onde os relatórios gerados são guardados
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
Este é o script mais importante - cria o ficheiro Excel final:
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
Como organizar as fotos de inspeção
| Nome da Pasta | Posição no Relatório |
|---|---|
| 1 - Basement | Basement |
| 2 - S1 Outside | S1 - Outside |
| 3 - S1 | S1 |
| 4 - S2 | S2 |
| 5 - S3 | S3 |
| 7 - Yaw | Yaw |
| 8 - Nacelle | Nacelle |
| 9 - Hub | Hub |
| 10 - Blades (com _A/_B/_C) | Blade A / Blade B / Blade C |
| 11 - Service Lift | Service Lift |
Como configurar o workflow no n8n
Abre o browser e vai a: http://SEU_IP:5678
Na primeira vez, cria uma conta com o teu email.
No n8n, clica no "+" → Menu (3 pontinhos) → "Import from File" → Seleciona o ficheiro JSON do workflow.
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.
Usa rsync/rclone para enviar o teu template Excel para a pasta /templates/ no servidor.
O processo é simples: upload → executar → download
Organiza as fotos em pastas por localização e envia para o servidor usando o script de sync.
Abre o n8n no browser, abre o workflow e clica em "Execute Workflow". Aguarda até completar.
Usa o script de download para obter o relatório Excel. Está pronto a usar!
Soluções para os problemas mais comuns
chmod -R 777 /var/lib/docker/volumes/n8n_n8n_data/_data/
chown -R 1000:1000 /var/lib/docker/volumes/n8n_n8n_data/_data/
Verifica se o ImageMagick está instalado:
docker exec -it n8n magick -version
Se não estiver instalado:
docker exec -u root n8n apk add imagemagick
docker exec -it n8n sh -c "cd /home/node/.n8n && npm install exceljs"
docker restart n8n
Verifica quantas fotos estão na pasta:
find /var/lib/docker/volumes/n8n_n8n_data/_data/inspections -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | wc -l
O modelo pode ter sido atualizado. No node "Gemini Vision", atualiza a URL:
gemini-1.5-flash para gemini-2.0-flash (ou a versão mais recente)