Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare una empresa de Scribd logo
ALL YOUR FACES
BELONG TO US
JORGE HIDALGO
6 DE MAYO DE 2017
OPENSOUTHCODE 2017
Reconocimiento de imágenes
con tecnologías abiertas
SOBRE MÍ
Jorge Hidalgo
@_deors
deors
https://deors.wordpress.com/
Senior Technology Architect
Global Java Lead – Accenture Technology
Custom Distributed, Architecture & DevOps Lead –
Accenture Delivery Center in Spain
Copyright © 2017 Accenture. Todos los derechos reservados. 2
• Cosas → Objetos:
• Sensores de presión en neumáticos
• Monitores de implantes coronarios
• GPS en taxis
• Termómetros en oficinas
• …
• Con un identificador único
• Conectados a Internet
• Transfieren datos sin intervención humana
• Se integran y forman parte de un sistema mayor
INTERNET DE LAS COSAS /
INTERNET OF THINGS
Copyright © 2017 Accenture. Todos los derechos reservados. 3
H
• Respuesta autónoma
• Capacidad de toma de decisiones
• Capacidad de adaptación
NECESITAMOS INTELIGENCIA
EN LAS “COSAS”
Copyright © 2017 Accenture. Todos los derechos reservados. 4Pictures from stock archive © their respective owners.
Copyright © 2017 Accenture. Todos los derechos reservados. 5
• Soluciones cerradas:
• Microsoft Computer Vision API (link)
• IBM Watson Visual Recognition (link)
• Google Cloud Vision API (link)
• Amazon Rekognition (link)
• Clarifai (link)
RECONOCIMIENTO DE IMÁGENES
• Soluciones abiertas:
• OpenCV (www.opencv.org)
• SimpleCV (simplecv.org)
• TensorFlow (www.tensorflow.org)
• AForge.Net (www.aforgenet.com)
• VLFeat.org (www.vlfeat.org)
• Point Cloud Library (PCL)
(pointclouds.org)
• Gesture Recognition Toolkit (GRT)
(www.nickgillian.com/grt)
• Desarrollada en C++
• Con interfaces para Python y Java
• Libre (licencia BSD)
• Soportada en Windows, Linux (x86 y ARM), Mac OS, iOS y Android
• Foco importante en aplicaciones de tiempo real:
• Optimizada para uso de hardware de aceleración
• Optimizada para uso de múltiples núcleos
• Última versión: 3.2.0 (diciembre de 2016)
• En GitHub: https://github.com/opencv/opencv
OPENCV LIBRARY
Copyright © 2017 Accenture. Todos los derechos reservados. 6
• Un conjunto de reglas (en formato XML)
• Se aplica a cada frame de un stream de vídeo (o a imágenes individuales)
• Detecta rasgos (features)
• Una cara humana
• Una cara de gato
• Un coche
• La forma de un árbol
• …
• OpenCV contiene un conjunto de clasificadores listos para usar
• Se pueden crear nuevos clasificadores mediante entrenamiento
CASCADE CLASSIFIER
Copyright © 2017 Accenture. Todos los derechos reservados. 7
Copyright © 2017 Accenture. Todos los derechos reservados. 8
• LBP
• Más rápido
• Cálculos sobre enteros
• La mejor opción para entornos
móviles/embebidos
CASCADE CLASSIFIER – TIPOS
• HAAR
• Más preciso
• Cálculos sobre punto flotante
• La mejor opción cuando el % de acierto
es fundamental
• Es un proceso lento
• Requiere un conjunto numeroso de imágenes con el rasgo a detectar
• Para formas rígidas (un logo), basta con unas pocas
• Para formas variables (un tipo de objeto), se necesitan cientos
• Para rasgos de seres vivos (cara, pelo, forma corporal…), se necesitan miles
• Cada imagen vendrá acompañada de las coordenadas de los rasgos
• Se enriquece la muestra de ‘positivos’ con variaciones (samples)
• Requiere un conjunto aún más numeroso de imágenes ‘negativas’
ENTRENAMIENTO EN OPENCV
Copyright © 2017 Accenture. Todos los derechos reservados. 9
• La herramienta de entrenamiento actual es opencv_traincascade
• Recibe como entradas:
• Fichero de vectores generado a partir de las imágenes ‘positivas’
• La colección de imágenes ‘negativas’
• Parámetros de configuración del algoritmo de machine learning
• Usa los positivos para formular las hipótesis y mejorarlas
• Usa los negativos para confirmar las hipótesis y mejorarlas
• El resultado final es el fichero con los datos del cascade classifier (XML)
ENTRENAMIENTO EN OPENCV
Copyright © 2017 Accenture. Todos los derechos reservados. 10
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
with PiCamera() as camera:
camera.resolution = (1920, 1080)
camera.framerate = 30
rawCapture = PiRGBArray(camera, size = (1920, 1080))
time.sleep(1)
for frame in camera.capture_continuous(rawCapture, format = "bgr", use_video_port = True):
image = frame.array
cv2.imshow("frame", image)
key = cv2.waitKey(1) & 0xFF
rawCapture.truncate(0)
if key == ord('q'):
break
OPENCV HELLO CAM! – PYTHON VERSION
Copyright © 2017 Accenture. Todos los derechos reservados. 11
org.opencv.core
• Mat
org.opencv.videoio
• VideoCapture
org.opencv.objdetect
• CascadeClassifier
OPENCV JAVA API – PRINCIPALES CLASES
org.opencv.imgproc
• Imgproc
org.opencv.imgcodecs
• Imgcodecs
DIAGRAMA DE SECUENCIA
read
VideoCapture
Mat
Imgproc
cvtColor
equalizeHist
CascadeClassifier
detectMultiScale
Imgcodecs
imwrite
new
new
rectangle
¿HECHOS UN LÍO?
Copyright © 2017 Accenture. Todos los derechos reservados. 14All pictures and clips © their respective owners.
 Bajo ancho de banda
 Bajo uso de energía
 Perfecto para IoT
 Patrón Publish / Subscribe
 Puede transportarse mediante
WebSocket
 Librerías – Eclipse IoT (link):
 Cliente – Eclipse Paho:
http://www.eclipse.org/paho/
 Broker – Eclipse Mosquitto:
http://mosquitto.org
PROTOCOLO MQTT
MQTT Broker
Topic
Device 1
publish
Device 2
Device N
subscribe
subscribe
…
ESCENARIO DE LA DEMO
…
DetectorDevices
publish
MQTT Broker Web Server
subscribe
MQTT MQTT
WS
ESCENARIO DE LA DEMO
publish subscribe
MQTT broker
DEMO TIME!
Copyright © 2017 Accenture. Todos los derechos reservados. 18Pictures from stock archive © their respective owners.
¿AUN HECHOS UN LÍO?
Copyright © 2017 Accenture. Todos los derechos reservados. 19All pictures and clips © their respective owners.
Faces Detector:
https://github.com/locoporf1/faces-detector
WebApp Monitor:
https://github.com/locoporf1/faces-detector-server
Instrucciones detalladas:
https://static.rainfocus.com/oracle/oow16/sess/1463395410
0810018DAr/ppt/JavaOne%20-%20FacesCounter.pptx
CÓDIGO FUENTE
(Kudos para Mariano Rodríguez @locoforf1)
Scala y OpenCV con Akka Streams
https://beachape.com/blog/2016/03/08/scala-and-opencv-ep-1-akka-webcam/
https://beachape.com/blog/2016/03/14/scala-and-opencv-ep-2-akka-face-detector/
Ejemplos del libro “Mastering OpenCV”
https://github.com/MasteringOpenCV/code
OTROS SITIOS INTERESANTES
PARA EMPEZAR CON OPENCV
Documentación oficial
http://docs.opencv.org/3.2.0/dc/d88/tutorial_traincascade.html
Blog de Coding Robin
http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html
Gran pregunta y mejor respuesta en el foro de OpenCV
http://answers.opencv.org/question/39160/opencv_traincascade-parameters-
explanation-image-sizes-etc/
PARA LOS VALIENTES QUE QUIERAN
ENTRENAR POKÉMON CLASIFICADORES
¿PREGUNTAS?
Copyright © 2017 Accenture. Todos los derechos reservados. 23All pictures and clips © their respective owners.
¡GRACIAS!

Más contenido relacionado

All Your Faces Belong to Us - Opensouthcode 2017-05-06

  • 1. ALL YOUR FACES BELONG TO US JORGE HIDALGO 6 DE MAYO DE 2017 OPENSOUTHCODE 2017 Reconocimiento de imágenes con tecnologías abiertas
  • 2. SOBRE MÍ Jorge Hidalgo @_deors deors https://deors.wordpress.com/ Senior Technology Architect Global Java Lead – Accenture Technology Custom Distributed, Architecture & DevOps Lead – Accenture Delivery Center in Spain Copyright © 2017 Accenture. Todos los derechos reservados. 2
  • 3. • Cosas → Objetos: • Sensores de presión en neumáticos • Monitores de implantes coronarios • GPS en taxis • Termómetros en oficinas • … • Con un identificador único • Conectados a Internet • Transfieren datos sin intervención humana • Se integran y forman parte de un sistema mayor INTERNET DE LAS COSAS / INTERNET OF THINGS Copyright © 2017 Accenture. Todos los derechos reservados. 3 H
  • 4. • Respuesta autónoma • Capacidad de toma de decisiones • Capacidad de adaptación NECESITAMOS INTELIGENCIA EN LAS “COSAS” Copyright © 2017 Accenture. Todos los derechos reservados. 4Pictures from stock archive © their respective owners.
  • 5. Copyright © 2017 Accenture. Todos los derechos reservados. 5 • Soluciones cerradas: • Microsoft Computer Vision API (link) • IBM Watson Visual Recognition (link) • Google Cloud Vision API (link) • Amazon Rekognition (link) • Clarifai (link) RECONOCIMIENTO DE IMÁGENES • Soluciones abiertas: • OpenCV (www.opencv.org) • SimpleCV (simplecv.org) • TensorFlow (www.tensorflow.org) • AForge.Net (www.aforgenet.com) • VLFeat.org (www.vlfeat.org) • Point Cloud Library (PCL) (pointclouds.org) • Gesture Recognition Toolkit (GRT) (www.nickgillian.com/grt)
  • 6. • Desarrollada en C++ • Con interfaces para Python y Java • Libre (licencia BSD) • Soportada en Windows, Linux (x86 y ARM), Mac OS, iOS y Android • Foco importante en aplicaciones de tiempo real: • Optimizada para uso de hardware de aceleración • Optimizada para uso de múltiples núcleos • Última versión: 3.2.0 (diciembre de 2016) • En GitHub: https://github.com/opencv/opencv OPENCV LIBRARY Copyright © 2017 Accenture. Todos los derechos reservados. 6
  • 7. • Un conjunto de reglas (en formato XML) • Se aplica a cada frame de un stream de vídeo (o a imágenes individuales) • Detecta rasgos (features) • Una cara humana • Una cara de gato • Un coche • La forma de un árbol • … • OpenCV contiene un conjunto de clasificadores listos para usar • Se pueden crear nuevos clasificadores mediante entrenamiento CASCADE CLASSIFIER Copyright © 2017 Accenture. Todos los derechos reservados. 7
  • 8. Copyright © 2017 Accenture. Todos los derechos reservados. 8 • LBP • Más rápido • Cálculos sobre enteros • La mejor opción para entornos móviles/embebidos CASCADE CLASSIFIER – TIPOS • HAAR • Más preciso • Cálculos sobre punto flotante • La mejor opción cuando el % de acierto es fundamental
  • 9. • Es un proceso lento • Requiere un conjunto numeroso de imágenes con el rasgo a detectar • Para formas rígidas (un logo), basta con unas pocas • Para formas variables (un tipo de objeto), se necesitan cientos • Para rasgos de seres vivos (cara, pelo, forma corporal…), se necesitan miles • Cada imagen vendrá acompañada de las coordenadas de los rasgos • Se enriquece la muestra de ‘positivos’ con variaciones (samples) • Requiere un conjunto aún más numeroso de imágenes ‘negativas’ ENTRENAMIENTO EN OPENCV Copyright © 2017 Accenture. Todos los derechos reservados. 9
  • 10. • La herramienta de entrenamiento actual es opencv_traincascade • Recibe como entradas: • Fichero de vectores generado a partir de las imágenes ‘positivas’ • La colección de imágenes ‘negativas’ • Parámetros de configuración del algoritmo de machine learning • Usa los positivos para formular las hipótesis y mejorarlas • Usa los negativos para confirmar las hipótesis y mejorarlas • El resultado final es el fichero con los datos del cascade classifier (XML) ENTRENAMIENTO EN OPENCV Copyright © 2017 Accenture. Todos los derechos reservados. 10
  • 11. from picamera.array import PiRGBArray from picamera import PiCamera import time import cv2 with PiCamera() as camera: camera.resolution = (1920, 1080) camera.framerate = 30 rawCapture = PiRGBArray(camera, size = (1920, 1080)) time.sleep(1) for frame in camera.capture_continuous(rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow("frame", image) key = cv2.waitKey(1) & 0xFF rawCapture.truncate(0) if key == ord('q'): break OPENCV HELLO CAM! – PYTHON VERSION Copyright © 2017 Accenture. Todos los derechos reservados. 11
  • 12. org.opencv.core • Mat org.opencv.videoio • VideoCapture org.opencv.objdetect • CascadeClassifier OPENCV JAVA API – PRINCIPALES CLASES org.opencv.imgproc • Imgproc org.opencv.imgcodecs • Imgcodecs
  • 14. ¿HECHOS UN LÍO? Copyright © 2017 Accenture. Todos los derechos reservados. 14All pictures and clips © their respective owners.
  • 15.  Bajo ancho de banda  Bajo uso de energía  Perfecto para IoT  Patrón Publish / Subscribe  Puede transportarse mediante WebSocket  Librerías – Eclipse IoT (link):  Cliente – Eclipse Paho: http://www.eclipse.org/paho/  Broker – Eclipse Mosquitto: http://mosquitto.org PROTOCOLO MQTT MQTT Broker Topic Device 1 publish Device 2 Device N subscribe subscribe …
  • 16. ESCENARIO DE LA DEMO … DetectorDevices publish MQTT Broker Web Server subscribe MQTT MQTT WS
  • 17. ESCENARIO DE LA DEMO publish subscribe MQTT broker
  • 18. DEMO TIME! Copyright © 2017 Accenture. Todos los derechos reservados. 18Pictures from stock archive © their respective owners.
  • 19. ¿AUN HECHOS UN LÍO? Copyright © 2017 Accenture. Todos los derechos reservados. 19All pictures and clips © their respective owners.
  • 20. Faces Detector: https://github.com/locoporf1/faces-detector WebApp Monitor: https://github.com/locoporf1/faces-detector-server Instrucciones detalladas: https://static.rainfocus.com/oracle/oow16/sess/1463395410 0810018DAr/ppt/JavaOne%20-%20FacesCounter.pptx CÓDIGO FUENTE (Kudos para Mariano Rodríguez @locoforf1)
  • 21. Scala y OpenCV con Akka Streams https://beachape.com/blog/2016/03/08/scala-and-opencv-ep-1-akka-webcam/ https://beachape.com/blog/2016/03/14/scala-and-opencv-ep-2-akka-face-detector/ Ejemplos del libro “Mastering OpenCV” https://github.com/MasteringOpenCV/code OTROS SITIOS INTERESANTES PARA EMPEZAR CON OPENCV
  • 22. Documentación oficial http://docs.opencv.org/3.2.0/dc/d88/tutorial_traincascade.html Blog de Coding Robin http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html Gran pregunta y mejor respuesta en el foro de OpenCV http://answers.opencv.org/question/39160/opencv_traincascade-parameters- explanation-image-sizes-etc/ PARA LOS VALIENTES QUE QUIERAN ENTRENAR POKÉMON CLASIFICADORES
  • 23. ¿PREGUNTAS? Copyright © 2017 Accenture. Todos los derechos reservados. 23All pictures and clips © their respective owners.