在刚刚入手视频图像分析时,有点不知所措,后来通过查找了不少资料。本篇文章主要叙述图像的分析处理,至于视频,实际上视频自己就是一个大文件,hadoop对于大文件处理是高效的,因此在MapReduce的处理上须要使用ffmepg将视频切割为图像后再将图像转换为javacv可识别的流数据便可。在其余的环节处理视频和图像整体来讲都是同样的。html
有关图像分析的处理总结以下:java
一、视频与图像文件在HDFS的存储,若文件较小须要作合并处理,或采用Hbase存储图像,mapreduce经过HBase生成的HFile进行分布式处理。mysql
二、自定义实现Hadoop文件合并及文件切割的FileInputFormat的实现。算法
三、实现图像切割后的图像比特流转换为Javacv可以识别的图像对象。sql
使用技术编程 |
框架说明数据结构 |
HDFS框架 |
图像存储在HDFS中分布式 |
MapReduce |
Mapreduce实现分布式处理或使用MapReduce操做HBase数据库 |
HBase |
|
Hipi |
用于合并小的图像文件,及切割算法。 |
JavaCV |
封装了OpenCV、libdc139四、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员经常使用库的接口 |
方案1:
视频与图像文件须要存储在HDFS文件系统上,因为Hadoop的分布式计算只适合处理大文件数据,故须要未来源的图像进行合并处理,并存储到HDFS上再进行MapReduce处理。 使用Hipi框架实现图像的合并处理,生成HIB文件。
方案2(待研究):
将图像直接存入HBase中,MapReduce直接操纵HBase的数据进行处理。
Hadoop在分布式计算时默认为TextInputFormat文本式的切割算法作MapReduce的默认运算,HIB文件须要对其进行文件切割后放入MapReduce作运算。
HIB文件切割后的图像格式须要转换为JavaCV可处理的流式数据,保证JavaCV可以顺利的处理各种的图像算法,如:直方图、二值化等。
因为Hadoop是用Java语言编写的,因此在处理方面使用Java有先天的优点,而JavaCV又封装了OpenCV、libdc139四、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员经常使用库的接口。因此须要搭建一套JavaCV的开发框架,以便于后续开发图像分析的各类业务场景。
参考文献:
HIPI (hadoop image processing interface)
http://abacusliu.weebly.com/1/post/2012/10/abouthipihadoopimageprocessinginterface.html
来看一下这一篇文章吧(合并小文件),这个国外一个牛人团队开发的Hipi框架,主要是功能是将给定的一个URL列表下载并合并为做者本身定义的HIB文件,MapReudce程序分解该文件并实现分布式处理。但HIPI只为咱们提供了JAVA方式的图像处理。
使用JavaCV处理人脸识别、二值化、灰度等图像处理算法的例子。
https://code.google.com/p/hadoop-computer-vision/source/checkout
笔者最终将其二者合二为一了,待整理后附上连接。