本發(fā)明涉及一種fpga實現(xiàn)人臉檢測的方法。
背景技術(shù):
人臉檢測是人工智能目前應用比較多的一個方向,在公共安全、消費管理,廣告推動等諸多領(lǐng)域都有廣泛的應用。
傳統(tǒng)的人臉檢測都是運行在x86軟件平臺或者是嵌入式軟件平臺,但是這兩種應用都有比較明顯的缺陷。x86軟件平臺功耗很高,穩(wěn)定性較差,嵌入式平臺計算的速度已經(jīng)明顯趕不上應用的需求。
fpga作為一種可編程器件,可以允許使用者對芯片內(nèi)部的硬件電路進行變成,從而實現(xiàn)高速的并行輸出處理,這一特性使得fpga成為低功耗的高速人臉檢測上檢測上佳平臺,依據(jù)fpga特性對人臉檢測進行并行處理。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種fpga實現(xiàn)人臉檢測的方法,其利用fpga的高速并行特性對輸入的視頻流進行逐幀的人臉檢測,保證每幀圖像中的人臉都能檢測得到,讓人臉檢測的效率更高,性能更佳。
本發(fā)明采用的技術(shù)方案是,
一種fpga實現(xiàn)人臉檢測的方法,通過圖像縮放模塊調(diào)取視頻中的每一幀圖像,將調(diào)取的圖像按閾值比例逐級壓縮,即下一級是在上一級壓縮后的圖像基礎(chǔ)上按閾值比例壓縮,將壓縮后的各級圖像依次存入兩個緩存區(qū)域中,按照壓縮的先后順序,先壓縮的圖像先被檢測模塊中的圖像分塊單元調(diào)取,一旦緩存區(qū)域中的壓縮圖像被圖像分塊單元調(diào)取后,后續(xù)被壓縮的圖像將繼續(xù)放入該緩存區(qū)域中;通過檢測模塊依次調(diào)取兩個緩存區(qū)域中的壓縮圖像并進行圖像分塊和人臉檢測工作,其中,圖像分塊單元調(diào)取緩存區(qū)域中的壓縮圖像并將該壓縮圖像分成多個像素塊,圖像分塊單元對多個檢測單元進行調(diào)度,一旦任何一個檢測單元處于空閑狀態(tài),圖像分塊單元給該檢測單元下發(fā)一個開始檢測命令,并同時下發(fā)需要檢測的像素塊在內(nèi)存中的位置,收到檢測命令的檢測單元開始檢測,同時把自己的狀態(tài)設(shè)置為非空閑狀態(tài),一直到對該像素塊檢測完成,再把狀態(tài)設(shè)置為空閑狀態(tài),等待下一次的檢測命令,檢測單元的檢測完成后將檢測結(jié)果寫入fpga內(nèi)部的ram中;當一幀圖像檢測結(jié)束后,將寫入fpga內(nèi)部ram中的檢測結(jié)果寫入和軟件共享的內(nèi)存區(qū)中,供配合的軟件進一步查詢使用,然后進行下一幀圖像檢測。
所述方法具體包括以下步驟,
步驟1、通過圖像縮放模塊調(diào)取視頻中的一幀原始圖像;
步驟2、通過圖像縮放模塊將原始圖像以1.2的倍率依次壓縮,即下一級是在上一級壓縮后的圖像基礎(chǔ)上進行再壓縮,將壓縮后的每級圖像依次放入兩個緩存區(qū)域中,按照壓縮的先后順序,先壓縮的圖像先被檢測模塊中的圖像分塊單元調(diào)取,一旦緩存區(qū)域中的壓縮圖像被圖像分塊單元調(diào)取后,后續(xù)被壓縮的圖像將繼續(xù)放入該緩存區(qū)域中;
步驟3、通過檢測模塊依次調(diào)取兩個緩存區(qū)域中的壓縮圖像并進行圖像分塊和人臉檢測工作,
其中,圖像分塊單元調(diào)取一緩存區(qū)域中的壓縮圖像并將該壓縮圖像分成n個64*64像素的小塊,調(diào)度三個并行的檢測單元對分割圖像形成的n個64*64像素的小塊進行人臉檢測,一旦任何一個檢測單元處于空閑狀態(tài),圖像分塊單元給該檢測單元下發(fā)一個開始檢測命令,并同時下發(fā)需要檢測的64*64像素的小塊在內(nèi)存中的位置,收到檢測命令的檢測單元開始檢測,同時把自己的狀態(tài)設(shè)置為非空閑狀態(tài),一直到對該64*64像素的小塊檢測完成,再把狀態(tài)設(shè)置為空閑狀態(tài),等待下一次的檢測命令,檢測單元的檢測完成后將檢測結(jié)果寫入fpga內(nèi)部的ram中,當n個像素塊處理完后,判斷當前壓縮的圖像寬或高是否小于等于32個像素,若當前壓縮的圖像寬和高大于32個像素,圖像分塊單元調(diào)取另一緩存區(qū)域中的圖像,繼續(xù)進行圖像分塊和人臉檢測工作;
步驟4、當前壓縮的圖像寬或高小于等于32個像素,將寫入fpga內(nèi)部ram中的檢測結(jié)果寫入和軟件共享的內(nèi)存區(qū)中,供配合的軟件進一步查詢使用,然后進行下一幀圖像檢測。
當該級壓縮圖像的寬或高小于等于32個像素,表示從視頻中調(diào)取的這一幀圖像的人臉檢測結(jié)束,一幀圖像的所有的檢測結(jié)果得出后,面積重合度超過閾值的結(jié)果認為是同一張人臉,合并成一個人臉結(jié)果,然后將fpga內(nèi)部的ram中的檢測結(jié)果寫入和軟件共享的內(nèi)存區(qū)中,供配合的軟件進一步查詢使用。
在步驟3中,圖像分塊單元對圖像分塊時,64*64像素的小塊的左上角頂點從整幅圖像的左上角開始,由左向右由上至下依次移動,每次移動距離是32個像素,直至移動到圖像的上下邊緣為止,得到n個64*64像素的小塊。
在步驟3中,檢測單元在64*64像素的小塊中并行提取出32*32像素區(qū)域內(nèi)的多個特征,使用分類算法與預存在fpga中的模型進行運算得到此區(qū)域是否是一張人臉,并將結(jié)果寫入fpga內(nèi)部的ram中。
本發(fā)明主要是通過圖像縮放模塊和檢測模塊將視頻中的每一幀圖像進行圖像縮放、圖像分塊、人臉檢測、結(jié)果寫回幾個任務,并按流水作業(yè)方式進行處理。圖像縮放模塊開辟兩個緩存區(qū)域用于存放圖像縮放結(jié)果,使得圖像分塊單元能夠無間斷地、連續(xù)地調(diào)取調(diào)取緩存單元中的圖像,同時檢測模塊開辟人臉檢測步驟開辟了多個檢測單元處理分塊圖像的檢測任務,極大提高人臉檢測效率,確保視頻流每幀圖像中的所有人臉可以快速檢出。
附圖說明
圖1為本發(fā)明fpga檢測人臉的框圖;
圖2為本發(fā)明fpga檢測人臉的流程圖。
以下結(jié)合附圖和具體實施例對本發(fā)明作進一步詳述。
具體實施方式
本發(fā)明公開了一種fpga實現(xiàn)人臉檢測的方法,其通過圖像縮放模塊和檢測模塊實現(xiàn)視頻中每幀圖像中的人臉檢測,其中,檢測模塊將圖像分塊后開辟多個檢測單元處理人臉檢測任務,極大提高了人臉檢測效率。本發(fā)明的具體檢測方法如下:
步驟1、通過圖像縮放模塊調(diào)取視頻中的一幀原始圖像。
視頻可以看作是一幀一幀的圖像數(shù)據(jù),對視頻中的人臉檢測也就是對每一幀圖像中的人臉檢測。
步驟2、將調(diào)取的圖像按閾值比例逐級壓縮,即下一級是在上一級壓縮后的圖像基礎(chǔ)上按閾值比例壓縮,將壓縮后的各級圖像依次存入兩個緩存區(qū)域中,按照壓縮的先后順序,先壓縮的圖像先被檢測模塊中的圖像分塊單元調(diào)取,一旦緩存區(qū)域中的壓縮圖像被圖像分塊單元調(diào)取后,后續(xù)被壓縮的圖像將繼續(xù)放入該緩存區(qū)域中。
因檢測模塊中的檢測單元固定檢測32*32像素的人臉,所以需要對原始圖像進行壓縮。
本實施例中通過圖像縮放模塊將原始圖像以1.2的倍率依次壓縮,壓縮后的每級圖像依次放入緩存區(qū)域中以供檢測模塊調(diào)取。圖像縮放模塊在進行圖像縮放的過程中需要進行并行處理,以加快人臉檢測速度。圖像縮放并行處理的具體操作如下:提供兩個緩存區(qū)域來存儲各級壓縮后的圖像結(jié)果,縮放模塊將原始圖像壓縮1.2倍得到一級壓縮圖像,該一級壓縮圖像存入第一個緩存區(qū)域中;在一級壓縮圖像的基礎(chǔ)上再次壓縮1.2倍得到二級壓縮圖像,二級壓縮圖像存入第二個緩存區(qū)域中,在二級壓縮圖像存入第二緩存區(qū)域的同時,檢測模塊調(diào)取并處理第一緩存區(qū)域中的圖像。在二級壓縮圖像的基礎(chǔ)上再次壓縮1.2倍得到三級壓縮圖像,該三級壓縮圖像存入第一緩存區(qū)域中,于此同時,檢測模塊調(diào)取并處理第二緩存區(qū)域中的圖像,如此循環(huán)進行圖像壓縮。
步驟3、通過檢測模塊依次調(diào)取兩個緩存區(qū)域中的壓縮圖像并進行圖像分塊和人臉檢測工作,其中,圖像分塊單元調(diào)取緩存區(qū)域中的壓縮圖像并將該壓縮圖像分成多個像素塊,圖像分塊單元調(diào)度多個檢測單元對分割圖像形成的多個像素塊進行人臉檢測及結(jié)果比對,并將比對結(jié)果寫入fpga內(nèi)部的ram中。
圖像分塊單元把需要檢測的圖像分為64*64像素的小塊以便檢測單元檢測,分塊方法是小塊的左上角頂點從整幅圖像的左上角開始,由左向右由上至下依次移動,每次移動距離是32個像素,直至移動到圖像的上下邊緣為止,得到n個64*64像素的小塊。
為了保證檢測的速度,本實施例中通過三個檢測單元對上述分塊形成的64*64像素的小塊同時處理檢測任務,即在每一個64*64像素的小塊中檢測32*32像素的人臉。圖像分塊單元在對縮放后的圖像進行分塊的同時也對三個檢測單元進行調(diào)度,圖像分塊單元循環(huán)判斷三個檢測模塊的空閑狀態(tài),一旦任何一個檢測單元處于空閑狀態(tài),圖像分塊單元給該檢測單元下發(fā)一個開始檢測命令,并同時下發(fā)需要檢測的64*64像素的小塊在內(nèi)存中的位置,收到檢測命令的檢測單元開始檢測,同時把自己的狀態(tài)設(shè)置為非空閑狀態(tài),一直到對這次的64*64像素的小塊檢測完成,再把狀態(tài)設(shè)置為空閑狀態(tài),等待下一次的檢測命令。
檢測單元的人臉檢測工作主要是通過特征提取和結(jié)果比對兩個部分實現(xiàn)的,檢測單元檢在64*64像素的小塊中并行提取出32*32像素區(qū)域內(nèi)的5個特征,使用分類算法與預存在fpga中的模型進行運算得到此區(qū)域是否是一張人臉,也就是對這5個特征進行結(jié)果對比確定是否是一張人臉,并將結(jié)果寫入fpga內(nèi)部的ram中。該64*64像素的小塊檢測完成后檢測單元判斷n個像素小塊是否處理完成,如果沒有檢測完,檢測單元繼續(xù)檢測直至該級壓縮圖像的所有像素小塊檢測完成。
每一級壓縮圖像的像素小塊壓縮結(jié)束后,判斷該級壓縮圖像的寬或高是否小于等于32個像素,如果沒有,圖像分塊單元調(diào)取另一緩存區(qū)域中的壓縮圖像,重復上述的圖像分塊和人臉檢測任務。
步驟4、當前壓縮圖像的寬或高小于等于32個像素,將寫入fpga內(nèi)部ram中的檢測結(jié)果寫入和軟件共享的內(nèi)存區(qū)中,供配合的軟件進一步查詢使用,然后進行下一幀圖像檢測。
當前壓縮圖像的寬或高小于等于32個像素,也就表示從視頻中調(diào)取的這一幀圖像的人臉檢測結(jié)束,一幀圖像的所有的檢測結(jié)果得出后,面積重合度超過閾值的結(jié)果認為是同一張人臉,合并成一個人臉結(jié)果,然后將fpga內(nèi)部的ram中的檢測結(jié)果寫入和軟件共享的內(nèi)存區(qū)中,供配合的軟件進一步查詢使用。
視頻中的一幀圖像檢測結(jié)束后,圖像縮放模塊調(diào)取下一幀圖像,重復上述圖像縮放、圖像分塊以及人臉檢測的工作,并將結(jié)果寫入和軟件共享的內(nèi)存區(qū)中,如此重復也就實現(xiàn)了對視頻中人臉的高速檢測。
本發(fā)明主要是通過圖像縮放模塊和檢測模塊將視頻中的每一幀圖像進行圖像縮放、圖像分塊、人臉檢測、結(jié)果寫回幾個任務,并按流水作業(yè)方式進行處理。圖像縮放模塊開辟兩個緩存區(qū)域用于存放圖像縮放結(jié)果,使得圖像分塊單元能夠無間斷地、連續(xù)地調(diào)取調(diào)取緩存單元中的圖像,同時檢測模塊開辟人臉檢測步驟開辟了多個檢測單元處理分塊圖像的檢測任務,極大提高人臉檢測效率,確保視頻流每幀圖像中的所有人臉可以快速檢出。