Gets very starting point of a proper communication between my GUI and the Facemovie!

This commit is contained in:
2012-07-19 18:04:17 +02:00
parent c6bbb12f8b
commit 060e622136
4 changed files with 93 additions and 13 deletions

View File

@@ -8,6 +8,6 @@ from gi.repository import Gtk, GObject
from gui import IvolutionWindow
my_app = IvolutionWindow.IvolutionWindow()
my_app = IvolutionWindow.IvolutionWindow("Ivolution")
GObject.threads_init()
Gtk.main()

View File

@@ -14,7 +14,81 @@ import logging
from facemovie import Facemovie_lib
class FacemovieThread(threading.Thread):
class Observer():
"""
Implements a simple Observer from the Observer pattern
"""
def __init__(self, name="bob"):
"""
"""
self.name = name
def update(self, message):
"""
"""
if message is not None:
print "%s received %s" %(self.name, message)
def __str__(self):
return self.name
class Observable():
"""
Implements a simple Observable from the Observer pattern
"""
def __init__(self):
"""
"""
self.val = 1
self.obs_collection = []
def subscribe(self, observer):
"""
"""
try:
if not(observer in self.obs_collection):
self.obs_collection.append(observer)
print "%s added to collection" %(str(observer))
else:
print "%s already in collection" %(str(observer))
except TypeError:
print "Failed to add %s" %(str(observer))
def unsubscribe(self, observer):
"""
"""
try:
if observer in self.obs_collection:
self.obs_collection.remove(observer)
print "%s removed from collection" %(str(observer))
else:
print "%s not in collection" %(str(observer))
except TypeError:
print "Failed to remove %s" %(str(observer))
def notify(self, message):
"""
"""
for observer in self.obs_collection:
print "sent %s to %s" %(message, str(observer))
observer.update(message)
def set_val(self, val=1):
"""
"""
self.val += val
self.notify(str(self.val))
class FacemovieThread(threading.Thread, Observable):
'''
Creates a Thread version of Facemovie using the facemovie_lib.
This class can then be run anywhere, from a GUI, script, ...
@@ -27,6 +101,8 @@ class FacemovieThread(threading.Thread):
:param face_params: A faceparams object that contains all needed information to run the Facemovie.
:type face_params: FaceParams
"""
Observable.__init__(self)
threading.Thread.__init__(self)
self.face_params = face_params
@@ -35,6 +111,7 @@ class FacemovieThread(threading.Thread):
def run(self):
my_logger = logging.getLogger('FileLog')
my_logger.debug("Thread started")
self.notify("Thread Started")
self.facemovie.list_guys()
my_logger.debug("Guys listed")
@@ -45,4 +122,4 @@ class FacemovieThread(threading.Thread):
self.facemovie.save_movie()
my_logger.debug("Movie saved")
my_logger.debug("Thread terminated")
my_logger.debug("Thread terminated")

View File

@@ -101,7 +101,7 @@ class FaceMovie(object):
# loading images, create Guys and store it into guys
for root, _, files in os.walk(self.source):
for a_file in files:
if run : # as long as we want to continue
if self.run : # as long as we want to continue
guy_source = os.path.join(root, a_file)
try:
image = cv.LoadImage(guy_source)
@@ -151,7 +151,7 @@ class FaceMovie(object):
In case no face is found, a warning is returned and Guy is set to None
"""
for a_guy in self.guys:
if run:
if self.run:
a_guy.search_face(self.face_params)
if a_guy.has_face(): # face(s) have been found
self.console_logger.info("Face found for %s" % (a_guy.name))
@@ -279,7 +279,7 @@ class FaceMovie(object):
x_af = 0
y_af = 0
for a_guy in self.guys:
if run :
if self.run :
(xc, yc) = a_guy.resized_center()
(inx, iny) = a_guy.resized_dims()
@@ -307,7 +307,7 @@ class FaceMovie(object):
wl = 1000000 # space left left of eyes
wr = 1000000 # space left right of eyes
for a_guy in self.guys:
if run:
if self.run:
(xc, yc) = a_guy.resized_center()
(inx, iny) = a_guy.resized_dims()
@@ -365,7 +365,7 @@ class FaceMovie(object):
1)
ii = 0
for a_guy in self.guys:
if run:
if self.run:
ii += 1
self.console_logger.info("Saving frame %d / %d" %(ii, self.number_guys()) )
self.my_logger.info("Saving frame %d / %d" %(ii, self.number_guys()) )
@@ -388,7 +388,7 @@ class FaceMovie(object):
cv.ResizeWindow(win_name, 640, 480)
for a_guy in self.guys:
if run:
if self.run:
out_im = self.prepare_image(a_guy)
cv.ShowImage(win_name, out_im)
cv.WaitKey(mytime)
@@ -406,7 +406,7 @@ class FaceMovie(object):
:type im_format: string
"""
for a_guy in self.guys:
if run:
if self.run:
out_im = self.prepare_image(a_guy)
self.save_guy(out_im, a_guy.name, im_format)

View File

@@ -12,13 +12,15 @@ from AboutDialog import AboutDialog
import os
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.sys.path.insert(0,parentdir)
os.sys.path.insert(0,parentdir) # import parent folder
from facemovie import Facemovie_lib
from facemovie import FaceParams
from facemovie import FacemovieThread
class IvolutionWindow():
def __init__(self):
class IvolutionWindow(FacemovieThread.Observer):
def __init__(self, name):
FacemovieThread.Observer.__init__(self, name)
self.my_logger = None
self.console_logger = None
@@ -96,6 +98,7 @@ class IvolutionWindow():
self.print_parameters()
# Instantiating the facemovie
self.facemovie = FacemovieThread.FacemovieThread(self.face_params)
self.facemovie.subscribe(self) # I want new information !
self.facemovie.start()
def on_stopbutton_pressed(self, widget):