Advertisement
rodrigofsacht

Untitled

Mar 27th, 2025 (edited)
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (async () => {
  2.     // Carrega a biblioteca ONNX.js dinamicamente
  3.     if (typeof onnx === 'undefined') {
  4.         const script = document.createElement('script');
  5.         script.src = 'https://cdn.jsdelivr.net/npm/onnxjs/dist/onnx.min.js';
  6.         document.head.appendChild(script);
  7.         await new Promise(resolve => script.onload = resolve);
  8.     }
  9.  
  10.     // URL do modelo ONNX
  11.     const modelUrl = 'https://storage.googleapis.com/dados-publicos-para-treinamento/best.onnx'; // Seu modelo hospedado localmente
  12.  
  13.     // Carrega o modelo
  14.     const session = new onnx.InferenceSession();
  15.     try {
  16.         await session.loadModel(modelUrl);
  17.         console.log("Modelo YOLO carregado com sucesso");
  18.     } catch (e) {
  19.         console.error("Erro ao carregar modelo:", e);
  20.         return;
  21.     }
  22.  
  23.     // Função para processar imagens
  24.     async function processImages() {
  25.         const images = document.getElementsByTagName('img');
  26.         for (let img of images) {
  27.             if (img.dataset.processed) continue;
  28.             img.dataset.processed = "true";
  29.  
  30.             try {
  31.                 // Cria um canvas para manipular a imagem
  32.                 const canvas = document.createElement('canvas');
  33.                 canvas.width = 640;  // Tamanho esperado pelo modelo (ajuste se necessário)
  34.                 canvas.height = 640;
  35.                 const ctx = canvas.getContext('2d');
  36.  
  37.                 // Redimensiona a imagem
  38.                 img.crossOrigin = "anonymous"; // Tenta evitar CORS
  39.                 ctx.drawImage(img, 0, 0, 640, 640);
  40.  
  41.                 // Obtém os dados da imagem
  42.                 const imageData = ctx.getImageData(0, 0, 640, 640);
  43.                 const pixels = imageData.data;
  44.  
  45.                 // Preprocessa os dados (normalização para [0, 1])
  46.                 const tensorData = new Float32Array(640 * 640 * 3);
  47.                 for (let i = 0, j = 0; i < pixels.length; i += 4, j += 3) {
  48.                     tensorData[j] = pixels[i] / 255.0;     // R
  49.                     tensorData[j + 1] = pixels[i + 1] / 255.0; // G
  50.                     tensorData[j + 2] = pixels[i + 2] / 255.0; // B
  51.                 }
  52.                 const inputTensor = new onnx.Tensor(tensorData, 'float32', [1, 3, 640, 640]);
  53.  
  54.                 // Executa a inferência
  55.                 const outputMap = await session.run([inputTensor]);
  56.                 const output = outputMap.values().next().value.data;
  57.  
  58.                 // Processa a saída (assumindo classificação)
  59.                 const classId = output.indexOf(Math.max(...output));
  60.                 const confidence = output[classId];
  61.  
  62.                 // Nomes das classes (substitua pelos seus)
  63.                 const classNames = ["classe1", "classe2", "classe3"]; // Ajuste conforme seu modelo
  64.                 const className = classNames[classId] || `Classe_${classId}`;
  65.  
  66.                 // Desenha o resultado no canto superior direito
  67.                 ctx.font = '20px Arial';
  68.                 ctx.fillStyle = 'rgba(255, 255, 0, 0.7)'; // Fundo amarelo
  69.                 const label = `${className} (${confidence.toFixed(2)})`;
  70.                 const textWidth = ctx.measureText(label).width;
  71.                 ctx.fillRect(640 - textWidth - 15, 5, textWidth + 10, 25);
  72.                 ctx.fillStyle = 'red';
  73.                 ctx.textAlign = 'right';
  74.                 ctx.fillText(label, 630, 25);
  75.  
  76.                 // Substitui a imagem original
  77.                 img.src = canvas.toDataURL('image/png');
  78.             } catch (e) {
  79.                 console.error("Erro ao processar imagem:", e);
  80.             }
  81.         }
  82.     }
  83.  
  84.     // Executa o processamento
  85.     await processImages();
  86.     console.log("Processamento concluído");
  87. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement