在剛剛入手視頻圖像分析時,有點不知所措,後來通過查找了不少資料。本篇文章主要敘述圖像的分析處理,至於視頻,實際上視頻自己就是一個大文件,hadoop對於大文件處理是高效的,因此在MapReduce的處理上須要使用ffmepg將視頻切割爲圖像後再將圖像轉換爲javacv可識別的流數據便可。在其餘的環節處理視頻和圖像整體來講都是同樣的。html
有關圖像分析的處理總結以下:java
一、視頻與圖像文件在HDFS的存儲,若文件較小須要作合併處理,或採用HBASE存儲圖像,mapreduce經過HBase生成的HFile進行分佈式處理。算法
二、自定義實現Hadoop文件合併及文件切割的FileInputFormat的實現。數據庫
三、實現圖像切割後的圖像比特流轉換爲Javacv可以識別的圖像對象。編程
四、提供opencv支持的圖像分析開發環境與算法。框架
使用技術分佈式 |
框架說明ide |
HDFSoop |
圖像存儲在HDFS中post |
MapReduce |
Mapreduce實現分佈式處理或使用MapReduce操做HBase數據庫 |
HBase |
部分圖片可存放在HBASE中或將計算結果存放於HBase、HIVE、MYSQL中 |
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
筆者最終將其二者合二爲一了,待整理後附上連接。