!pip install pyyaml !pip install 'git+https://github.com/facebookresearch/detectron2.git' import torch TORCH_VERSION = ".".join(torch.__version__.split(".")[:2]) CUDA_VERSION = torch.version.cuda print("torch:", TORCH_VERSION, "; cuda:", CUDA_VERSION) # Instale Detectron2 que coincida con la versión de PyTorch anterior # Ver https://detectron2.readthedocs.io/tutorials/install.html para instrucciones !pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/$CUDA_VERSION/torch$TORCH_VERSION/index.html # Importación de bibliotecas import pandas as pd import os, cv2, sys import matplotlib.pyplot as plt import ipywidgets as widgets %matplotlib auto # Importación de los paquetes de Detectron2 from detectron2 import model_zoo from detectron2.engine import DefaultPredictor from detectron2.config import get_cfg from detectron2.utils.visualizer import Visualizer from detectron2.data import catalog # instalar colab_zirc_dims !pip install colab_zirc_dims==1.0.10 #!python -m pip install 'git+https://github.com/MCSitar/colab_zirc_dims.git@v1_0_10' # importar módulos colab_zirc_dims from colab_zirc_dims import save_load from colab_zirc_dims import alc_notebook_fxns from colab_zirc_dims import zirc_dims_GUI from colab_zirc_dims import gen_notebook_fxns from colab_zirc_dims import gen_filename_fxns from colab_zirc_dims import expl_vis from colab_zirc_dims import non_std_cfgs # opcionalmente importar algunas funciones al IPython principal # kernel para compatibilidad local (no Colab) try: from google.colab import output except ModuleNotFoundError: from colab_zirc_dims.jupyter_colab_compat import output_local as output from PIL import Image import skimage.io !pip install gradio import gradio as gr from google.colab import drive drive.mount('/content/gdrive') def generate_medition(sample_img,Escala): #sample_img = im.convert('RGB') #print(sample_img.shape) #input() # Acceso a Google Drive from google.colab import drive drive.mount('/content/gdrive') from PIL import Image im = Image.fromarray(sample_img) im.save("sample_image.jpg") fn = 'sample_image.jpg' filepath = '/content/sample_image.jpg' #Escala = 3 selected_samples = [] sample_img loaded_data_dict = {fn: {fn: {'img_file': filepath, 'Align_file': '', 'rel_file': fn, 'scale_factor': Escala, 'scale_from': 'default (1.0)'}}} #print(loaded_data_dict) #input() alc_notebook_fxns.select_samples_fxn(loaded_data_dict, selected_samples) model_lib_loc = 'default' current_model_dict = {} alc_notebook_fxns.select_download_model_interface(current_model_dict, model_lib_loc) grain_metadata = catalog.Metadata(name='grain_meta', thing_classes=['grain']) predictor = non_std_cfgs.smart_load_predictor( current_model_dict['selected_config_yaml'], current_model_dict['selected_model_weights'], use_cpu = False, adj_nms_thresh='auto', adj_thresh_test='auto') print('Predictor loaded') ROOT_DIR = "/content/drive/MyDrive" Try_contrast_enhanced_subimage = True Try_Otsu_thresholding = True Save_polygons = True save_polys_bool = Save_polygons alt_methods = [Try_contrast_enhanced_subimage, Try_Otsu_thresholding] full_auto_str = '' %matplotlib auto plt.switch_backend('Agg') run_dir = gen_notebook_fxns.full_auto_proc(ROOT_DIR, selected_samples, loaded_data_dict, predictor, save_polys_bool, alt_methods, full_auto_str, stream_output=False) filepath = run_dir + '/mask_images/' + fn + '/' + fn + '.png' im = Image.open(filepath) rgb_im = im.convert('RGB') rgb_im.save('imagef.jpg') imagef = '/content/imagef.jpg' from google.colab.patches import cv2_imshow img = cv2.imread(imagef, cv2.COLOR_BGR2RGB) # Carga de los datos de medición del fragmento de ripios de perforación file = run_dir + '/grain_dimensions/' + fn + '_grain_dimensions.csv' print(file) df = pd.read_csv(file) df = df.head() return img, df demo = gr.Interface(fn=generate_medition, inputs=[gr.Image(label="Imagen"), gr.Radio([1,2,3,4,5,6], label="Escala de la imagen")], outputs=[gr.Image(label="Fragmento medido"), gr.Dataframe(label="Tabla de datos")], title="MEDICIÓN DE IMÁGENES DE RIPIOS DE PERFORACIÓN", description='La siguiente interfaz medirá de forma automática fragmentos en imágenes de ripios de perforación. El usuario deberá ingresar en la parte de la izquierda la imagen a ser procesada y su escala en um/px, mientras que en la parte de la derecha se mostrará la imagen con el fragmento ya medido y una tabla con los parámetros medidos y calculados. Se recomienda ingresar imágenes sin ningún tipo de mediciones o símbolos ya que esto podría afectar en la predicción del modelo.', article='Nota: En el caso de ingresar imágenes que no tengan relación a muestras de ripios de perforación, los autores de esta aplicación no se hacen responsables por los resultados de estas, el modelo de medición de ripios de perforación está entrenado para dar un resultado.') demo.launch()