[pypy-commit] extradoc extradoc: video analytics develoopment demo
hakanardo
noreply at buildbot.pypy.org
Wed Sep 12 12:15:03 CEST 2012
Author: Hakan Ardo <hakan at 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
+
+ at 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
More information about the pypy-commit
mailing list