with examples example ejemplo image-processing hadoop mapreduce hdfs hadoop-streaming

image-processing - examples - map reduce hadoop python



Procesando imágenes usando hadoop (3)

Para procesar imágenes en Hadoop, la mejor forma de organizar los cálculos sería:

  1. Almacene imágenes en un archivo de secuencia. Clave - nombre de la imagen o su ID, valor - datos binarios de la imagen. De esta manera tendrá un solo archivo con todas las imágenes que necesita procesar. Si tiene imágenes agregadas dinámicamente a su sistema, considere agregarlas en archivos de secuencia diaria. No creo que deba usar ninguna compresión para este archivo de secuencia ya que los algoritmos de compresión general no funcionan bien con las imágenes
  2. Procesar las imágenes Aquí tienes una cantidad de opciones para elegir. Lo primero es utilizar Hadoop MapReduce y escribir un programa en Java, ya que con Java podría leer el archivo de secuencia y obtener directamente el "Valor" en cada paso del mapa, donde el "valor" son los datos del archivo binario. Dado esto, puede ejecutar cualquier lógica de procesamiento. La segunda opción es Hadoop Streaming. Tiene una limitación de que todos los datos van al stdin de su aplicación y el resultado se lee desde stdout. Pero puede superar esto escribiendo su propio InputFormat en Java que serializaría los datos binarios de la imagen del archivo de secuencia como cadena Base64 y lo pasaría a su aplicación genérica. La tercera opción sería usar Spark para procesar esta información, pero de nuevo estás limitado en la elección del lenguaje de programación: Scala, Java o Python.
  3. Hadoop fue desarrollado para simplificar el procesamiento por lotes sobre grandes cantidades de datos. Spark es esencialmente similar: es una herramienta por lotes. Esto significa que no puede obtener ningún resultado antes de que se procesen todos los datos. Spark Streaming es un caso un poco diferente: allí trabajas con micro lotes de 1-10 segundos y procesas cada uno de ellos por separado, por lo que en general puedes hacer que funcione para tu caso.

No conozco el caso completo de ustedes, pero una posible solución es usar Kafka + Spark Streaming. Su aplicación debe colocar las imágenes en un formato binario en la cola de Kafka mientras Spark las consumirá y procesará en micro lotes en el clúster, actualizando a los usuarios a través de un tercer componente (al menos poniendo el estado de procesamiento de la imagen en Kafka para otra aplicación) para procesarlo)

Pero, en general, la información que proporcionó no está completa para recomendar una buena arquitectura para su caso específico

Soy nuevo en hadoop y voy a desarrollar una aplicación que procesará múltiples imágenes usando hadoop y mostrará a los usuarios los resultados en vivo, mientras que el cómputo está en progreso. El enfoque básico es distribuir ejecutable y un montón de imágenes y recopilar los resultados.

¿Puedo obtener resultados de forma interactiva mientras el proceso de computación está en progreso?

¿Hay alguna otra alternativa que la transmisión de hadoop, para ese caso de uso?

¿Cómo puedo alimentar ejecutables con imágenes? No puedo encontrar ningún otro ejemplo que alimentarlo con stdin.


Como dice 0x0FFF en otra respuesta, la pregunta no proporciona suficientes detalles para recomendar una arquitectura adecuada. Aunque esta pregunta es antigua, solo estoy agregando mi investigación que hice sobre este tema para que pueda ayudar a cualquiera en su investigación.

Spark es una excelente forma de procesar en sistemas distribuidos. Pero no tiene una comunidad fuerte trabajando en OpenCV. Storm es otro sistema de computación distribuido en tiempo real, gratuito y de fuente abierta de Apache. Storm facilita el procesamiento confiable de flujos ilimitados de datos, haciendo para el procesamiento en tiempo real lo que Hadoop hizo para el procesamiento por lotes.

StormCV es una extensión de Apache Storm específicamente diseñada para soportar el desarrollo de tuberías de visión por computadora distribuidas. StormCV permite el uso de Storm para el procesamiento de video mediante la adición de operaciones de visión por computador (CV) y el modelo de datos. La plataforma usa Open CV para la mayoría de sus operaciones de CV y ​​es relativamente fácil de usar esta biblioteca para otras funciones.

Hay algunos ejemplos de uso de tormentas con OpenCV. Hay ejemplos en su página oficial de git hub. Es posible que desee ver este ejemplo de detección de rostros e intentar realizar la detección humana: https://github.com/sensorstorm/StormCV/blob/master/stormcv-examples/src/nl/tno/stormcv/example/E2_FacedetectionTopology. java .


En realidad, puede crear su lógica personalizada utilizando Hadoop Storm framework. Puede integrar fácilmente cualquier funcionalidad de una biblioteca específica de Computer Vision y distribuirla a través de los pernos de este marco. Además Storm tiene una gran extensión llamada servidor DRPC que le permite consumir su lógica como una simple llamada RPC. Puede encontrar un ejemplo simple de cómo puede procesar archivos de video a través de Storm usando detección de rostros OpenCV en mi artículo Consumir OpenCV a través del servidor HADOOP Storm DRPC de .NET