在剛剛入手視頻圖像分析時,有點不知所措,后來經過查找了很多資料。本篇文章主要敘述圖像的分析處理,至於視頻,實際上視頻本身就是一個大文件,hadoop對於大文件處理是高效的,所以在MapReduce的處理上需要使用ffmepg將視頻切割為圖像后再將圖像轉換為javacv可識別的流數據即可。在其他的環節處理視頻和圖像總體來說都是一樣的。
有關圖像分析的處理總結如下:
1、視頻與圖像文件在HDFS的存儲,若文件較小需要做合並處理,或采用Hbase存儲圖像,mapreduce通過HBase生成的HFile進行分布式處理。
2、自定義實現Hadoop文件合並及文件切割的FileInputFormat的實現。
3、實現圖像切割后的圖像比特流轉換為Javacv能夠識別的圖像對象。
使用技術 |
框架說明 |
HDFS |
圖像存儲在HDFS中 |
MapReduce |
Mapreduce實現分布式處理或使用MapReduce操作HBase數據庫 |
HBase |
|
Hipi |
用於合並小的圖像文件,及切割算法。 |
JavaCV |
封裝了OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等計算機視覺編程人員常用庫的接口 |
1.1 圖片合並並存儲
方案1:
視頻與圖像文件需要存儲在HDFS文件系統上,由於Hadoop的分布式計算只適合處理大文件數據,故需要將來源的圖像進行合並處理,並存儲到HDFS上再進行MapReduce處理。 使用Hipi框架實現圖像的合並處理,生成HIB文件。
方案2(待研究):
將圖像直接存入HBase中,MapReduce直接操縱HBase的數據進行處理。
1.2 自定義文件切割算法
Hadoop在分布式計算時默認為TextInputFormat文本式的切割算法做MapReduce的默認運算,HIB文件需要對其進行文件切割后放入MapReduce做運算。
1.3 圖像格式轉換
HIB文件切割后的圖像格式需要轉換為JavaCV可處理的流式數據,保證JavaCV能夠順利的處理各類的圖像算法,如:直方圖、二值化等。
1.4 JavaCV開發框架
由於Hadoop是用Java語言編寫的,所以在處理方面使用Java有先天的優勢,而JavaCV又封裝了OpenCV、libdc1394、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
筆者最終將其兩者合二為一了,待整理后附上鏈接。