こんにちは、私は 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 Horizontal haar-feature と two-rectangle vertical haar feature を評価します。
Pythonを使用してhaar-featuresを評価する最速の方法はありますか? タイミング要因に対処できるように、上記のコードを改善するための提案。ここで私が最も気になるのは、何よりもタイミング要因です。
ありがとう!