MapReduce处理“大量”图片

      

网上关于MapReduce的实例,到处都是WordCount或者变形,但是想做点图片处理或者视频处理的应用。于是就慢慢一点点的学习。

         环境:虚拟机,ubuntu-desktop-12.04,openjdk1.7,opencv3.0

         第一步,必须是安装hadoop环境,由于没有足够的机器,就装个虚拟机搞个伪分布式吧。

比如:http://www.cnblogs.com/yunkaifa/p/4470422.html

 

         第二步,先跑个WordCount。成功之后,再分析一下源码。

比如:http://blog.csdn.net/devtao/article/details/16071869

 

         既然要处理图片,那么就得有图像处理的工具,然而图像处理的东西c,c++比较牛逼吧。但是我已经不会C,C++了。所以还是找了opencv的javaapi。更好的是opencv自带图像处理分析的例子可以直接用。

         第三步,opencv环境配置。

         比如https://www.raben.com/book/export/html/3

 

         第四步,用javaapi跑个图像分析的程序,人脸识别。

         比如http://blog.csdn.net/nupt123456789/article/details/10011693

 

       第五步,用mapreduce跑图像人脸识别。大概就是分布式 海量图片 人脸检索 系统^_^。那么问题来了,wordcount只会操作文本,图片怎么啊?搜啊搜,找到一些解决方案。

比如https://eldadlevy.wordpress.com/2011/02/05/hadoop-binary-files-processing-entroduced-by-image-duplicates-finder/

 

         第六步,代码拼接。没有比如。

 

         第七步,拼接的代码,成功运行起来了。但是才没几张图片(178张小图片),竟然抛出了outofmerry(虚拟机2G内存),我擦有点差。由于第五步的代码,输入图片是本地文件,所以拼接代码里有一段将hdfs的图片流保存到本地。不知道这对代码性能有没有影响。然后想着把hdfs上的图片流(SequenceFile文件)直接处理。然后就找byte[] 转Mat,比如https://community.oracle.com/thread/3686898。(这个就很无语了,试了好久都不行,突然又莫名其妙的可以,简直了)。然后再运行,刚才的内存溢出就没有了。(虽然不知道内存溢出是不是这个原因,但是总觉得不把hdfs文件保存到本地,应该是有好处的)

         第八步,截图看下结果。性能什么的之后再说。第一列表示文件名,第二列表示是否有脸(也可以测脸的个数,但是opencv自带的准确度不高,真希望会做图像分析啊)。

 MapReduce处理“大量”图片_第1张图片           

下一步,希望能处理一下视频。

 


附上代码地址吧

http://download.csdn.net/detail/wzm112358/9711850


你可能感兴趣的:(mapreduce)