KEMBAR78
Particle Filter Tracking in Python | PDF
Particle Filter Tracking
                    in Python




12   1   8
About myself
         google it ➡ Kohta Ishikawa
                     (a professional skier is not me)




12   1   8
Particle




             distribution     empirical
                            approximation



12   1   8
Filter




             movement estimation    observation
                                       and
                                   Bayes update


12   1   8
Particle Filter




             particle movement   observation
                                    and
                                 resampling


12   1   8
Tracking




12   1   8
Tracking




12   1   8
Tracking




12   1   8
Tracking




12   1   8
Code
     def filtration(svs,mv,systemModel,likelihood):
         #
         dim = len(svs[1])
         N = len(svs)
         sigma = 2.0
         rnorm = stats.norm.rvs(0,sigma,size=N*dim)
         ranges = zip([N*i for i in range(dim)],
                      [N*i for i in (range(dim+1)[1:])])
         ws = np.array([rnorm[p:q] for p,q in ranges])
         ws = ws.transpose()

             #
             svs_predict = [systemModel.generate(sv,w) for sv,w in zip(svs,ws)]

             #
             normalization_factor = likelihood.normalization(svs_predict,mv)
             likelihood_weights = [likelihood.generate(sv,mv)/normalization_factor
                                   for sv in svs_predict]

             #
             svs_resampled = resampling(svs_predict,likelihood_weights)
             return(svs_resampled)

12   1   8
Code
         if(__name__=="__main__"):
             #
             img = Image()

             #
             sampleSize = 100

             #
             systemModel = SystemModel(model_s)
             likelihood = Likelihood(model_l)

             #
             svs = initStateVectors(img.size,sampleSize)

             while(True):
                 #
                 showImage(svs,img)
                 #
                 img.create()
                 #
                 svs = filtration(svs,img,systemModel,likelihood)



12   1   8
Code (openCV Bundle)
     class Image:
         def __init__(self):
             self.capture = cv.CreateCameraCapture(0)
             self.image = cv.QueryFrame(self.capture)
             cv.ShowImage("Capture",self.image)
             self.size = (self.image.width,self.image.height)

             def create(self):
                 self.image = cv.QueryFrame(self.capture)

             def getCol(self,sv):
                 x = sv[0]
                 y = sv[1]
                 #
                 if((x<0 or x>self.size[0]) or (y<0 or y>self.size[1])):
                     return((0,0,0,0))
                 else:
                     return(cv.Get2D(self.image,int(sv[1]),int(sv[0])))


12   1   8
Demo




12   1   8
NumPy/SciPy
     def model_s(sv,w):
         #
         #            (x,y,vx,vy)
         F = np.matrix([[1,0,1,0],
                        [0,1,0,1],
                        [0,0,1,0],
                        [0,0,0,1]])
         return(np.array(np.dot(F,sv))[0]+w)

     def filtration(svs,mv,systemModel,likelihood):
         #
         dim = len(svs[1])
         N = len(svs)
         sigma = 2.0
         rnorm = stats.norm.rvs(0,sigma,size=N*dim)
         ranges = zip([N*i for i in range(dim)],
                      [N*i for i in (range(dim+1)[1:])])
         ws = np.array([rnorm[p:q] for p,q in ranges])
         ws = ws.transpose()

12   1   8
References
     photo: By Dale Gillard from everystockphoto.com


     book:


     code: http://d.hatena.ne.jp/koh_ta/20110814
           https://github.com/kohta/pftrack



12   1   8

Particle Filter Tracking in Python

  • 1.
    Particle Filter Tracking in Python 12 1 8
  • 2.
    About myself google it ➡ Kohta Ishikawa (a professional skier is not me) 12 1 8
  • 3.
    Particle distribution empirical approximation 12 1 8
  • 4.
    Filter movement estimation observation and Bayes update 12 1 8
  • 5.
    Particle Filter particle movement observation and resampling 12 1 8
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
    Code def filtration(svs,mv,systemModel,likelihood): # dim = len(svs[1]) N = len(svs) sigma = 2.0 rnorm = stats.norm.rvs(0,sigma,size=N*dim) ranges = zip([N*i for i in range(dim)], [N*i for i in (range(dim+1)[1:])]) ws = np.array([rnorm[p:q] for p,q in ranges]) ws = ws.transpose() # svs_predict = [systemModel.generate(sv,w) for sv,w in zip(svs,ws)] # normalization_factor = likelihood.normalization(svs_predict,mv) likelihood_weights = [likelihood.generate(sv,mv)/normalization_factor for sv in svs_predict] # svs_resampled = resampling(svs_predict,likelihood_weights) return(svs_resampled) 12 1 8
  • 11.
    Code if(__name__=="__main__"): # img = Image() # sampleSize = 100 # systemModel = SystemModel(model_s) likelihood = Likelihood(model_l) # svs = initStateVectors(img.size,sampleSize) while(True): # showImage(svs,img) # img.create() # svs = filtration(svs,img,systemModel,likelihood) 12 1 8
  • 12.
    Code (openCV Bundle) class Image: def __init__(self): self.capture = cv.CreateCameraCapture(0) self.image = cv.QueryFrame(self.capture) cv.ShowImage("Capture",self.image) self.size = (self.image.width,self.image.height) def create(self): self.image = cv.QueryFrame(self.capture) def getCol(self,sv): x = sv[0] y = sv[1] # if((x<0 or x>self.size[0]) or (y<0 or y>self.size[1])): return((0,0,0,0)) else: return(cv.Get2D(self.image,int(sv[1]),int(sv[0]))) 12 1 8
  • 13.
  • 14.
    NumPy/SciPy def model_s(sv,w): # # (x,y,vx,vy) F = np.matrix([[1,0,1,0], [0,1,0,1], [0,0,1,0], [0,0,0,1]]) return(np.array(np.dot(F,sv))[0]+w) def filtration(svs,mv,systemModel,likelihood): # dim = len(svs[1]) N = len(svs) sigma = 2.0 rnorm = stats.norm.rvs(0,sigma,size=N*dim) ranges = zip([N*i for i in range(dim)], [N*i for i in (range(dim+1)[1:])]) ws = np.array([rnorm[p:q] for p,q in ranges]) ws = ws.transpose() 12 1 8
  • 15.
    References photo: By Dale Gillard from everystockphoto.com book: code: http://d.hatena.ne.jp/koh_ta/20110814 https://github.com/kohta/pftrack 12 1 8