TensorFlow radiografía de imágenes utilizando Object Detection con App Engine

En artículos anteriores analizamos objetos en imágenes utilizando Tensor Flow Object Detection API aplicando diferentes tipos de modelos (TensorFlow Object Detection en videos, basta de pizza, donuts y cakes..., TensorFlow Object Detection API, cena con amigos). En estos ejemplos, la solución siempre estuvo diseñada para una aplicación de consola (es decir un Python script ejecutado localmente).

Ahora nuestro desafío es llevarlo a un entorno web, detectar objetos dentro de la foto (como una radiografía) y finalmente deberíamos proponer una arquitectura simple de implementación.

Vista General

Podríamos pensar varias opciones de arquitectura en donde se utilice un esquema servidor (ejemplo desde la documentación oficial TensorFlow Serving). Incluso podríamos pensar en alternativas tradicionales(Apache, Nginx, etc) pero debemos pensar en montar el servidor Web y ajustar todos los elementos para realizar el análisis utilizando TensorFlow.

Me gustó mucho la idea de utilizar un esquema de plataforma como App Engine, pero para nuestra propuesta, el entorno tradicional de App Engine tiene varios desafíos (deberíamos incluir elementos como PubSub y workers en VMs, esto introduce algunos grados de complejidad que preferimos evitar), entonces para resolver nuestro desafío utilizaré App Engine Flexible Environment.

Solución propuesta


Arquitectura propuesta


Proyecto App Engine Flexible Environment

  • app.yaml
  • main.py
  • templates/index.html
Más detalles sobre App Engine Flexible Environment

Rutina de evaluación de imágenes


*Principales dependencias Flask, TensorFlow además estos elementos de soporte, numpy, Image, cStringIO, urllib.

Tener en cuenta los elementos mínimos necesarios para ejecutar el análisis utilizando TensorFlow Objects Detection API son los siguientes.
  • models [folder]
  • proto [folder]
  • utils [folder]
*si lo desean este archivo tiene todo lo necesario de este ítem.

Además necesitamos tener el frozen_inference_graph del modelo en nuestra solución. Para nuestro ejemplo:
  • ssd_mobilenet_v1_coco_11_06_2017 (para más precisión en la detección se puede variar el modelo)
*si lo desean este archivo tiene todo lo necesario de este ítem.

Cómo utilizamos COCO como esquema de reconocimiento de objetos, necesitamos la etiquetas de reconocimiento para nuestro análisis.
  • mscoco_label_map.pbtxt
*si lo desean este archivo tiene todo lo necesario de este ítem.

Aquí les dejo la implementación en su fase inicial desde este repositorio Github.

Despliegue de la solución

Nota: recuerden que deben contar con el Google Cloud SDK.

Local:
  • python main.py 

Ambiente producción:
  • gcloud app deploy 
* [-v versión] si quiere desplegar en una versión específica.

Licencia Creative Commons
TensorFlow radiografía de imágenes utilizando Object Detection con App Engine por Nicolas Bortolotti se distribuye bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.

Comentarios

Entradas más populares de este blog

Modelando relaciones en UML, un acercamiento a las Asociaciones

Entendiendo la personalidad de mi equipo, cual es tu estilo?

Utilizando Intents implícitos para crear actividades