Exemplo n.º 1
0
def train():
    images, shapes, labels = images_shapes_not_all_labels_unmarked()
    flip = State.getKey('/flip', None)
    Face.double_data(images, shapes, flip_order=flip)
    predictor = Face.train_shape_predictor(images, shapes)
    State.setKey('/predictor', predictor)
    State.push('train predictor')
Exemplo n.º 2
0
def dragCB(view, data):
    vi = view.drag_data
    #print 'dragCB',data,vi
    offset = (view.mouseDx * view.toolRX + view.mouseDy * view.toolRY)
    move_vertex(view, vi, offset[:2], delta=True)
    State.push('move vertex')
    QApp.app.updateMenus()
Exemplo n.º 3
0
def boot_face():
    fi = frame_number()
    img = get_frame_image(fi)
    predictor = get_predictor()
    shp = Face.detect_face(img, predictor)
    if shp is not None:
        set_frame_markup(fi, shp)
        State.push('boot face markup')
Exemplo n.º 4
0
def import_image():
    image_fn, _ = QApp.app.loadFilename(
        'Choose an image to open', cwd(),
        'Image Files (*.jpg *.jpeg *.png *.bmp *.tif)')
    if image_fn == '': return  # cancel
    img = Face.load_image(image_fn)
    images, shapes = [], []
    add_image(img)
    State.push('Import image')
Exemplo n.º 5
0
def set_frame_cb(fi):
    view = QApp.view()  # TODO should be part of the callback?
    if fi != frame_number():
        State.setKey('/frame_number', fi)
        State.push('change frame')
    img = get_frame_image(fi)
    update_gui_image(view, img)
    update_markup_mesh(view)
    QApp.app.updateMenus()  # trigger a full refesh here (TODO not needed?)
Exemplo n.º 6
0
def train_aam():
    images, shapes, labels = images_shapes_not_all_labels_unmarked()
    flip = State.getKey('/flip', None)
    aam_model = Face.train_aam_model(images,
                                     shapes,
                                     flip_order=flip,
                                     texture_rank=20)
    State.setKey('/aam', aam_model)
    State.push('train aam')
Exemplo n.º 7
0
def update_flip_order_last2():
    '''A hacky method that makes the last two added points be each others flip.'''
    flip = State.getKey('/flip', [16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,\
     26,25,24,23,22,21,20,19,18,17,27,28,29,30,35,34,33,32,31,45,44,43,42,47,46,\
     39,38,37,36,41,40,54,53,52,51,50,49,48,59,58,57,56,55,64,63,62,61,60,67,66,65])
    flip = list(flip)
    flip.extend([len(flip) + 1, len(flip)])
    print flip
    flip = np.int32(flip)
    State.setKey('/flip', flip)
    State.push('update flip last 2')
Exemplo n.º 8
0
def delete_image():
    fi = frame_number
    images = State.getKey('/images', [])
    shapes = State.getKey('/shapes', [])
    labels = State.getKey('/labels', [])
    images.pop(fi)
    shapes.pop(fi)
    labels.pop(fi)
    State.setKey('/images', images)
    State.setKey('/shapes', shapes)
    State.setKey('/labels', labels)
    State.push('delete image')
Exemplo n.º 9
0
	def setFieldValueCommand(self, field, value):
		'''Be careful, this is usually called from a qt callback, so we mustn't rebuild qt objects here.'''
		if self.value_is_adjusting: return
		#print 'setFieldValueCommand', repr(field), repr(value)
		#print '/%s/attrs/%s' % (State.getSel(),field)
		State.setKey('/%s/attrs/%s' % (State.getSel(),field),value)
		self.edit_signal.emit(State.getSel(),field,value) # DH
		self.clean_state() # if changing the field has side effects, these should happen before the push (I think)
		State.push('Set %s' % str(field))
		undoCmd = State.getUndoCmd()
		self.undoItem.setText('&Undo' if undoCmd is None else '&Undo [%s]' % undoCmd)
		redoCmd = State.getRedoCmd()
		self.redoItem.setText('Re&do' if redoCmd is None else 'Re&do [%s]' % redoCmd)
Exemplo n.º 10
0
def retriangulate():
    shp = get_predictor()['ref_shape']
    edges = []
    tris = Face.triangulate_2D(shp)
    for p0, p1, p2 in tris:
        edges.append((p0, p1))
        edges.append((p1, p2))
        edges.append((p2, p0))
    edges = np.int32(edges)
    tris = np.int32(tris)
    State.setKey('/edges', edges)
    State.setKey('/tris', tris)
    State.push('triangulate')
Exemplo n.º 11
0
def add_image(img, shp=None):
    if shp is None: shp = get_predictor()['ref_shape']
    if not State.hasKey('/images') or not State.hasKey(
            '/shapes') or not State.hasKey('/labels'):
        State.setKey('/images', [])
        State.setKey('/shapes', [])
        State.setKey('/labels', [])
    fi = len(State.getKey('/images'))
    lbl = np.zeros(len(shp), dtype=np.int32)  # unlabelled
    set_frame_image(fi, img)
    set_frame_markup(fi, shp)
    set_frame_labels(fi, lbl)
    State.push('add image')
Exemplo n.º 12
0
def delete_selected_vertex():
    vi = get_selected_vertex()
    shapes = State.getKey('/shapes')
    labels = State.getKey('/labels')
    vnames = State.getKey('/vnames')
    num_images, num_vertices = labels.shape
    which = range(0, vi) + range(vi + 1, num_vertices())
    shapes = list(np.float32(shapes)[:, which])
    labels = list(np.int32(labels)[:, which])
    vnames = [vnames[x] for x in which]
    State.setKey('/shapes', shapes)
    State.setKey('/labels', labels)
    State.setKey('/vnames', vnames)
    State.push('delete vertex')
Exemplo n.º 13
0
def add_vertex(vname=None):
    # TODO later, we want to initialise every vertex that has a zero label
    shapes = State.getKey('/shapes')
    labels = State.getKey('/labels')
    vnames = State.getKey('/vnames')
    if vname is None: vname = 'pt_%d' % len(vnames)
    shapes = np.float32(shapes)
    labels = np.int32(labels)
    num_images, num_vertices = labels.shape
    shapes = list(
        np.hstack((shapes, np.zeros((num_images, 1, 2), dtype=np.float32))))
    labels = list(
        np.hstack((labels, np.zeros((num_images, 1), dtype=np.int32))))
    vnames.append(vname)
    State.setKey('/shapes', shapes)
    State.setKey('/labels', labels)
    State.setKey('/vnames', vnames)
    State.push('add vertex')
Exemplo n.º 14
0
def pickedCB(view, data, clearSelection=True):
    #print 'pickedCB',view,data,clearSelection
    if data is None:
        QApp.app.select(None)  # TODO achievable through the view?
    else:
        primitive_type, pn, pi, distance = data
        if primitive_type is '3d':
            p = view.primitives[pn]
            if isinstance(p, GLPoints3D):
                if pi == -1:  # edge
                    print 'picked edge'
                    return
                #name = p.names[pi]
                print "Picked:", pi
                if p is view.getLayer('ref_mesh'):
                    move_vertex(view, pi, p.vertices[pi, :2])
                select_vertex(view, pi)
                State.push('select vertex')
                QApp.app.updateMenus()
Exemplo n.º 15
0
def reorder_images():
    images = State.getKey('/images')
    shapes = State.getKey('/shapes')
    labels = State.getKey('/labels')
    old_order = State.getKey('/order', np.arange(len(images), dtype=np.int32))
    norm_shapes, ref_shape, ref_pinv = Face.normalized_shapes(shapes)
    norm_shapes -= ref_shape
    shapes_u, shapes_s, shapes_vt = np.linalg.svd(norm_shapes.reshape(
        norm_shapes.shape[0], -1),
                                                  full_matrices=0)
    wts = np.sum(shapes_u**2, axis=1)
    order = np.argsort(wts)[::-1]
    images = [images[o] for o in order]
    shapes = [shapes[o] for o in order]
    labels = [labels[o] for o in order]
    State.setKey('/images', images)
    State.setKey('/shapes', shapes)
    State.setKey('/labels', labels)
    State.setKey('/order', old_order[order])
    State.push('reorder images')
Exemplo n.º 16
0
def import_movie_frames():
    movie_fn, _ = QApp.app.loadFilename(
        'Choose a movie to open', cwd(),
        'Movie Files (*.mp4 *.mov *.avi *.flv *.mpg)')
    if movie_fn == '': return  # cancel
    set_cwd(movie_fn)
    txt_fn, _ = QApp.app.loadFilename(
        'Choose a text file of frame indices to open', cwd(),
        'Text Files (*.txt)')
    md = MovieReader.open_file(movie_fn, audio=False)
    images, shapes = [], []
    if txt_fn == '':
        frames = range(0, md['vmaxframe'], 100)
        #if txt_fn == '': frames = range(30000, 38300, 100)
    else:
        frames = [int(l.split(':')[1]) for l in open(txt_fn, 'r').readlines()]
    for fi in frames:
        print fi, '/', frames[-1]
        MovieReader.readFrame(md, fi)
        add_image(
            np.frombuffer(md['vbuffer'],
                          dtype=np.uint8).reshape(md['vheight'], md['vwidth'],
                                                  3).copy())
    State.push('Import movie frames')
Exemplo n.º 17
0
def keypress_cb(view, key):
	if key == ord('R'):
		State.setKey('/root/ui/attrs/booting',True)
		State.push('boot face')
	if key == ord('N'):
		State.setKey('/root/ui/attrs/setting_neutral',True)
		State.push('set neutral')
	if key == ord('S'):
		toggle_unreal()
	if key == ord('Z'):
		State.setKey('/root/ui/attrs/debugging',not State.getKey('/root/ui/attrs/debugging'))
		State.push('debugging')
Exemplo n.º 18
0
def keyCB(view, key):
    #print 'keyCB',repr(key),type(key)
    if key == ord('R'):
        boot_from_ref_shape(view)
        State.push('boot markup')
        QApp.app.updateMenus()
    if key == ord('U'):
        if unlabel_selected_vertex(view):
            State.push('unlabel vertex')
            QApp.app.updateMenus()
    if key == ord('Z'):
        unlabel_all_vertices(view)
        State.push('unlabel all vertices')
        QApp.app.updateMenus()
Exemplo n.º 19
0
	def createKeyCommand(key, value):
		key = State.addKey(key,value)
		State.push('Create %s' % State.keyToName(key))
		app.updateMenus()
Exemplo n.º 20
0
	def addOpItem(self, name, data, silent=False):
		#print 'addOpItem',name,data
		self.qnodes.addItem(name, data=data)
		if silent: return
		State.push('Add Op %s' % name) # TODO this method shouldn't be here
		self.updateMenus()