Processar imagens com o hadoop

sou novo no hadoop e vou desenvolver uma aplicação que processa várias imagens usando o hadoop e mostra aos utilizadores os resultados ao vivo, enquanto a computação está em progresso. A abordagem básica é distribuir executável e um monte de imagens e recolher os resultados.

Posso obter resultados interativamente enquanto o processo de computação está em andamento?

existem outras alternativas para além do streaming hadoop, para este caso de Utilização?

Como posso alimentar o executável com imagens? Não encontro outros exemplos a não ser alimentá-lo com stdin.

Author: remdezx, 2014-04-14

3 answers

Para processar imagens em Hadoop, a melhor maneira de organizar os cálculos seria:

  1. guardar as imagens num ficheiro sequencial. Nome da chave-imagem ou o seu ID, dados binários de Imagem - valor. Desta forma você terá um único arquivo com todas as imagens que você precisa processar. Se você tem imagens adicionadas dinamicamente ao seu sistema, considere agregá-las em arquivos de sequência diária. Eu não acho que você deve usar qualquer compressão para este arquivo de sequência como os algoritmos de compressão gerais não trabalhar bem com imagens
  2. processe as imagens. Aqui você tem uma série de opções para escolher. Primeiro é usar Hadoop MapReduce e escrever um programa em Java como com Java você seria capaz de ler o arquivo de sequência e obter diretamente o "valor" a partir dele em cada passo do mapa, onde o "valor" é os dados de arquivo binário. Dado isto, você pode executar qualquer lógica de processamento. A segunda opção é o Streaming Hadoop. Tem uma limitação que todos os dados vão para stdin de sua aplicação e o resultado é lido a partir de stdout. Mas você pode superar isso escrevendo seu próprio InputFormat em Java que iria serializar os dados binários de imagem a partir de arquivo sequencial como string Base64 e passá-lo para sua aplicação genérica. A terceira opção seria usar o Spark para processar esses dados, mas novamente você está limitado nas linguagens de programação choise: Scala, Java ou Python.
  3. o Hadoop foi desenvolvido para simplificar o processamento em lote sobre as grandes quantidades de dados. Faísca é essentialy similar-é uma ferramenta de lote. Isto significa que tu ... não é possível obter qualquer resultado antes de todos os dados serem processados. Spark Streaming é um caso um pouco diferente-lá você trabalha com micro lotes de 1-10 segundos e processar cada um deles separadamente, de modo que, em geral, você pode fazê-lo funcionar para o seu caso.
Não sei o seu caso completo, mas uma solução possível é usar Kafka + Spark Streaming. A sua aplicação deverá colocar as imagens num formato binário na fila Kafka, enquanto a faísca irá consumi-las e processá-las em micro lotes na agrupar, actualizando os utilizadores através de um terceiro componente (pelo menos colocando o estado de processamento da imagem no Kafka para que outra aplicação a processe)

Mas, de um modo geral, a informação que forneceu não está completa para recomendar uma boa arquitectura para o seu caso específico

 2
Author: 0x0FFF, 2015-01-21 14:32:57

Como 0x0FFF diz em outra resposta, a pergunta não fornece detalhes suficientes para recomendar uma arquitetura adequada. Embora esta pergunta seja antiga, estou apenas adicionando minha pesquisa que fiz sobre este tópico para que possa ajudar qualquer um em sua pesquisa.

A faísca é uma óptima forma de processar em sistemas distribuídos. Mas não tem uma comunidade forte a trabalhar no OpenCV. Storm é outro sistema de computação em tempo real distribuído livre e de código aberto do Apache. Storm makes it fácil de processar fiavelmente fluxos de dados sem limites, fazendo para o processamento em tempo real o que Hadoop fez para o processamento em lote. StormCV é uma extensão da tempestade Apache projetada especificamente para apoiar o desenvolvimento de dutos de visão computadorizada distribuídos. StormCV permite o uso de Storm para processamento de vídeo adicionando a visão computacional (CV) operações específicas e modelo de dados. A plataforma usa CV aberto para a maioria de suas operações de CV e é relativamente fácil de usar esta biblioteca para outros funcao. Existem alguns exemplos de utilização de tempestade com OpenCV. Há exemplos na página oficial do Git hub. Você pode querer olhar para este exemplo de detecção de rosto e tentar fazer detecção humana - https://github.com/sensorstorm/StormCV/blob/master/stormcv-examples/src/nl/tno/stormcv/example/E2_FacedetectionTopology.java.
 0
Author: Tejus Prasad, 2016-10-03 01:11:26

Você pode realmente criar a sua lógica personalizada usando o framework Hadoop Storm. Você pode facilmente integrar qualquer funcionalidade de alguma biblioteca de visão de computador específico e distraí-lo através dos parafusos deste framework. Além disso, Storm tem uma grande extensão chamada DRPC server que lhe permite consumir a sua lógica como simples chamadas RPC. Poderá encontrar um exemplo simples de como pode processar ficheiros de vídeo através do Storm usando o OpenCV face detection no meu artigo consumindo o OpenCV através do Hadoop Storm DRPC Server from. net

 0
Author: Alex, 2017-03-16 15:45:05