I have my code here:
import thread
import pygame
from pykinect import nui
import os
import Tkinter as tk
import tkMessageBox
root = tk.Tk()
root.withdraw()
DEPTH_WINSIZE = (640, 480)
screen_lock = thread.allocate()
screen = None
tmp_s = pygame.Surface(DEPTH_WINSIZE, 0, 16)
s=None
global DIR
k = open("DIR.dir", "r")
DIR = k.read()
if (not os.path.exists("Patients\\" + DIR)):
os.makedirs("Patients\\" + DIR)
k.close()
def exit():
exit()
def video_frame_ready(frame):
frame.image.copy_bits(screen._pixels_address)
pygame.display.update()
global s
if (s == 4):
R = open("Patients\\" + DIR + "\\" + "RED.clr", "w")
G = open("Patients\\" + DIR + "\\" + "GREEN.clr", "w")
B = open("Patients\\" + DIR + "\\" + "BLUE.clr", "w")
for i in range(screen.get_height()):
for i1 in range(screen.get_width()):
R.write(str(screen.get_at((i1, i))[0]) + " ")
G.write(str(screen.get_at((i1, i))[1]) + " ")
B.write(str(screen.get_at((i1, i))[2]) + " ")
R.write("\n")
G.write("\n")
B.write("\n")
R.close()
G.close()
B.close()
def depth_frame_ready(frame):
with screen_lock:
global arr
frame.image.copy_bits(tmp_s._pixels_address)
arr.append(pygame.surfarray.pixels2d(tmp_s))
arr2d = (pygame.surfarray.pixels2d(tmp_s) >> 7) & 255
global s
s=s+1
if (s==5):
tkMessageBox.showinfo("Points", "Select Some Points in the Window")
click = 0
coords = []
while (True):
action = pygame.mouse.get_pressed()
if (action[0]):
if (click != 0):
if (coords[-1] == pygame.mouse.get_pos()):
break
coords.append([])
coords[click] = pygame.mouse.get_pos()
pygame.time.wait(300)
DEPTH_MULT = arr[3][coords[click][0]][coords[click][1]] / 8800.0
MULT_FINAL = 1 / DEPTH_MULT
screen.set_at((coords[click][0]-1, coords[click][1]-1), (255, 0, 0))
arr2d_N = (pygame.surfarray.pixels2d(tmp_s) >> 7) & 255
pygame.display.update()
click = click + 1
action = pygame.mouse.get_pressed()
File = open("NM.dta", "w")
File.write(str(click))
File.close()
tkMessageBox.showinfo("Finished", "Scanning Finished, Please Wait...")
File = open("Patients\\" + DIR + "\\coords_MLT.crd", "w")
FILE = open("Patients\\" + DIR + "\\coords_MLT_VIDEO.crd", "w")
for i in range (len(coords)):
for i1 in range (2):
DEPTH_MULT = arr[3][coords[i][0]][coords[i][1]] / 8800.0
MULT_FINAL = 1 / DEPTH_MULT
if (i1 == 0):
File.write(str(coords[i][i1] - int(19 * MULT_FINAL)) + " ")
FILE.write(str(coords[i][i1]) + " ")
else:
File.write(str(coords[i][i1] - int(22 * MULT_FINAL)) + " ")
FILE.write(str(coords[i][i1]) + " ")
File.write("\n")
FILE.write("\n")
File.close()
FILE.close()
for k in range(len(arr)):
test = open("Patients\\" + DIR + "\\out"+str(k)+".dpm", "w")
for i in arr[k]:
for i1 in i:
test.write(str(i1) + " ")
test.write("\n")
test.close()
pygame.quit()
k = open("Finished.FNS", "w")
k.write("FNS")
k.close()
os.startfile("Kinect_Matrix_generation_FINAL_VERSION.exe")
pygame.time.wait(100)
exit()
def main():
pygame.init()
global s
s=0
global arr
arr = []
global screen
screen = pygame.display.set_mode(DEPTH_WINSIZE, 0, 32)
pygame.display.set_caption("Skelenct Scan")
angle = 0
with nui.Runtime() as kinect:
kinect.depth_frame_ready += depth_frame_ready
kinect.depth_stream.open(nui.ImageStreamType.Depth, 2, nui.ImageResolution.Resolution640x480, nui.ImageType.Depth)
kinect.video_frame_ready += video_frame_ready
kinect.video_stream.open(nui.ImageStreamType.Video, 2, nui.ImageResolution.Resolution640x480, nui.ImageType.Color)
# Main game loop
while (True):
event = pygame.event.wait()
if (event == pygame.QUIT):
break
if (__name__ == "__main__"):
import sys
main()
sys.exit(app.exec_())
And this is my setup.py file:
import cx_Freeze
import sys
base = None
if (sys.platform == "win32"):
base = "Win32GUI"
Executables = [ cx_Freeze.Executable("Kinect_wint_Python_Multi_Points_Final_With_Video.py", base = base, icon = "Icon.ico")]
cx_Freeze.setup(
name = "Skelenect",
options = {"build_exe": {"packages":["thread", "pygame", "sys", "os"], "include_files":["Icon.ico", "Icon.png", "SKEL_PIC.png"]}},
version = "0.1",
description = "Body Scanning Software",
executables = Executables
)
When this program runs, it works fine until it wants to run the other .exe file and exits. It always says that it is not responding but the program works fine before Freezing it with CX_Freeze.
Any help would be greatly appreciated.
You just have to move the pygame.quit() method down and add a try/except statement and also use os._exit(0)
Like this:
import thread
import pygame
import easygui
from pykinect import nui
import os
import Tkinter as tk
import tkMessageBox
root = tk.Tk()
root.withdraw()
DEPTH_WINSIZE = (640, 480)
screen_lock = thread.allocate()
screen = None
tmp_s = pygame.Surface(DEPTH_WINSIZE, 0, 16)
s=None
global DIR
k = open("DIR.dir", "r")
DIR = k.read()
if (not os.path.exists("Patients\\" + DIR)):
os.makedirs("Patients\\" + DIR)
k.close()
def video_frame_ready(frame):
frame.image.copy_bits(screen._pixels_address)
pygame.display.update()
global s
if (s == 4):
R = open("Patients\\" + DIR + "\\" + "RED.clr", "w")
G = open("Patients\\" + DIR + "\\" + "GREEN.clr", "w")
B = open("Patients\\" + DIR + "\\" + "BLUE.clr", "w")
for i in range(screen.get_height()):
for i1 in range(screen.get_width()):
R.write(str(screen.get_at((i1, i))[0]) + " ")
G.write(str(screen.get_at((i1, i))[1]) + " ")
B.write(str(screen.get_at((i1, i))[2]) + " ")
R.write("\n")
G.write("\n")
B.write("\n")
R.close()
G.close()
B.close()
def depth_frame_ready(frame):
with screen_lock:
global arr
frame.image.copy_bits(tmp_s._pixels_address)
arr.append(pygame.surfarray.pixels2d(tmp_s))
arr2d = (pygame.surfarray.pixels2d(tmp_s) >> 7) & 255
global s
s=s+1
if (s==5):
click = 0
coords = []
while (True):
action = pygame.mouse.get_pressed()
if (action[0]):
if (click != 0):
if (coords[-1] == pygame.mouse.get_pos()):
break
coords.append([])
coords[click] = pygame.mouse.get_pos()
pygame.time.wait(300)
DEPTH_MULT = arr[3][coords[click][0]][coords[click][1]] / 8800.0
MULT_FINAL = 1 / DEPTH_MULT
screen.set_at((coords[click][0]-1, coords[click][1]-1), (255, 0, 0))
arr2d_N = (pygame.surfarray.pixels2d(tmp_s) >> 7) & 255
pygame.display.update()
click = click + 1
action = pygame.mouse.get_pressed()
File = open("NM.dta", "w")
File.write(str(click))
File.close()
tkMessageBox.showinfo("Finished", "Scanning Finished, Please Wait...")
File = open("Patients\\" + DIR + "\\coords_MLT.crd", "w")
FILE = open("Patients\\" + DIR + "\\coords_MLT_VIDEO.crd", "w")
for i in range (len(coords)):
for i1 in range (2):
DEPTH_MULT = arr[3][coords[i][0]][coords[i][1]] / 8800.0
MULT_FINAL = 1 / DEPTH_MULT
if (i1 == 0):
File.write(str(coords[i][i1] - int(19 * MULT_FINAL)) + " ")
FILE.write(str(coords[i][i1]) + " ")
else:
File.write(str(coords[i][i1] - int(22 * MULT_FINAL)) + " ")
FILE.write(str(coords[i][i1]) + " ")
File.write("\n")
FILE.write("\n")
File.close()
FILE.close()
for k in range(len(arr)):
test = open("Patients\\" + DIR + "\\out"+str(k)+".dpm", "w")
for i in arr[k]:
for i1 in i:
test.write(str(i1) + " ")
test.write("\n")
test.close()
k = open("Finished.FNS", "w")
k.write("FNS")
k.close()
os.startfile("Kinect_Matrix_generation_FINAL_VERSION.exe")
pygame.time.wait(100)
global G
G = False
os._exit(0)
pygame.quit()
def main():
pygame.init()
global s
s=0
global arr
arr = []
global G
G = True
global screen
screen = pygame.display.set_mode(DEPTH_WINSIZE, 0, 32)
pygame.display.set_caption("Skelenct Scan")
angle = 0
with nui.Runtime() as kinect:
kinect.depth_frame_ready += depth_frame_ready
kinect.depth_stream.open(nui.ImageStreamType.Depth, 2, nui.ImageResolution.Resolution640x480, nui.ImageType.Depth)
kinect.video_frame_ready += video_frame_ready
kinect.video_stream.open(nui.ImageStreamType.Video, 2, nui.ImageResolution.Resolution640x480, nui.ImageType.Color)
while (G):
try:
event = pygame.event.wait()
if (event == pygame.QUIT):
break
except :
os._exit(0)
if (__name__ == "__main__"):
import sys
main()
sys.exit(app.exec_())
The setup script does not need any changes.