WebR demo

Demostración de aplicación con WebR
shinylive
demo
Autor/a
Afiliación
Fecha de publicación

7 de agosto de 2025

Fecha de modificación

7 de agosto de 2025


Campo Experimental
# VegetationCoverAuto simplificada para webR
VegetationCoverAuto <- function(img_path) {
  library(imager)
  image <- load.image(img_path)
  
  # Ajustar tamaño
  ancho_deseado <- 512
  proporcion <- dim(image)[2] / dim(image)[1]
  nuevo_alto <- round(ancho_deseado * proporcion)
  image <- resize(image, ancho_deseado, nuevo_alto)
  
  # Calcular ExG
  R <- R(image)
  G <- G(image)
  B <- B(image)
  exg <- 2 * G - R - B
  
  # Normalizar y binarizar (umbral automático)
  res_norm <- (exg - min(exg, na.rm = TRUE)) / (max(exg, na.rm = TRUE) - min(exg, na.rm = TRUE))
  umbral <- mean(res_norm)
  binaria <- as.cimg(res_norm > umbral)
  
  # Cobertura vegetal (% pixeles positivos)
  cobertura <- 100 * mean(as.vector(binaria))
  
  # Guardar la imagen binaria como archivo temporal PNG
  save.image(binaria, "binaria.png")
  
  return(list(imagen = "binaria.png", cobertura = cobertura, umbral = umbral))
}
<input type="file" id="imageInput" accept="image/*"/>
<div id="output"></div>

<script type="module">
  import { WebR } from "https://webr.r-wasm.org/latest/webr.mjs";
  const webr = new WebR();
  await webr.init();

  document.getElementById("imageInput").addEventListener("change", async (event) => {
    const file = event.target.files[0];
    if (!file) return;
    
    // Leer imagen como ArrayBuffer y pasarlo a webR
    const arrayBuffer = await file.arrayBuffer();
    const uint8Array = new Uint8Array(arrayBuffer);
    await webr.FS.writeFile("/tmp/input.png", uint8Array);

    // Ejecutar la función en R
    const result = await webr.evalR("res <- VegetationCoverAuto('/tmp/input.png')");
    const cobertura = await webr.evalR("res$cobertura");
    const umbral = await webr.evalR("res$umbral");
    
    // Leer la imagen resultante como base64
    const binImage = await webr.FS.readFile("binaria.png");
    const binBase64 = btoa(String.fromCharCode(...binImage));
    
    // Mostrar la imagen binaria y resultados
    document.getElementById("output").innerHTML = `
      <p><strong>Cobertura vegetal estimada:</strong> ${Number(cobertura).toFixed(1)}%</p>
      <p><strong>Umbral:</strong> ${Number(umbral).toFixed(3)}</p>
      <img src="data:image/png;base64,${binBase64}" width="300">
    `;
  });
</script>

Cómo citar

BibTeX
@online{garcía-mendívil2025,
  author = {García-Mendívil, Helio},
  title = {WebR demo},
  date = {2025-08-07},
  url = {https://sonoraweedscience.org/recursos/2024-08-07-WebR-Demo/},
  langid = {es-ES}
}
Por favor, cita este trabajo como:
García-Mendívil, Helio. 2025. “WebR demo.” August 7, 2025. https://sonoraweedscience.org/recursos/2024-08-07-WebR-Demo/.


Agricultura INIFAP