import streamlit as st from PIL import Image import numpy as np # Ownwe libraries from src import predict_image URL_IMAGE_1 = "https://github.com/frorozcol-UN/Detectron2_Tutorial/blob/main/Data/raw/24e5dcbc-7afd-4345-b6da-4bffe79e4415.jpeg?raw=true" URL_IMAGE_2 = "https://github.com/frorozcol-UN/Detectron2_Tutorial/blob/main/Data/predict/f94394ec-ccd2-497b-9c7e-b22e7df9f54c.jpeg?raw=true" def header(): """ Esta función es para el header de la página """ st.header("Este es un detector de daños en vehículos") st.markdown("Este sistema es creado por frorozcol más información en: [Dectectron2_Tutorial](https://github.com/frorozcol-UN/Detectron2_Tutorial)") def info(): st.write(""" Detectron2 es un Framework de detección de objetos de vanguardia desarrollado por Facebook AI Research. Está construido sobre PyTorch, lo que permite a los desarrolladores usar su poder y flexibilidad para entrenar rápidamente y fácilmente modelos de detección de objetos. Una de las características clave de Detectron2 es su implementación de Mask R-CNN, un modelo de detección de objetos que también puede hacer segmentación de máscaras para cada objeto detectado en una imagen. Esto es útil en una variedad de aplicaciones, como la manipulación de imágenes y la visualización de datos en 3D. En resumen, Detectron2 es un marco poderoso y fácil de usar para la detección de objetos que proporciona una amplia variedad de modelos y herramientas para ayudar a los desarrolladores a entrenar y mejorar sus modelos de detección de objetos.""") def shows_image(img1, img2): col1, col2 = st.columns(2) with col1: st.write("Imagen original") st.image(img1, width=400) with col2: st.write("Imagen con daños detectados") st.image(img2, width=400) def demonstrates_images(): """ Esta función es para mostrar las imágenes y de la pagina es la segunda sección de la página """ st.header("Demostración del programa") st.write("En esta sección se muestran las imágenes de entrada y salida del programa") shows_image(URL_IMAGE_1, URL_IMAGE_2) def uploads_image(): """ This function is for the inputs of the model, return the image or return None if the image is not uploaded """ img_upload = st.file_uploader("Subir imagen", type=["jpg", "png", "jpeg"]) if img_upload is not None: img = Image.open(img_upload) return img return None def shows_results(values, image): shows_image(image, values["image"]) st.write("Estas son las áreas de daños detectados: ") st.write("El area se mide en pixeles cuadrados, por lo que para obtener el area en metros cuadrados se debe, hacer una regla de 3 con el tamaño de la imagen en metros cuadrados") for idx, data in enumerate(zip(values["masks"],values["areas"])): st.write("Daño id", idx) st.write(f"Área: {data[1]} px^2") img_binary = Image.fromarray((data[0]* 255).astype(np.uint8), 'L') st.image(img_binary) def main(): header() info() demonstrates_images() image = uploads_image() if image is not None: values = predict_image(image) shows_results(values, image) if __name__ == "__main__": main()