Oscar-Hernandez commited on
Commit
b304549
1 Parent(s): 93d3457

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -39
app.py CHANGED
@@ -10,27 +10,33 @@ st.markdown('''
10
  El modelo fue creado por [SerdarHelli](https://huggingface.co/SerdarHelli/Segmentation-of-Teeth-in-Panoramic-X-ray-Image-Using-U-Net).
11
  ''')
12
 
 
 
13
  model_id = "SerdarHelli/Segmentation-of-Teeth-in-Panoramic-X-ray-Image-Using-U-Net"
14
- model=from_pretrained_keras(model_id)
 
 
 
15
 
16
- ## Si una imagen tiene más de un canal entonces se convierte a escala de grises (1 canal)
17
  def convertir_one_channel(img):
18
- if len(img.shape)>2:
19
- img= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
20
  return img
21
  else:
22
  return img
23
-
 
24
  def convertir_rgb(img):
25
- if len(img.shape)==2:
26
- img= cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)
27
  return img
28
  else:
29
  return img
30
 
31
-
32
- image_file = st.file_uploader("Sube aquí tu imagen.", type=["png","jpg","jpeg"])
33
 
 
 
34
  ejemplos = ["dientes_1.png", "dientes_2.png", "dientes_3.png"]
35
 
36
  ## Creamos tres columnas; en cada una estará una imagen ejemplo
@@ -54,33 +60,41 @@ with col3:
54
  st.image(ex2, width=200)
55
  if st.button("Corre este ejemplo 3"):
56
  archivo_imagen = ejemplos[2]
57
-
58
- if image_file is not None:
59
-
60
- img= Image.open(image_file)
61
-
62
- st.image(img,width=850)
63
-
64
- img=np.asarray(img)
65
-
66
- img_cv=convertir_one_channel(img)
67
- img_cv=cv2.resize(img_cv,(512,512), interpolation=cv2.INTER_LANCZOS4)
68
- img_cv=np.float32(img_cv/255)
69
-
70
- img_cv=np.reshape(img_cv,(1,512,512,1))
71
- prediction=model.predict(img_cv)
72
- predicted=prediction[0]
73
- predicted = cv2.resize(predicted, (img.shape[1],img.shape[0]), interpolation=cv2.INTER_LANCZOS4)
74
- mask=np.uint8(predicted*255)#
75
- _, mask = cv2.threshold(mask, thresh=0, maxval=255, type=cv2.THRESH_BINARY+cv2.THRESH_OTSU)
76
- kernel =( np.ones((5,5), dtype=np.float32))
77
- mask=cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel,iterations=1 )
78
- mask=cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel,iterations=1 )
79
- cnts,hieararch=cv2.findContours(mask,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
80
- output = cv2.drawContours(convertir_one_channel(img), cnts, -1, (255, 0, 0) , 3)
81
-
82
-
83
- if output is not None :
84
- st.subheader("Segmentación:")
85
- st.write(output.shape)
86
- st.image(output,width=850)
 
 
 
 
 
 
 
 
 
10
  El modelo fue creado por [SerdarHelli](https://huggingface.co/SerdarHelli/Segmentation-of-Teeth-in-Panoramic-X-ray-Image-Using-U-Net).
11
  ''')
12
 
13
+
14
+ ## Seleccionamos y cargamos el modelo
15
  model_id = "SerdarHelli/Segmentation-of-Teeth-in-Panoramic-X-ray-Image-Using-U-Net"
16
+ model = from_pretrained_keras(model_id)
17
+
18
+ ## Permitimos a la usuaria cargar una imagen
19
+ archivo_imagen = st.file_uploader("Sube aquí tu imagen.", type=["png", "jpg", "jpeg"])
20
 
21
+ ## Si una imagen tiene más de un canal entonces se convierte a escala de grises (1 canal)
22
  def convertir_one_channel(img):
23
+ if len(img.shape) > 2:
24
+ img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
25
  return img
26
  else:
27
  return img
28
+
29
+
30
  def convertir_rgb(img):
31
+ if len(img.shape) == 2:
32
+ img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)
33
  return img
34
  else:
35
  return img
36
 
 
 
37
 
38
+ ## Manipularemos la interfaz para que podamos usar imágenes ejemplo
39
+ ## Si el usuario da click en un ejemplo entonces el modelo correrá con él
40
  ejemplos = ["dientes_1.png", "dientes_2.png", "dientes_3.png"]
41
 
42
  ## Creamos tres columnas; en cada una estará una imagen ejemplo
 
60
  st.image(ex2, width=200)
61
  if st.button("Corre este ejemplo 3"):
62
  archivo_imagen = ejemplos[2]
63
+
64
+ ## Si tenemos una imagen para ingresar en el modelo entonces
65
+ ## la procesamos e ingresamos al modelo
66
+ if archivo_imagen is not None:
67
+ ## Cargamos la imagen con PIL, la mostramos y la convertimos a un array de NumPy
68
+ img = Image.open(archivo_imagen)
69
+ st.image(img, width=850)
70
+ img = np.asarray(img)
71
+
72
+ ## Procesamos la imagen para ingresarla al modelo
73
+ img_cv = convertir_one_channel(img)
74
+ img_cv = cv2.resize(img_cv, (512, 512), interpolation=cv2.INTER_LANCZOS4)
75
+ img_cv = np.float32(img_cv / 255)
76
+ img_cv = np.reshape(img_cv, (1, 512, 512, 1))
77
+
78
+ ## Ingresamos el array de NumPy al modelo
79
+ predicted = model.predict(img_cv)
80
+ predicted = predicted[0]
81
+
82
+ ## Regresamos la imagen a su forma original y agregamos las máscaras de la segmentación
83
+ predicted = cv2.resize(
84
+ predicted, (img.shape[1], img.shape[0]), interpolation=cv2.INTER_LANCZOS4
85
+ )
86
+ mask = np.uint8(predicted * 255) #
87
+ _, mask = cv2.threshold(
88
+ mask, thresh=0, maxval=255, type=cv2.THRESH_BINARY + cv2.THRESH_OTSU
89
+ )
90
+ kernel = np.ones((5, 5), dtype=np.float32)
91
+ mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=1)
92
+ mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel, iterations=1)
93
+ cnts, hieararch = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
94
+ output = cv2.drawContours(convertir_one_channel(img), cnts, -1, (255, 0, 0), 3)
95
+
96
+ ## Si obtuvimos exitosamente un resultadod entonces lo mostramos en la interfaz
97
+ if output is not None:
98
+ st.subheader("Segmentación:")
99
+ st.write(output.shape)
100
+ st.image(output, width=850)