Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 使用hadoop处理图像_Image Processing_Hadoop_Mapreduce_Hdfs_Hadoop Streaming - Fatal编程技术网

Image processing 使用hadoop处理图像

Image processing 使用hadoop处理图像,image-processing,hadoop,mapreduce,hdfs,hadoop-streaming,Image Processing,Hadoop,Mapreduce,Hdfs,Hadoop Streaming,我是hadoop新手,我将开发一个应用程序,使用hadoop处理多个图像,并向用户实时显示结果,同时他们正在进行计算。基本方法是分发可执行文件和一堆图像并收集结果 我可以在计算过程中以交互方式获得结果吗 对于这样的用例,除了hadoop流媒体,还有其他选择吗 如何为可执行文件提供图像?除了用stdin喂它,我找不到其他例子 对于在Hadoop上处理图像,组织计算的最佳方法是: 将图像存储在序列文件中。键-图像名称或其ID,值-图像二进制数据。这样,您将拥有一个包含所有需要处理的图像的文件。如果有

我是hadoop新手,我将开发一个应用程序,使用hadoop处理多个图像,并向用户实时显示结果,同时他们正在进行计算。基本方法是分发可执行文件和一堆图像并收集结果

我可以在计算过程中以交互方式获得结果吗

对于这样的用例,除了hadoop流媒体,还有其他选择吗


如何为可执行文件提供图像?除了用stdin喂它,我找不到其他例子

对于在Hadoop上处理图像,组织计算的最佳方法是:

  • 将图像存储在序列文件中。键-图像名称或其ID,值-图像二进制数据。这样,您将拥有一个包含所有需要处理的图像的文件。如果有动态添加到系统中的图像,请考虑将它们聚合到日常序列文件中。我认为您不应该对这个序列文件使用任何压缩,因为一般的压缩算法不能很好地处理图像
  • 处理图像。这里有许多选项可供选择。首先是使用Hadoop MapReduce并用Java编写程序,就像使用Java一样,您可以读取序列文件并在每个映射步骤上直接从中获取“值”,其中“值”是二进制文件数据。因此,您可以运行任何处理逻辑。第二种选择是Hadoop流。它有一个限制,即所有数据都进入应用程序的stdin,结果从stdout读取。但您可以通过用Java编写自己的InputFormat来克服这一问题,该格式将序列文件中的图像二进制数据序列化为Base64字符串,并将其传递给通用应用程序。第三种选择是使用Spark来处理这些数据,但您的编程语言仍然有限:Scala、Java或Python
  • 开发Hadoop是为了简化对大量数据的批处理。Spark本质上是相似的-它是一个批处理工具。这意味着您无法在处理所有数据之前获得任何结果。Spark Streaming是一个稍微不同的案例——在这里,您使用1-10秒的微批次,并分别处理每个批次,因此一般来说,您可以使其适用于您的案例
  • 我不知道您的完整案例,但一个可能的解决方案是使用Kafka+Spark流媒体。您的应用程序应将二进制格式的图像放入Kafka队列,而Spark将在集群上以微批量方式消费和处理它们,并通过第三个组件更新用户(至少通过将图像处理状态放入Kafka以供其他应用程序处理)


    但一般来说,您提供的信息并不完整,无法为您的具体案例推荐一个好的体系结构

    正如0x0FFF在另一个回答中所说,该问题没有提供足够的细节来推荐一个合适的体系结构。虽然这个问题很老了,但我只是添加了我在这个主题上所做的研究,以便对任何人的研究都有所帮助

    Spark是一种在分布式系统上进行处理的好方法。但它没有一个强大的社区在OpenCV上工作。Storm是另一个Apache的免费开源分布式实时计算系统。Storm使可靠地处理无界数据流变得容易,实现了Hadoop对批处理所做的实时处理

    StormCV是Apache Storm的扩展,专门设计用于支持分布式计算机视觉管道的开发。StormCV通过添加特定于计算机视觉(CV)的操作和数据模型,使Storm能够用于视频处理。该平台的大部分CV操作都使用OpenCV,而将该库用于其他功能相对容易


    这里有几个将storm与OpenCV一起使用的示例。在他们的官方git hub页面上有一些例子。您可能想看看这个人脸检测示例,并尝试它进行人体检测-。

    您可以使用Hadoop Storm framework创建自定义逻辑。您可以轻松地集成某些特定计算机视觉库的任何功能,并将其分布到该框架的各个部分。除此之外,Storm还有一个很棒的扩展名DRPC server,它允许您将逻辑作为简单的RPC调用使用。在我的文章中,您可以找到一个简单的示例,说明如何使用OpenCV人脸检测通过Storm处理视频文件

    Hadoop streaming(又名MR)本质上是面向批处理的。您需要寻找能够实时处理数据的框架(如Storm/Samza/Spark),还可以支持处理二进制数据。