Exemplo n.º 1
0
def save_video(interp, fname, last=None, interval=50):
    """
    Saves a video with the sequence of interpretations as they were generated
    by the interpretation process, beginning with *interp* and using *last* as
    last frame. Video is stored in *fname* path. Duration of each frame is
    controlled by *interval*, in milliseconds.
    """
    interplist = []
    queue = deque([interp])
    while queue:
        head = queue.popleft()
        interplist.append(head)
        queue.extend(head.child)
    interplist.sort(key=lambda i:int(str(i)))
    if last is not None:
        interplist.append(last)
    sig = sig_buf.get_signal(sig_buf.get_available_leads()[0])
    fig = figure(figsize=(18, 3), dpi=100, tight_layout=True)

    def update_figure(idx):
        print(str(idx) + '/' + str(len(interplist)))
        intplt = interplist[idx]
        plot_observations(sig, intplt, fig, False)
        fig.gca().set_xbound(lower=0, upper=len(sig))
        return fig

    ani = animation.FuncAnimation(fig, update_figure, len(interplist),
                                  interval=interval, repeat=False)
    ani.save(fname, bitrate=2048)
Exemplo n.º 2
0
 def __onclick(self, event):
     """Manager to the click event on the figure."""
     #Left click
     if event.button in (1, 2, 3) and event.inaxes:
         trans = event.inaxes.transData
         #Distance from nodes (in pixels)
         for node in self.drnodes.copy():
             posit = self.pos[node]
             xn, yn = trans.transform(posit)
             dx, dy = (event.x - xn, event.y - yn)
             dist = sqrt(dx * dx + dy * dy)
             #Nodes have a 10-pixel radius
             if dist < 10:
                 #The clicked button will define the action
                 #Button 1: plot
                 #If the branch is already plot, we just show it
                 if event.button == 1:
                     if node in self._subfigs:
                         mgr = Gcf.get_fig_manager(
                             self._subfigs[node].fig.number)
                         mgr.window.activateWindow()
                         mgr.window.raise_()
                     else:
                         #Else plot the observations
                         signal = sig_buf.get_signal(
                             sig_buf.get_available_leads()[0])
                         #We have to keep a reference to the object to avoid
                         #garbage collection and loosing the event manager
                         #see http://matplotlib.org/users/event_handling.html
                         obsview = ObservationVisualizer(signal, node)
                         mgr = Gcf.get_fig_manager(obsview.fig.number)
                         mgr.window.move(0, 0)
                         obsview.fig.canvas.set_window_title(str(node))
                         self._subfigs[node] = obsview
                         obsview.draw()
                 #Button 2: Add child nodes of the selected one to the plot.
                 elif event.button == 2:
                     pyperclip.copy(str(node))
                     stack = [node]
                     while stack:
                         n = stack.pop()
                         self.drnodes.add(n)
                         if n is node or not n.is_firm:
                             stack.extend(self.graph[n].keys())
                     self.redraw()
                 #Button 3: Copy the branch name to the clipboard
                 elif event.button == 3:
                     pyperclip.copy(str(node))
Exemplo n.º 3
0
print('Finished in {0:.3f} seconds'.format(time.time() - t0))
print('Created {0} interpretations ({1} kept alive)'.format(
    interp.counter, interp.ndescendants))

#plotter.save_video(interp, '/tmp/vid.mp4', cntr.best.node)

#Best explanation
print(cntr.best)
be = cntr.best.node
be.recover_all()
#print('List of resulting observations:')
#pp(list(be.get_observations()))

#Drawing of the best explanation
brview = plotter.plot_observations(
    sig_buf.get_signal(sig_buf.get_available_leads()[0]), be)
if args.o is not None:
    if args.video:
        plotter.save_video(interp, args.o, last=be)
    else:
        brview.fig.set_size_inches((12, 6))
        brview.fig.gca().set_xbound(
            lower=0,
            upper=len(sig_buf.get_signal(sig_buf.get_available_leads()[0])))
        brview.fig.savefig(args.o)
#Drawing of the search tree
#label_fncs = {}
##label_fncs['n'] = lambda br: str(br)
#label_fncs['e'] = lambda br: ''
#brview = plotter.plot_branch(interp, label_funcs=label_fncs, target=be,
#                             full_tree=True)
Exemplo n.º 4
0
ltime = (pekbfs.last_time, t0)
while pekbfs.best is None:
    IN.get_more_evidence()
    acq_time = IN.get_acquisition_point()
    #HINT debug code
    fstr = 'Int: {0:05d} '
    for i in range(int(sp2ms(acq_time - pekbfs.last_time) / 1000.0)):
        fstr += '-'
    fstr += ' Acq: {1}'
    print(fstr.format(int(pekbfs.last_time), acq_time))
    #End of debug code
    pekbfs.step()
    if pekbfs.last_time > ltime[0]:
        ltime = (pekbfs.last_time, time.time())
    if ms2sp((time.time() - ltime[1]) * 1000.0) > MAX_DELAY:
        print('Pruning search')
        if pekbfs.open:
            prevopen = pekbfs.open
        pekbfs.prune()
print('Finished in {0:.3f} seconds'.format(time.time() - t0))
print('Created {0} interpretations'.format(interp.counter))
be = pekbfs.best
brview = plotter.plot_observations(
    sig_buf.get_signal(sig_buf.get_available_leads()[0]), pekbfs.best)

#Branches draw
label_fncs = {}
label_fncs['n'] = lambda br: str(br)
label_fncs['e'] = lambda br: ''
#brview = plotter.plot_branch(interp, label_funcs=label_fncs, target=pekbfs.best)
Exemplo n.º 5
0
    cntr.step(filt)
    if cntr.last_time > ltime[0]:
        ltime = (cntr.last_time, time.time())
    #If the distance between acquisition time and interpretation time is
    #excessive, the search tree is pruned.
    if ms2sp((time.time() - ltime[1]) * 1000.0) * TFACTOR > MAX_DELAY:
        print('Pruning search')
        cntr.prune()
print('Finished in {0:.3f} seconds'.format(time.time() - t0))
print('Created {0} interpretations ({1} kept alive)'.format(
    interp.counter, interp.ndescendants))

#plotter.save_video(interp, '/tmp/vid.mp4', cntr.best.node)

#Best explanation
print(cntr.best)
be = cntr.best.node
be.recover_all()
#print('List of resulting observations:')
#pp(list(be.get_observations()))

#Drawing of the best explanation
brview = plotter.plot_observations(
    sig_buf.get_signal(sig_buf.get_available_leads()[0]), be)
#Drawing of the search tree
#label_fncs = {}
##label_fncs['n'] = lambda br: str(br)
#label_fncs['e'] = lambda br: ''
#brview = plotter.plot_branch(interp, label_funcs=label_fncs, target=be,
#                             full_tree=True)