1

こんにちは、私は Python が初めてで、Python を使用して Viola-Jones の顔検出アルゴリズムを実装しています。Adaboost を使用して haar-feature を選択している間、私のコードでは、ブーストの各ラウンドで 1 つの haar-feature を選択するのに非常に時間がかかります (約 18 時間近く)。どういうわけか、haar 機能の評価にかかる時間は、私のコードで最も時間のかかる作業であることがわかりました。以下のpythonコードを提示しています:

リスト: インテグラル イメージのリスト

(x,y,h,w,f,p): 位置 (x,y) の Haar 特徴。h と w は、haar 機能の 1 つの四角形の高さと幅です。これは、2 つの四角形 ( |----|----|) の高さの合計が h で、幅の合計が 2*w であることを意味します。f は haar 特徴タイプで、p はパリティです。

def EvaluateHaar(List,(x,y,h,w,f,p)):       

    def Zero():        

        if x==0 and y==0:       
           bright = (i[x+h-1,y+w-1]+0)-(0+0)       
           dark = (i[x+2*h-1,y+w-1]+0)-(i[x+h-1,y+w-1]+0)       

        elif y==0:       
           bright = (i[x+h-1,y+w-1]+0)-(i[x-1,y+w-1]+0)      
           dark = (i[x+2*h-1,y+w-1]+0)-(i[x+h-1,y+w-1]+0)      

        elif x==0:       
           bright = (i[x+h-1,y+w-1]+0)-(0+i[x+h-1,y-1])     
           dark = (i[x+2*h-1,y+w-1]+i[x+h-1,y-1])-(i[x+h-1,y+w-1]+i[x+2*h-1,y-1])     

        else:    
           bright = (i[x+h-1,y+w-1]+i[x-1,y-1])-(i[x-1,y+w-1]+i[x+h-1,y-1])       
           dark = (i[x+2*h-1,y+w-1]+i[x+h-1,y-1])-(i[x+h-1,y+w-1]+i[x+2*h-1,y-1])

        return bright, dark 

    def One():

         if x==0 and y==0:     
            bright = (i[x+h-1,y+2*w-1]+0)-(0+i[x+h-1,y+w-1])      
            dark = (i[x+h-1,y+w-1]+0)-(0+0)     

         elif y==0:     
             bright = (i[x+h-1,y+2*w-1]+i[x-1,y+w-1])-(i[x-1,y+2*w-1]+i[x+h-1,y+w-1])    
             dark = (i[x+h-1,y+w-1]+0)-(i[x-1,y+w-1]+0)     

         elif x==0:       
              bright = (i[x+h-1,y+2*w-1]+0)-(0+i[x+h-1,y+w-1])     
              dark = (i[x+h-1,y+w-1]+0)-(0+i[x+h-1,y-1])     

         else:     
              bright = (i[x+h-1,y+2*w-1]+i[x-1,y+w-1])-(i[x-1,y+2*w-1]+i[x+h-1,y+w-1])     
              dark = (i[x+h-1,y+w-1]+i[x-1,y-1])-(i[x-1,y+w-1]+i[x+h-1,y-1])    

         return bright, dark 

    options = {0 : Zero, 
               1 : One,   
    }
    R = []     
    append1 = R.append     

    for i in List:      

        bright,dark = options[f]()     
        if p == 1:     
           hf = (dark-bright)      
        else:     
           hf = (bright-dark)     
        append1(hf)
    return R

上記のコードは、2 つの haar 機能タイプ two-rectangle Horizo​​ntal haar-feature と two-rectangle vertical haar feature を評価します。

Pythonを使用してhaar-featuresを評価する最速の方法はありますか? タイミング要因に対処できるように、上記のコードを改善するための提案。ここで私が最も気になるのは、何よりもタイミング要因です。

ありがとう!

4

0 に答える 0