File size: 5,158 Bytes
58e8a08
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
!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()