[pypy-commit] extradoc extradoc: refacor to push images to preceeding steps instead of pulling from previous

hakanardo noreply at buildbot.pypy.org
Wed Sep 12 07:54:06 CEST 2012


Author: Hakan Ardo <hakan at debian.org>
Branch: extradoc
Changeset: r4790:5944e2c4015f
Date: 2012-09-12 07:48 +0200
http://bitbucket.org/pypy/extradoc/changeset/5944e2c4015f/

Log:	refacor to push images to preceeding steps instead of pulling from
	previous

diff --git a/talk/dls2012/demo/analytics.py b/talk/dls2012/demo/analytics.py
new file mode 100644
--- /dev/null
+++ b/talk/dls2012/demo/analytics.py
@@ -0,0 +1,14 @@
+from reloader import ReloadHack
+from io import view
+from background import Background
+from foreground import Foreground
+
+class Tracker(ReloadHack):
+    def __init__(self):
+        self.bkg = Background()
+        self.fg = Foreground()
+
+    def update(self, img):
+        background = self.bkg.update(img)
+        fg = self.fg.update(img, background)
+        view(255*fg, 'bkg')
diff --git a/talk/dls2012/demo/analytics_1.py b/talk/dls2012/demo/analytics_1.py
new file mode 100644
--- /dev/null
+++ b/talk/dls2012/demo/analytics_1.py
@@ -0,0 +1,6 @@
+from reloader import ReloadHack
+from io import view
+
+class Tracker(ReloadHack):
+    def update(self, img):
+        view(img, 'bkg')
diff --git a/talk/dls2012/demo/analytics_2.py b/talk/dls2012/demo/analytics_2.py
new file mode 100644
--- /dev/null
+++ b/talk/dls2012/demo/analytics_2.py
@@ -0,0 +1,6 @@
+from reloader import ReloadHack
+from io import view
+
+class Tracker(ReloadHack):
+    def update(self, img):
+        view(2 * img, 'bkg')
diff --git a/talk/dls2012/demo/analytics_3.py b/talk/dls2012/demo/analytics_3.py
new file mode 100644
--- /dev/null
+++ b/talk/dls2012/demo/analytics_3.py
@@ -0,0 +1,11 @@
+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, 'bkg')
diff --git a/talk/dls2012/demo/background.py b/talk/dls2012/demo/background.py
new file mode 100644
--- /dev/null
+++ b/talk/dls2012/demo/background.py
@@ -0,0 +1,11 @@
+from reloader import ReloadHack
+
+class Background(ReloadHack):
+    def __init__(self):
+        self.fcnt = self.bkg = 0
+
+    def update(self, img):
+        self.bkg = (self.fcnt * self.bkg + img) / (self.fcnt + 1)
+        self.fcnt += 1
+        return self.bkg
+
diff --git a/talk/dls2012/demo/fgbg.py b/talk/dls2012/demo/fgbg.py
deleted file mode 100644
--- a/talk/dls2012/demo/fgbg.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from reloader import ReloadHack
-
- at ReloadHack
-def background(video):
-    bkg = fcnt = 0
-    for img in video:
-        bkg = (fcnt * bkg + img) / (fcnt + 1)
-        fcnt += 1
-        fg = ((bkg - img) ** 2) > 40
-        #yield img
-        yield fg * 255
-    
-    
diff --git a/talk/dls2012/demo/foreground.py b/talk/dls2012/demo/foreground.py
new file mode 100644
--- /dev/null
+++ b/talk/dls2012/demo/foreground.py
@@ -0,0 +1,6 @@
+from reloader import ReloadHack
+
+class Foreground(ReloadHack):
+    def update(self, img, bkg):
+        return ((bkg - img) ** 2) > 100
+
diff --git a/talk/dls2012/demo/foreground_1.py b/talk/dls2012/demo/foreground_1.py
new file mode 100644
--- /dev/null
+++ b/talk/dls2012/demo/foreground_1.py
@@ -0,0 +1,6 @@
+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
@@ -1,18 +1,16 @@
 import os, sys, time, traceback
 
 class ReloadHack(object):
-    def __init__(self, iterator_class):
-        self.module = sys.modules[iterator_class.__module__]
-        self.filename = self.module.__file__
-        if self.filename.endswith('.pyc'):
-            self.filename = self.filename[:-1]
-        self.name = iterator_class.__name__
-        self.mtime = -1
-        self.iterator_class = iterator_class
+    def __new__(cls, *new_args, **new_kwargs):
+        class Wrapper(object):
+            module = sys.modules[cls.__module__]
+            filename = module.__file__
+            if filename.endswith('.pyc'):
+                filename = filename[:-1]
+            name = cls.__name__
+            mtime = -1
 
-    def __call__(self, *args, **kwargs):
-        def wrapper():
-            while True:
+            def update(self, *args, **kwargs):
                 while True:
                     try:
                         mtime = os.stat(self.filename).st_mtime
@@ -23,22 +21,22 @@
                             if mtime > self.mtime:
                                 self.mtime = mtime
                                 reload(self.module)
-                                self.iterator_class = getattr(self.module, self.name).iterator_class
-                                obj = iter(self.iterator_class(*args, **kwargs))
-                                halted = False
+                                cls = getattr(self.module, self.name)
+                                self.obj = object.__new__(cls)
+                                self.obj.__init__(*new_args, **new_kwargs)
+                                self.halted = False
                         except Exception as e:
                             print
                             traceback.print_exc()
                         else:
-                            if not halted:
+                            if not self.halted:
                                 break
                 try:
-                    yield obj.next()
+                    return self.obj.update(*args, **kwargs)
                 except Exception as e:
                     print
                     traceback.print_exc()
-                    halted = True
+                    self.halted = True
 
+        return Wrapper()
 
-        return wrapper()
-
diff --git a/talk/dls2012/demo/run.py b/talk/dls2012/demo/run.py
--- a/talk/dls2012/demo/run.py
+++ b/talk/dls2012/demo/run.py
@@ -1,15 +1,15 @@
 from io import mplayer, view
-from process import process
+from analytics import Tracker
 import sys
 
 if len(sys.argv) > 1:
-    video = mplayer(sys.argv[1])
+    fn = sys.argv[1]
 else:
-    video = mplayer()
+    fn = 'tv://'
 
-result = process(video)
+tracker = Tracker()
+for img in mplayer(fn):
+    view(img)
+    tracker.update(img)
 
-for img in result:
-    view(img)
 
-


More information about the pypy-commit mailing list