Author: Hakan Ardo <ha...@debian.org> Branch: extradoc Changeset: r4795:985ea216ea2f Date: 2012-09-12 12:14 +0200 http://bitbucket.org/pypy/extradoc/changeset/985ea216ea2f/
Log: video analytics develoopment demo diff --git a/talk/dls2012/demo/analytics.py b/talk/dls2012/demo/analytics.py --- a/talk/dls2012/demo/analytics.py +++ b/talk/dls2012/demo/analytics.py @@ -1,3 +1,4 @@ + from reloader import ReloadHack from io import view from background import Background @@ -10,4 +11,6 @@ def update(self, frame): self.background.update(frame) fg = foreground(frame, self.background.image) - view(255*fg) + #view(self.background.image) + view(255 * fg) + diff --git a/talk/dls2012/demo/analytics_1.py b/talk/dls2012/demo/analytics_1.py deleted file mode 100644 --- a/talk/dls2012/demo/analytics_1.py +++ /dev/null @@ -1,6 +0,0 @@ -from reloader import ReloadHack -from io import view - -class Tracker(ReloadHack): - def update(self, img): - view(img) diff --git a/talk/dls2012/demo/analytics_2.py b/talk/dls2012/demo/analytics_2.py deleted file mode 100644 --- a/talk/dls2012/demo/analytics_2.py +++ /dev/null @@ -1,6 +0,0 @@ -from reloader import ReloadHack -from io import view - -class Tracker(ReloadHack): - def update(self, img): - view(2 * img) diff --git a/talk/dls2012/demo/analytics_3.py b/talk/dls2012/demo/analytics_3.py deleted file mode 100644 --- a/talk/dls2012/demo/analytics_3.py +++ /dev/null @@ -1,11 +0,0 @@ -from reloader import ReloadHack -from io import view -from background import Background - -class Tracker(ReloadHack): - def __init__(self): - self.bkg = Background() - - def update(self, img): - background = self.bkg.update(img) - view(background) diff --git a/talk/dls2012/demo/background.py b/talk/dls2012/demo/background.py --- a/talk/dls2012/demo/background.py +++ b/talk/dls2012/demo/background.py @@ -1,10 +1,13 @@ + from reloader import ReloadHack class Background(ReloadHack): def __init__(self): - self.fcnt = self.image = 0 + self.fcnt = 0 + self.image = 0 def update(self, frame): - self.image = (self.fcnt * self.image + frame) / (self.fcnt + 1) self.fcnt += 1 + alfa = self.fcnt/(self.fcnt + 1.0) + self.image = alfa * self.image + (1 - alfa) * frame diff --git a/talk/dls2012/demo/demo.py b/talk/dls2012/demo/demo.py new file mode 100644 --- /dev/null +++ b/talk/dls2012/demo/demo.py @@ -0,0 +1,111 @@ +from subprocess import call, Popen +import os, time, re + +class Vim(object): + def __init__(self, *args): + self.servername = 'DEMO_%d_%d' % (os.getpid(), id(self)) + call(['gvim', '--servername', self.servername] + list(args)) + + def send(self, cmd): + call(['gvim', '--servername', self.servername, '--remote-send', cmd]) + + def type(self, cmd, delay=0.05): + for c in re.findall('[^<>]|<.*?>', cmd): + self.send(c) + time.sleep(delay) + + def __del__(self): + self.send('<ESC>:q!<CR>') + +def pause(msg=''): + print + print msg + raw_input('Press ENTER') + +def demo(): + with open('analytics.py', 'w') as fd: + print >>fd, """ +from reloader import ReloadHack +from io import view + +class Tracker(ReloadHack): + def update(self, frame): + view(frame) +""" + runner = Popen(['pypy', 'run.py', 'demo.mpg']) + vim = Vim('analytics.py') + + pause("We'r looking at the input and output of this Tracker object that\n" + + "currently simply returns it input. Let's modify it to make some\n" + + "simple contrast adjustment.") + vim.send('7gg$') + vim.type('i * 2<ESC>:w<CR>', 0.2) + + pause("Now let's create a new class that estimetae a background image\n" + + "using a sliding mean.") + with open('background.py', 'w') as fd: + print >>fd, """ +from reloader import ReloadHack + +class Background(ReloadHack): + def __init__(self): + self.image = 0 + + def update(self, frame): + alfa = 0.9 + self.image = alfa * self.image + (1 - alfa) * frame +""" + vim.send(':e background.py<CR>') + + pause("Then, update Tracker to using the background estimater.") + vim.send(':e analytics.py<CR>') + vim.type('4ggifrom background import Background<CR><ESC>') + vim.type('7ggOdef __init__(self):<CR>self.background = Background()<CR><ESC>') + vim.type('11ggddOself.background.update(frame)<CR>view(self.background.image)<ESC>:w<CR>') + + pause("The moving objects are turned into ghosts. We need to increase the\n" + + "window size to get a better estimate.") + vim.send(':e background.py<CR>9gg') + vim.type('A9<ESC>:w<CR>', 0.2) + + pause("We'r still getting ghost. Let's try to increase it even more.") + vim.type('A9<ESC>:w<CR>', 0.2) + + pause("Now it's taking forever to converge. Let's make the window size\n" + + "depend on the number of frames observed.") + vim.type('6ggOself.fcnt = 0<ESC>') + vim.type('10ggOself.fcnt += 1<ESC>') + vim.type('11ggA<BS><BS><BS><BS><BS>self.fcnt/(self.fcnt + 1.0)<ESC>:w<CR>') + + pause("That's better. Now, let's create a new function performing\n" + + "background subtraction,") + with open('foreground.py', 'w') as fd: + print >>fd, """ +from reloader import autoreload + +@autoreload +def foreground(img, bkg): + return ((bkg - img) ** 2) > 40 +""" + vim.send(':e foreground.py<CR>') + + pause("and update Tracker to call it using the estimated background.") + vim.send(':e analytics.py<CR>') + vim.type('4ggofrom foreground import foreground<ESC>') + vim.type('12ggofg = foreground(frame, self.background.image)<ESC>') + vim.type('jI#<ESC>oview(255 * fg)<ESC>:w<CR>') + + pause("Wait a bit for the background to converge.") + + pause("That's a bit noisy. We'll have to increase the threashold a bit.") + vim.send(':e foreground.py<CR>') + vim.type('6ggA<BS><BS>100<ESC>:w<CR>', 0.2) + + pause("Still a bit noisy, let's increase it even more.") + vim.type('6ggA<BS><BS><BS>200<ESC>:w<CR>', 0.2) + + pause("That's all!") + + runner.kill() +if __name__ == '__main__': + demo() diff --git a/talk/dls2012/demo/foreground.py b/talk/dls2012/demo/foreground.py --- a/talk/dls2012/demo/foreground.py +++ b/talk/dls2012/demo/foreground.py @@ -1,6 +1,7 @@ + from reloader import autoreload @autoreload def foreground(img, bkg): - return ((bkg - img) ** 2) > 100 + return ((bkg - img) ** 2) > 200 diff --git a/talk/dls2012/demo/foreground_1.py b/talk/dls2012/demo/foreground_1.py deleted file mode 100644 --- a/talk/dls2012/demo/foreground_1.py +++ /dev/null @@ -1,6 +0,0 @@ -from reloader import ReloadHack - -class Foreground(ReloadHack): - def update(self, img, bkg): - return ((bkg - img) ** 2) > 50 - diff --git a/talk/dls2012/demo/reloader.py b/talk/dls2012/demo/reloader.py --- a/talk/dls2012/demo/reloader.py +++ b/talk/dls2012/demo/reloader.py @@ -29,6 +29,7 @@ except Exception as e: print traceback.print_exc() + self.halted = True else: if not self.halted: break _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit