Exemple #1
0
def player(g_pool,size):
    """player
        - Shows 9 point calibration pattern
        - Plays a source video synchronized with world process
        - Get src videos from directory (glob)
        - Iterate through videos on each record event
    """


    grid = make_grid()
    grid *=2.5###scale to fit
    # player object
    player = Temp()
    player.play_list = glob('src_video/*')
    path_parent = os.path.dirname( os.path.abspath(sys.argv[0]))
    player.playlist = [os.path.join(path_parent, path) for path in player.play_list]
    player.captures = [autoCreateCapture(src) for src in player.playlist]
    print "Player found %i videos in src_video"%len(player.captures)
    player.captures =  [c for c in player.captures if c is not None]
    print "Player sucessfully loaded %i videos in src_video"%len(player.captures)
    # for c in player.captures: c.auto_rewind = False
    player.current_video = 0

    # Callbacks
    def on_resize(w, h):
        adjust_gl_view(w,h)

    def on_key(key, pressed):
        if key == GLFW_KEY_ESC:
                on_close()
    def on_char(char, pressed):
        if pressed:
            g_pool.player_input.value = char


    def on_close():
        g_pool.quit.value = True
        print "Player Process closing from window"

    def draw_circle(pos,r,c):
        pts = cv2.ellipse2Poly(tuple(pos),(r,r),0,0,360,10)
        draw_gl_polyline(pts,c,'Polygon')

    def draw_marker(pos):
        pos = int(pos[0]),int(pos[1])
        black = (0.,0.,0.,1.)
        white = (1.,1.,1.,1.)
        for r,c in zip((50,40,30,20,10),(black,white,black,white,black)):
            draw_circle(pos,r,c)

    # Initialize glfw
    glfwInit()
    glfwOpenWindow(size[0], size[1], 0, 0, 0, 8, 0, 0, GLFW_WINDOW)
    glfwSetWindowTitle("Player")
    glfwSetWindowPos(100,0)
    glfwDisable(GLFW_AUTO_POLL_EVENTS)


    # Callbacks
    glfwSetWindowSizeCallback(on_resize)
    glfwSetWindowCloseCallback(on_close)
    glfwSetKeyCallback(on_key)
    glfwSetCharCallback(on_char)


    # gl state settings
    gl.glEnable(gl.GL_POINT_SMOOTH)
    gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
    gl.glEnable(gl.GL_BLEND)
    gl.glDisable (gl.GL_DEPTH_TEST)
    gl.glClearColor(1.,1.,1.,0.)



    while glfwGetWindowParam(GLFW_OPENED) and not g_pool.quit.value:
        glfwPollEvents()
        if g_pool.player_refresh.wait(0.01):
            g_pool.player_refresh.clear()

            clear_gl_screen()
            if g_pool.marker_state.value !=0:

                # Set Matrix unsing gluOrtho2D to include padding for the marker of radius r
                #
                ############################
                #            r             #
                # 0,0##################w,h #
                # #                      # #
                # #                      # #
                #r#                      #r#
                # #                      # #
                # #                      # #
                # 0,h##################w,h #
                #            r             #
                ############################
                r = 60
                gl.glMatrixMode(gl.GL_PROJECTION)
                gl.glLoadIdentity()
                # compensate for radius of marker
                gluOrtho2D(-r,glfwGetWindowSize()[0]+r,glfwGetWindowSize()[1]+r, -r) # origin in the top left corner just like the img np-array
                # Switch back to Model View Matrix
                gl.glMatrixMode(gl.GL_MODELVIEW)
                gl.glLoadIdentity()


                screen_pos = denormalize(g_pool.marker[:],glfwGetWindowSize(),flip_y=True)

                #some feedback on the detection state
                draw_marker(screen_pos)
                if g_pool.ref[:] == [0.,0.]:
                    # world ref is detected
                    draw_gl_point(screen_pos, 5.0, (1.,0.,0.,1.))
                else:
                    draw_gl_point(screen_pos, 5.0, (0.,1.,0.,1.))

            elif g_pool.play.value:
                if len(player.captures):
                    frame = player.captures[player.current_video].get_frame()
                    img = frame.img
                    if img:
                        draw_gl_texture(img)
                    else:
                        player.captures[player.current_video].rewind()
                        player.current_video +=1
                        if player.current_video >= len(player.captures):
                            player.current_video = 0
                        g_pool.play.value = False
                else:
                    print 'PLAYER: Warning: No Videos available to play. Please put your vidoes into a folder called "src_video" in the Capture folder.'
                    g_pool.play.value = False
            glfwSwapBuffers()

    glfwCloseWindow()
    glfwTerminate()
    print "PLAYER Process closed"
Exemple #2
0
def player(g_pool,size):
    """player
        - Shows 9 point calibration pattern
        - Plays a source video synchronized with world process
        - Get src videos from directory (glob)
        - Iterate through videos on each record event
    """


    grid = make_grid()
    grid *=2.5###scale to fit
    # player object
    player = Temp()
    player.play_list = glob('src_video/*')
    path_parent = os.path.dirname( os.path.abspath(sys.argv[0]))
    player.playlist = [os.path.join(path_parent, path) for path in player.play_list]
    player.captures = [autoCreateCapture(src) for src in player.playlist]
    print "Player found %i videos in src_video"%len(player.captures)
    player.captures =  [c for c in player.captures if c is not None]
    print "Player sucessfully loaded %i videos in src_video"%len(player.captures)
    # for c in player.captures: c.auto_rewind = False
    player.current_video = 0

    # Callbacks
    def on_resize(w, h):
        adjust_gl_view(w,h)

    def on_key(key, pressed):
        if key == GLFW_KEY_ESC:
                on_close()
    def on_char(char, pressed):
        if char  == ord('9'):
            g_pool.cal9.value = True
            g_pool.calibrate.value = True



    def on_close():
        g_pool.quit.value = True
        print "Player Process closing from window"


    # initialize glfw
    glfwInit()
    glfwOpenWindow(size[0], size[1], 0, 0, 0, 8, 0, 0, GLFW_WINDOW)
    glfwSetWindowTitle("Player")
    glfwSetWindowPos(100,0)
    glfwDisable(GLFW_AUTO_POLL_EVENTS)


    #Callbacks
    glfwSetWindowSizeCallback(on_resize)
    glfwSetWindowCloseCallback(on_close)
    glfwSetKeyCallback(on_key)
    glfwSetCharCallback(on_char)


    #gl state settings
    gl.glEnable( gl.GL_BLEND )
    gl.glEnable(gl.GL_POINT_SMOOTH)
    gl.glClearColor(1.,1.,1.,0.)


    while glfwGetWindowParam(GLFW_OPENED) and not g_pool.quit.value:

        glfwPollEvents()

        if g_pool.player_refresh.wait(0.01):
            g_pool.player_refresh.clear()

            clear_gl_screen()
            if g_pool.cal9.value:
                circle_id,step = g_pool.cal9_circle_id.value,g_pool.cal9_step.value
                gl.glColor4f(0.0,0.0,0.0,1.0)
                gl.glPointSize(40)
                gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
                gl.glBegin(gl.GL_POINTS)
                for p in grid:
                    gl.glVertex3f(p[0],p[1],0.0)
                gl.glEnd()

                ###display the animated target dot
                gl.glPointSize((40)*(1.01-(step+1)/80.0))
                gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ZERO)
                if g_pool.ref_x.value or g_pool.ref_y.value: ###if pattern detected
                    gl.glColor4f(0.0,0.5,0.0,1.0)
                else:
                    gl.glColor4f(0.5,0.0,0.0,1.0)
                gl.glBegin(gl.GL_POINTS)
                gl.glVertex3f(grid[circle_id][0],grid[circle_id][1],0.0)
                gl.glEnd()

            elif g_pool.play.value:
                s, img = player.captures[player.current_video].read_RGB()
                if s:
                    draw_gl_texture(image)
                else:
                    player.captures[player.current_video].rewind()
                    player.current_video +=1
                    if player.current_video >= len(player.captures):
                        player.current_video = 0
                    g_pool.play.value = False
            glfwSwapBuffers()

    glfwCloseWindow()
    glfwTerminate()
    print "PLAYER Process closed"