mirror of
https://github.com/jlengrand/Ivolution.git
synced 2026-03-10 08:21:18 +00:00
Gets very starting point of a proper communication between my GUI and the Facemovie!
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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")
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user