Innovyze, an Autodesk company
Connecting Waterpeople
EPG Salinas
Hach
Centro Nacional de Tecnología de Regadíos (CENTER)
LACROIX
Global Omnium
Fundación We Are Water
Saint Gobain PAM
Insituform
Elmasa Tecnología del Agua
ADECAGUA
AMPHOS 21
Cajamar Innova
Vector Motor Control
J. Huesa Water Technology
Xylem Water Solutions España
CALAF GRUP
Aqualia
Gestagua
CAF
FENACORE
Agencia Vasca del Agua
Laboratorios Tecnológicos de Levante
ICEX España Exportación e Inversiones
GS Inima Environment
Aganova
DuPont Water Solutions
Asociación de Ciencias Ambientales
Idrica
HANNA instruments
Prefabricados Delta
UPM Water
ABB
ESAMUR
Aigües Segarra Garrigues
Terranova
Regaber
Fundación Biodiversidad
Redexia network
Innovyze, an Autodesk company
Ulbios
STF
Cibernos
VisualNAcert
Smagua
TEDAGUA
ISMedioambiente
Kurita - Fracta
Ingeteam
AGENDA 21500
Consorcio de Aguas de Asturias
DAM-Aguas
NOVAGRIC
Red Control
Blue Gold
Kamstrup
TFS Grupo Amper
IIAMA
Minsait
Elliot Cloud
Baseform
Mancomunidad de los Canales del Taibilla
s::can Iberia Sistemas de Medición
ITC Dosing Pumps
biv Innova
Fundación Botín
NaanDanJain Ibérica
Likitech
IAPsolutions
ACCIONA
Molecor
AZUD
Barmatec
BELGICAST by TALIS
Catalan Water Partnership
Confederación Hidrográfica del Segura
Grupo Mejoras
Isle Utilities
Saleplas
BACCARA
Lama Sistemas de Filtrado
Almar Water Solutions
UNOPS
Fundación CONAMA
TecnoConverting
SCRATS
Grundfos
Rädlinger primus line GmbH
FLOVAC
Danfoss
Bentley Systems
Schneider Electric
Hidroconta
AECID
Control Techniques
SEAS, Estudios Superiores Abiertos
Filtralite
Sacyr Agua
EMALSA
1 de Febrero en Isle Utilities Webinar Series

Sobre el blog

José María de Cuenca de la Cruz
Curioso, inquieto y creativo… aprendiz de escritor, e interesado también por las nuevas tecnologías y la educación. Me encanta asumir retos y compartir lo aprendido. Trabajando en lo que me apasiona…. me siento como un pez, en el agua claro.
ABB

La visión artificial es una aplicación bastante impresionante de los sistemas inteligentes. Pero espero sorprender más al lector diciendo que, siguiendo unas instrucciones básicas y con un poco de esfuerzo, él mismo puede construir un sistema básico de interpretación de imágenes. A continuación veremos cómo crear una aplicación capaz de identificar algunos microbios en el agua. Imaginar cómo implementarla en un microscopio con cámara en la planta de tratamiento de agua es cosa suya.

Básicamente, un sistema de visión por computador detecta patrones en las imágenes que se le han suministrado para su aprendizaje, y que antes han sido convertidas a matrices numéricas: pura álgebra. Por ejemplo, una imagen en blanco y negro, es una matriz de dimensiones como tantos píxeles tenga la foto, y valores binarios para representar los dos colores. Si la imagen es en escala de grises, los valores variarán en esa escala (generalmente hasta 255). Y cuando la imagen es en color, añadiremos profundidad a la matriz, para cada canal del color (por ejemplo una imagen RGB convertida en una matriz cúbica, con tres “capas”).

Para “entender” lo que ve en una foto nueva, el sistema inteligente buscará patrones, por comparación con las imágenes que ya conoce, siguiendo una técnica de aprendizaje supervisado. Es decir, necesita un conjunto de datos –imágenes en este caso- etiquetadas. Cuantos más datos tenga ese conjunto mejor aprenderá, porque más fácil le resultará encontrar parecidos entre ellos y el nuevo dato sobre el que deseamos que se pronuncie… aunque más tiempo tardará en aprender.

Hay conjuntos enormes de imágenes ya preparados en la red (por ejemplo en kaggle). Están orientados a la visión artificial generalista, con etiquetas como “casa”, “coche”, “avión”… pero también “nemátodo”. Además, siempre podemos crear o añadir nuestras propias imágenes. E incluso compartirlas, que es probablemente lo más inteligente. Eso sí, para que el sistema pueda “aprender” las imágenes, todas deben tener unas características homogéneas en tamaño, resolución y colores. De otra manera tendríamos matrices de diferentes dimensiones. Por ello, si añadimos nuestras propias fotos, tendremos que adecuarlas antes de poderlas usar.

Con los datos preparados, es hora de seleccionar el algoritmo capaz de encontrar similitudes entre las imágenes, es decir, capaz de clasificarlas. Para ello se pueden emplear algoritmos tradicionales, que usan unas reglas dadas para comparar algebraicamente las matrices (bayesianos, k-vecinos, SVM, árboles de clasificación…); o mejor aún, de aprendizaje profundo (redes neuronales), llamados así porque ellos mismos seleccionan las características relevantes y otorgan los pesos entre sus relaciones. Dije que sería fácil y no hay que preocuparse: estos algoritmos están implementados en librerías que facilitan su uso. Incluso es posible utilizar algunos algoritmos ya enseñados, tal cual o con un pequeño aprendizaje complementario para nuestra aplicación concreta.

Para no liarnos demasiado, usaremos una red neuronal predefinida (NASNET Large) profesional y ya clásica, aunque en este campo de conocimiento eso no representa más allá de unos pocos años… ¡finales de 2017 en este caso!. Y como datos de partida clasificados usaremos un mega conjunto de imágenes genérico también muy común (IMAGENET). Tiene 14 millones de imágenes etiquetadas manualmente y es libre, pero no necesitaremos descargarlo, porque usaremos “transferencia de aprendizaje”, es decir, un entrenamiento previo ya realizado sobre ese enorme conjunto de imágenes, a través de un archivo que sí se descargará, pero ocupa mucho menos. Para nuestra aplicación de microbiología en agua no tendrá mucha utilidad que el sistema sepa diferenciar un gato de un perro, pero sí es interesante que pueda identificar un nematodo. No obstante, si alguien se encuentra otras cosas bajo la lupa, el sistema funcionará :-)

Una red neuronal es –básicamente- una serie de nodos dispuestos en capas, que establecen conexiones (sinapsis) entre sí, con diferentes pesos que ponderan esas relaciones. Los pesos se ajustan durante el entrenamiento del modelo, para establecer transformaciones lineales entre los datos de entrada y los de salida (etiquetas de las imágenes en este caso). Una red con un número suficiente de capas (profundidad) tolerará la falta de datos y el ruido, algo muy útil para la visión artificial.

No debemos olvidar que aunque esta red emite una clasificación, está asociada a un valor de confianza estadística. En el resultado debemos emitir no solo la clasificación, sino su valor de confianza, o incluso la de otras opciones que ha barajado. Esto nos da cierta seguridad objetiva de lo que el sistema ve, y en muchas ocasiones es muy elevada. Aunque no debeos tomarla como certeza absoluta.

Hasta aquí la “divulgación”… ¿seguimos?.

Puede ver directamente cómo ha funcionado el sistema creado a través de su cuaderno Jupyter. Es accesible desde el navegador, e incluye el código estructurado en elementos de ejecución paso a paso, imágenes y texto enriquecido. Acceda directamente al fichero con el cuaderno en este enlace. No se asuste por la extensión del cuaderno, la mayor parte son mensajes informativos. En su parte final aparecen las fotos de ejemplo y la clasificación que se obtiene para un nematodo, y también sus limitaciones, con cultivos de bacterias o con rotíferos. Verá que cada elemento de código tiene muchos comentarios, así que espero no sea difícil de seguir.

Pero si quiere dar un paso más y ejecutarlo paso a paso, o incluso modificarlo, no es complicado, ni hace falta ser informático o programador: basta con saber algo de Python, el lenguaje moderno de uso profesional más simple de todos. Tampoco hacen falta muchos recursos: vamos a utilizar Anaconda, un entorno de programación gratuito instalado en un pc doméstico. Si más o menos comprendió todo hasta ahora y quiere lanzarse a probarlo, aquí puede ver cómo hacer una instalación de Anaconda con las librerías necesarias. Si ya tiene instalado el entorno y quiere replicar esta aplicación de la IA en el sector del agua, puede descargar de aquí el código y todos los archivos necesarios para experimentar con él. Debe dejar la descarga en la carpeta raíz de su usuario, y a continuación abrir el fichero ipynb desde Jupyter. Ejecutando el cuaderno paso a paso y siguiendo las indicaciones y comentarios incluidos en él, será capaz de encontrar “bichos” en las imágenes de prueba que se incluyen… o usarlo con las suyas propias.

De momento no hay muchos analizadores de microbiología de agua en tiempo real… pero no tardarán en proliferar…. Con estas técnicas creo que muy pronto no deberían ser inalcanzablemente caros.

Otra aplicación similar puede ser la identificación de macro invertebrados en cauces naturales de agua, para determinar la salud del ecosistema acuático de una manera automática. Pero hay muchas más, como la detección de plásticos en ríos o zonas costeras…. Si se te ocurre alguna aplicación más para sistemas de visión artificial, tienes datos que quieres explotar pero no sabes por dónde empezar, o tienes alguna duda sobre el tema, a continuación puedes dejar tu comentario.