1

嗨,我是 python 新手,使用 python 实现 Viola-Jones 人脸检测算法。虽然使用 Adaboost 进行 haar 特征选择,但我的代码在每一轮提升中选择一个 haar 特征需要很长时间(大约 18 小时)。不知何故,我发现评估 haar 特征所花费的时间是我的代码中最耗时的工作。我在下面展示python代码:

列表:积分图像列表

(x,y,h,w,f,p):位置 (x,y) 处的 Haar 特征。h 和 w 是 haar 特征中一个矩形的高度和宽度,这意味着两个矩形(|----|----|)的 haar 特征的总高度为 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

上面的代码评估了两个 haar 特征类型两个矩形水平 haar 特征和两个矩形垂直 haar 特征。

有没有使用 python 评估 haar 特征的最快方法?任何改进上述代码的建议,以便我可以处理时间因素。在这里,我最关心的是时间因素。

谢谢!

4

0 回答 0