本發明涉及智能圖像處理領域,尤其涉及一種圖像處理系統及圖像處理的方法。
背景技術:
智能圖像處理算法特別是人工智能方面的算法,一般由于計算復雜,例如深度學習都需要強大的計算資源。該領域最重要的問題,是解決算法高性能及加速問題。早期,人們很容易想到利用云計算的海量處理資源來擴展計算能力,如Google(谷歌)著名的貓臉識別,建立了一個9層的深度神經網絡,運行在16000個CPU(中央處理器)組成的服務器集群,經過3天得出結果。這種計算的缺點是,計算速度慢。另外一種就是利用GPU(Graphical Processing Unit,圖形處理器)進行加速。如貓臉識別實驗中,一位名叫Adam Coates的斯坦福大學研究人員想出了一個更好的解決方案,他用一種不同的微處理器(GPU),將三臺計算機連貫在一起,讓它們像是一個系統一樣運行,結果與Google數千臺計算機的運行效果是一樣的。這絕對是一個非凡的成就。
兩種方法各有優缺點,分布式計算速度慢,但很容易擴展,能充分利用現已部署的海量CPU資源,投資低。GPU運算速度快,但GPU是比較新的硬件設備,大量使用需要大量的投資。
當前,Hadoop(Hadoop Distributed File System,Hadoop分布式文件系統,大量數據分布式處理軟件框架)系統已經有了廣泛的使用,也出現了基于Hadoop的分布式圖像處理方案。大批量圖像處理這種計算密集型的應用也給分布式系統的設計帶來了一定的挑戰,而Hadoop在這種應用中有其自身的不足之處。例如,全量場景,任務內串行;重吞吐量,響應時 間完全沒有保證等缺點,最致命的是Hadoop不適合做實時分析系統,這在一定程度上限制了Hadoop的應用場景。而傳統的分布式圖像處理系統,多數基于遠程過程調用和NFS(Network File System,網絡文件系統)實現,在系統通信和存儲上也存在先天的不足。
另外,若涉及海量圖像分析處理的時候,如果以流的形式在系統中傳遞會嚴重消耗網絡帶寬,增加響應時間。
技術實現要素:
本發明要解決的技術問題是提供一種圖像處理系統及圖像處理的方法,以提高處理大批量圖像文件的效率。
為了解決上述技術問題,本發明提供了一種圖像處理系統,其中,包括:
顯示模塊,用于接收用戶上傳的一張或多張圖像,將所述圖像上傳到存儲模塊,向處理模塊發送第一消息;在接收到所述處理模塊的第二消息后,根據所述第二消息從所述存儲模塊下載對應處理后圖像并進行顯示;
所述處理模塊,用于在接收到所述第一消息后,根據所述第一消息從所述存儲模塊下載圖像并進行圖像處理,將處理后的圖像上傳到所述存儲模塊,向所述顯示模塊發送所述第二消息;
所述存儲模塊,用于存儲所述顯示模塊和所述處理模塊上傳的圖像。
進一步地,上述圖像處理系統還具有下面特點:
所述處理模塊,還用于在接收到所述第一消息后解析所述第一消息,解析出的信息包括圖像的存儲路徑信息,根據所述圖像的存儲路徑信息從所述存儲模塊下載對應的圖像。
進一步地,上述圖像處理系統還具有下面特點:
所述處理模塊,進行圖像處理包括:將所述圖像轉化成字節流,調用對應的圖像算法對所述字節流進行處理。
進一步地,上述圖像處理系統還具有下面特點:
所述處理模塊,進行圖像處理后還用于:將圖像處理日志信息上傳到所述存儲模塊。
進一步地,上述圖像處理系統還具有下面特點:所述顯示模塊,接收到所述處理模塊的第二消息后還用于,從所述存儲模塊下載對應的圖像處理日志信息并顯示。
進一步地,上述圖像處理系統還具有下面特點:所述第一消息為卡夫卡kafka分布式發布訂閱消息系統消息。
進一步地,上述圖像處理系統還具有下面特點:所述顯示模塊,每接收用戶上傳的一張圖像向所述處理模塊發送一條所述第一消息。
進一步地,上述圖像處理系統還具有下面特點:所述第一消息攜帶圖像的存儲路徑信息。
進一步地,上述圖像處理系統還具有下面特點:所述第一消息還攜帶用戶設置的圖像算法參數和算法類型的信息。
進一步地,上述圖像處理系統還具有下面特點:所述算法類型包括以下的任一種:
圖像壓縮算法、文字識別、不良圖像檢測和以圖搜圖。
進一步地,上述圖像處理系統還具有下面特點:所述第二消息攜帶所述處理后的圖像和日志信息的存儲路徑信息。
進一步地,上述圖像處理系統還具有下面特點:所述第二消息為卡夫卡kafka分布式發布訂閱消息系統消息。
進一步地,上述圖像處理系統還具有下面特點:所述存儲模塊為Hadoop分布式文件系統HDFS。
為了解決上述問題,本發明還提供了一種圖像處理的方法,應用于上述的圖像處理系統,包括:
接收用戶上傳的一張或多張圖像,存儲所述圖像;
下載所述圖像,并進行圖像處理,存儲處理后的圖像;
下載所述處理后的圖像并進行顯示。
進一步地,上述方法還具有下面特點:所述進行圖像處理包括:
將所下載的圖像數據轉化成字節流,調用對應的圖像算法對所述字節流進行處理。
進一步地,上述方法還具有下面特點:所述進行圖像處理后,還包括:
存儲圖像處理日志信息。
進一步地,上述方法還具有下面特點:還包括:
下載所述圖像處理日志信息并進行顯示。
進一步地,上述方法還具有下面特點:
所述存儲所述圖像包括:將所述圖像存儲于Hadoop分布式文件系統HDFS;
所述存儲處理后的圖像,包括:將所述處理后的圖像和圖像處理日志信息存儲于所述Hadoop分布式文件系統HDFS。
綜上,本發明提供一種圖像處理系統及圖像處理的方法,可以提高處理大批量圖像文件的效率。
附圖說明
圖1為本發明實施例的圖像處理系統的示意圖;
圖2為本發明應用示例的圖像處理系統的示意圖;
圖3為本發明實施例的圖像處理的方法的流程圖。
具體實施方式
為使本發明的目的、技術方案和優點更加清楚明白,下文中將結合附圖對本發明的實施例進行詳細說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互任意組合。
本發明的目的是為了克服現有技術的缺陷,本實施例提供一種圖像處理系統,如圖1所示,本實施例的圖像處理系統包括:
顯示模塊,用于接收用戶上傳的一張或多張圖像,將所述圖像上傳到存儲模塊,向處理模塊發送第一消息;在接收到所述處理模塊的第二消息后,根據所述第二消息從所述存儲模塊下載對應的圖像并進行顯示;
所述處理模塊,用于在接收到所述第一消息后,根據所述第一消息從所述存儲模塊下載圖像并進行圖像處理,將處理后的圖像上傳到所述存儲模塊,向所述顯示模塊發送所述第二消息;
所述存儲模塊,用于存儲所述顯示模塊和所述處理模塊上傳的圖像。
在一優選實施例中,所述處理模塊,還可以用于在接收到所述第一消息后解析所述第一消息,解析出的信息包括圖像的存儲路徑信息,根據所述圖像的存儲路徑信息從所述存儲模塊下載對應的圖像。
在一優選實施例中,所述處理模塊進行圖像處理可以包括:將所述圖像轉化成字節流,調用對應的圖像算法對所述字節流進行處理。
本實施例中的存儲模塊可以采用HDFS(Hadoop Distributed File System,Hadoop分布式文件系統)存儲模塊,用于存儲圖像。
本實施例,將CPU與GPU相結合,充分利用分布式集群的擴展性和GPU運行的高速度,并進行研究;所述處理模塊可以選擇實時處理性能佳的Storm(風暴分布式實時計算系統)(一個開源的分布式實時計算系統),目的是讓數據分析更加實時高效。
另外,本實施例中,將待處理的圖像以及處理后的圖像或結果全部存儲到HDFS;在調用圖像處理算法之前將圖像路徑信息轉換成字節流,以及在完成圖像分析后將處理后的圖像或結果以字節流發送出去,其他環節傳遞的都是HDFS中圖像存儲的路徑信息,這樣大大減輕了網絡負擔,處理速度更快。
對于海量圖像,采用Kafka(卡夫卡,一種高吞吐量的分布式發布訂閱消息系統)消息隊列,每張圖像處理任務就發送一條kafka消息到Storm系 統。實現多條消息同時并發處理,避免Storm系統中循環單條消息處理。
圖2為本發明應用示例的圖像處理系統的示意圖,如圖2所示,本實施例的圖像處理系統包括以下模塊:可視化UI(用戶界面)(相當于上述的顯示模塊),Kafka消息隊列模塊,HDFS、Storm模塊,智能圖像處理算法模塊。其中,
可視化UI:該UI上,用戶可以選擇圖像算法類型,設置算法參數,可以上傳本地圖像(單張圖像或文件夾)。用戶點擊提交按鈕后,就會將選擇的圖像處理算法任務提交到系統中,任務便開始啟動。任務啟動后,先將用戶上傳的圖像存儲到HDFS中,并向Storm模塊發送Kafka消息。
Kafka消息隊列模塊:kafka是一種高吞吐量的分布式發布訂閱消息系統,通過O(1)(常量復雜度)的磁盤數據結構提供消息的持久化,具有高吞吐量和長時間的穩定性能等特點。該模塊負責整個圖像分析系統的消息發送和接收,在輸入端,將圖像路徑、算法類型、算法參數等信息發送給Storm模塊;在輸出端,將Storm模塊計算得到的結果路徑,甚至是算法處理的trace(跟蹤)日志等信息發送到可視化界面后,由界面將圖像處理后的結果展示出來。
HDFS:在實施例中,HDFS除了負責存儲用戶上傳的圖像外,圖像算法處理后的結果也會存到這里。避免系統中大批量傳遞圖像流而導致的帶寬消耗。
Storm模塊:Storm是一套極具可擴展能力、快速驚人且具備容錯能力的開源實時分布計算系統,其高度專注于流處理領域。Storm在事件處理與增量計算方面表現突出,能夠以實時方式根據不斷變化的參數對數據流進行處理。該模塊在系統中承擔接收kafka消息、解析拆分消息字段、從HDFS下載和上傳圖像、調度算法處理等功能,屬于核心處理模塊。
智能圖像處理模塊:該模塊是算法核心,所有智能圖像算法都封裝在這個模塊中。本實施例的圖像算法基本上都是用C或C++編碼實現的,需要將每個算法封裝成.so文件,并提供可調用的Java接口,實現圖像算法的調用。
圖3為本發明實施例的圖像處理的方法的流程圖,如圖3所示,本實施例的方法應用于上述的圖像處理系統,包括以下步驟:
步驟11、接收用戶上傳的一張或多張圖像,存儲所述圖像;
步驟12、下載所述圖像,并進行圖像處理,存儲處理后的圖像;
步驟13、下載所述處理后的圖像并進行顯示。
本實施例的圖像處理的方法處理圖像的速度更快,同時可以減少網絡帶寬消耗。
以下以兩個具體實施例對本發明的方法進行詳細的說明。
實施例一
本實施例的圖像處理的方法包括以下步驟:
步驟101:用戶在可視化UI上上傳待處理圖像,設置算法相關參數,點擊提交,即向系統提交了圖像處理任務;
步驟102:可視化UI首先將用戶上傳的圖像全部存儲到HDFS,同時記錄所有圖像文件的存放路徑信息;
步驟103:可視化UI發送Kafka消息到Storm模塊,消息中攜帶HDFS單張圖像存放路徑信息、界面上設置的圖像算法參數、算法類型等信息;每處理一張圖像都會發送一個kafka消息,可一直連續發多條消息;
所述算法類型包括但不限于:圖像壓縮、文字識別(例如,OCR(Optical Character Recognition,光學字符識別))、不良圖像檢測、以圖搜圖。
步驟104:Storm模塊中KafkaSpout(kafka消息源)用來接收Kafka消息,并將消息發給第一個bolt(消息處理者)進行消息字段解析拆分,拆分后的字段為:消息號(sessionid)、圖像在HDFS上的存儲路徑、圖像參數、算法類型等信息。
步驟105:拆分后的字段發送到第二個bolt:ReadHdfsBolt;
ReadHdfsBolt會根據每張圖像的存儲路徑信息從HDFS上下載圖像并轉化成字節流。
步驟106:轉換后的字節流發送到第三個bolt:AlgorithmBlot;
AlgorithmBlot根據算法類型消息字段,調用對應的智能圖像算法對字節流進行處理,得到相應的處理結果(圖像或文字等)。
本實施例中,AlgorithmBlot調用已封裝好的相應圖像算法java接口。其中,字節流作為接口的入參,圖像處理后得到的結果轉換成字節流。
其中,圖像處理算法基本都是C或C++編碼實現的,事先需要將算法封裝成.so文件,并加載到工程中;而封裝的java接口通過jni方式調算法.so文件。
步驟107:圖像算法處理后得到結果(圖像或文字等)以字節流的形式發送到第四個bolt:WriteHdfsBlot;
WriteHdfsBlot將字節流轉換成圖像格式或其他類型的處理結果存儲到HDFS中。
步驟108:最后將HDFS中處理結果所在的路徑等信息傳遞到最后一個bolt:KafkaBolt。
KafkaBolt將這些數據信息以kafka消息發送給可視化UI界面。
步驟109:可視化界面接收消息后,根據HDFS上存儲的處理結果路徑信息,從HDFS上下載處理后的圖像或其他結果,并展示到界面上。
采用本發明實施例所述的圖像處理的方法,與現有技術相比,可適用于實時性要求較高的場景,應用范圍更廣,處理速度更快,同時減少了網絡帶寬消耗,降低了算法處理時間。
本實施例中,用戶在可視化界面上上傳待處理的圖像,同時設計算法類型以及參數后,向Storm模塊中提交圖像處理任務。任務啟動后,首先將圖像存儲到HDFS中,并將圖像路徑信息發送kafka消息到Storm模塊中。Storm模塊負責從HSFS存儲模塊中下載圖像并轉換成字節流,并根據算法類型調用相關的算法接口。圖像經算法處理后得到的結果先存儲到HDFS中。最后Storm模塊將結果路徑信息以及處理日志等信息發送kafka消息到可視化界面,用于界面進行結果展示。
實施例二,本實施例以圖像壓縮算法為例,包括以下步驟:
步驟201:用戶在可視化UI上上傳待壓縮的圖像(一張或多張),選擇算法類型為:圖像壓縮,同時設置圖像壓縮算法壓縮因子參數(取值范圍在0~1,默認值為0.85),點擊提交按鈕,即向系統提交了圖像壓縮處理任務;
步驟202:可視化UI首先將用戶上傳的所有圖像全部存儲到HDFS中,同時記錄所有圖像文件的存放路徑;
步驟203:可視化UI發送Kafka消息到Storm模塊,除了消息號sessionid外,消息中還攜帶HDFS單張圖像存放路徑、界面上設置的圖像算法壓縮因子參數、算法類型(圖像壓縮算法)等信息;每處理一張圖像都會發送一個kafaka消息,可一直連續發多條消息;
步驟204:Storm模塊中KafkaSpout用來接收Kafka消息,并將消息字段解析拆分,拆分后的字段為:消息號sessionid、圖像在HDFS上的存儲路徑信息、壓縮因子參數、算法類型(圖像壓縮算法);
步驟205:拆分后的字段發送到第二個bolt:ReadHdfsBolt;ReadHdfsBolt會根據每張圖像的存儲路徑信息從HDFS上下載圖像并轉化成字節流;
步驟206:轉換后的字節流發送到第三個bolt:AlgorithmBlot;AlgorithmBlot里面判斷算法類型消息字段為圖像壓縮,則調用已封裝好的圖像壓縮圖像算法java接口。其中,字節流作為接口的入參,進行圖像壓縮處理后得到壓縮后的圖像流;
其中,圖像處理算法基本都是C或C++編碼實現的,事先需要將算法封裝成.so文件,并加載到工程中;而封裝的java接口通過jni方式調算法.so文件。
步驟207:壓縮后的圖像以字節流的形式發送到第四個bolt:WriteHdfsBlot;
WriteHdfsBlot將字節流轉換成圖像格式存儲到HDFS中。
步驟208:最后將壓縮后圖像在HDFS中的路徑等信息傳遞到最后一個bolt:KafkaBolt。
KafkaBolt將這些數據信息以kafka消息發送出去。
步驟209:可視化UI收到消息后,根據返回的圖像路徑信息從HDFS上下載壓縮后的圖像,并展示在UI上。
本領域普通技術人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關硬件完成,所述程序可以存儲于計算機可讀存儲介質中,如只讀存儲器、磁盤或光盤等。可選地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現。相應地,上述實施例中的各模塊/單元可以采用硬件的形式實現,也可以采用軟件功能模塊的形式實現。本發明不限制于任何特定形式的硬件和軟件的結合。
以上僅為本發明的優選實施例,當然,本發明還可有其他多種實施例,在不背離本發明精神及其實質的情況下,熟悉本領域的技術人員當可根據本發明作出各種相應的改變和變形,但這些相應的改變和變形都應屬于本發明所附的權利要求的保護范圍。