I'm searching for many methods to find depth using kinect camera in python but I didn't find any proper solution. I saw some examples which are implementing using pykinect package but I think it's now discontinued for python. I try to install it through pypi.com but it's not available at there. I tried to implement it through pygame package for which code is given below. But I'm not getting how I can find the depth value or Z-axis. Any help would be highly appreciated!
import pygame
import numpy as np
import sys
from freenect import sync_get_depth as get_depth
def make_gamma():
"""
Create a gamma table
"""
num_pix = 2048 # there's 2048 different possible depth values
npf = float(num_pix)
_gamma = np.empty((num_pix, 3), dtype=np.uint16)
for i in range(num_pix):
v = i / npf
v = pow(v, 3) * 6
pval = int(v * 6 * 256)
lb = pval & 0xff
pval >>= 8
if pval == 0:
a = np.array([255, 255 - lb, 255 - lb], dtype=np.uint8)
elif pval == 1:
a = np.array([255, lb, 0], dtype=np.uint8)
elif pval == 2:
a = np.array([255 - lb, lb, 0], dtype=np.uint8)
elif pval == 3:
a = np.array([255 - lb, 255, 0], dtype=np.uint8)
elif pval == 4:
a = np.array([0, 255 - lb, 255], dtype=np.uint8)
elif pval == 5:
a = np.array([0, 0, 255 - lb], dtype=np.uint8)
else:
a = np.array([0, 0, 0], dtype=np.uint8)
_gamma[i] = a
return _gamma
gamma = make_gamma()
if __name__ == "__main__":
fpsClock = pygame.time.Clock()
FPS = 30 # kinect only outputs 30 fps
disp_size = (640, 480)
pygame.init()
screen = pygame.display.set_mode(disp_size)
font = pygame.font.Font('slkscr.ttf', 32) # provide your own font
num=0
while True:
events = pygame.event.get()
for e in events:
if e.type == pygame.QUIT:
sys.exit()
fps_text = "FPS: {0:.2f}".format(fpsClock.get_fps())
# draw the pixels
depth = np.rot90(get_depth()[0]) # get the depth readinngs from the camera
pixels = gamma[depth] # the colour pixels are the depth readings overlayed onto the gamma table
temp_surface = pygame.Surface(disp_size)
print("Pixels===",pixels)
print("Depth===", pixels)
my_surface = pygame.pixelcopy.make_surface(pixels, depth=1)
pygame.image.save(my_surface, ("./Output/image_"+str(num)+".jpg"))
num+=1
pygame.surfarray.blit_array(temp_surface, pixels)
pygame.transform.scale(temp_surface, disp_size, screen)
screen.blit(font.render(fps_text, 1, (0, 0, 0)), (30, 30))
pygame.display.flip()
fpsClock.tick(FPS)
question from:
https://stackoverflow.com/questions/65901651/how-to-find-depth-from-pykinect-in-python 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…