在树莓派3上使用kinect和python,有更好/更快的方式来获得更多的fps吗?

时间:2017-10-25 19:08:49

标签: python numpy raspberry-pi pygame kinect

我最近有一个kinect相机使用libfreenect和pygame在this guy's work之后使用覆盆子pi 3,我得到了大约13fps但是我想知道是否有更好/更快的方式获得更多fps或者只是硬件限制?

现在是代码:

from freenect import sync_get_depth as get_depth
import pygame
import numpy
import sys

def make_gamma():
    num_pix = 2048 # there's 2048 different possible depth values
    npf = float(num_pix)
    _gamma = numpy.empty((num_pix, 3), dtype=numpy.uint16)
    for i in xrange(num_pix):
        if i < 950:
            a = numpy.array([255, 0, 0], dtype=numpy.uint8)
        else:
            a = numpy.array([0, 0, 0], dtype=numpy.uint8)

        _gamma[i] = a
    return _gamma

fpsClock = pygame.time.Clock()
FPS = 30 # kinect only outputs 30 fps
disp_size = (640, 480)
pygame.init()
screen = pygame.display.set_mode(disp_size)
pygame.display.set_caption('Kinect depth display')
font = pygame.font.Font('/usr/share/fonts/truetype/freefont/FreeSerif.ttf', 32)

gamma = make_gamma()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    fps_text = "FPS: {0:.2f}".format(fpsClock.get_fps())

    # draw the pixels
    depth = numpy.rot90(get_depth()[0])
    pixels = gamma[depth]
    temp_surface = pygame.Surface(disp_size)
    pygame.surfarray.blit_array(temp_surface, pixels)
    pygame.transform.scale(temp_surface, disp_size, screen)
    screen.blit(font.render(fps_text, 1, (255, 255, 255)), (30, 30))
    pygame.display.flip()
    fpsClock.tick(FPS)

1 个答案:

答案 0 :(得分:0)

您可以使用C / C ++本机代码读取帧并通过系统管道传输它们。您需要将深度数据编码为十六进制值并将其打印到控制台。