diff --git a/README.md b/README.md index 825a753..0f9f5e3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # PyKinect2 +Summrized update for compatibility with Python 3.12 and 64-bit environments based based on previous pull requests. Enables writing Kinect applications, games, and experiences using Python. Inspired by the original [PyKinect project on CodePlex](http://pytools.codeplex.com/wikipage?title=PyKinect). diff --git a/pykinect2/PyKinectRuntime.py b/pykinect2/PyKinectRuntime.py index 0454875..183420e 100644 --- a/pykinect2/PyKinectRuntime.py +++ b/pykinect2/PyKinectRuntime.py @@ -2,14 +2,10 @@ from pykinect2.PyKinectV2 import * import ctypes -import _ctypes -from _ctypes import COMError -import comtypes import sys import numpy import time -import importlib if sys.hexversion >= 0x03000000: import _thread as thread @@ -163,7 +159,7 @@ def __init__(self, frame_source_types): self._last_long_exposure_infrared_frame = None self._last_audio_frame = None - start_clock = time.clock() + start_clock = time.perf_counter() self._last_color_frame_access = self._last_color_frame_time = start_clock self._last_body_frame_access = self._last_body_frame_time = start_clock self._last_body_index_frame_access = self._last_body_index_frame_time = start_clock @@ -243,7 +239,7 @@ def get_last_color_frame(self): with self._color_frame_lock: if self._color_frame_data is not None: data = numpy.copy(numpy.ctypeslib.as_array(self._color_frame_data, shape=(self._color_frame_data_capacity.value,))) - self._last_color_frame_access = time.clock() + self._last_color_frame_access = time.perf_counter() return data else: return None @@ -252,7 +248,7 @@ def get_last_infrared_frame(self): with self._infrared_frame_lock: if self._infrared_frame_data is not None: data = numpy.copy(numpy.ctypeslib.as_array(self._infrared_frame_data, shape=(self._infrared_frame_data_capacity.value,))) - self._last_infrared_frame_access = time.clock() + self._last_infrared_frame_access = time.perf_counter() return data else: return None @@ -261,7 +257,7 @@ def get_last_depth_frame(self): with self._depth_frame_lock: if self._depth_frame_data is not None: data = numpy.copy(numpy.ctypeslib.as_array(self._depth_frame_data, shape=(self._depth_frame_data_capacity.value,))) - self._last_depth_frame_access = time.clock() + self._last_depth_frame_access = time.perf_counter() return data else: return None @@ -270,7 +266,7 @@ def get_last_body_index_frame(self): with self._body_index_frame_lock: if self._body_index_frame_data is not None: data = numpy.copy(numpy.ctypeslib.as_array(self._body_index_frame_data, shape=(self._body_index_frame_data_capacity.value,))) - self._last_body_index_frame_access = time.clock() + self._last_body_index_frame_access = time.perf_counter() return data else: return None @@ -278,7 +274,7 @@ def get_last_body_index_frame(self): def get_last_body_frame(self): with self._body_frame_lock: if self._body_frame_bodies is not None: - self._last_body_frame_access = time.clock() + self._last_body_frame_access = time.perf_counter() return self._body_frame_bodies.copy() else: return None @@ -340,7 +336,7 @@ def handle_color_arrived(self, handle_index): try: with self._color_frame_lock: colorFrame.CopyConvertedFrameDataToArray(self._color_frame_data_capacity, self._color_frame_data, PyKinectV2.ColorImageFormat_Bgra) - self._last_color_frame_time = time.clock() + self._last_color_frame_time = time.perf_counter() except: pass colorFrame = None @@ -358,7 +354,7 @@ def handle_depth_arrived(self, handle_index): try: with self._depth_frame_lock: depthFrame.CopyFrameDataToArray(self._depth_frame_data_capacity, self._depth_frame_data) - self._last_depth_frame_time = time.clock() + self._last_depth_frame_time = time.perf_counter() except: pass depthFrame = None @@ -378,7 +374,7 @@ def handle_body_arrived(self, handle_index): with self._body_frame_lock: bodyFrame.GetAndRefreshBodyData(self._body_frame_data_capacity, self._body_frame_data) self._body_frame_bodies = KinectBodyFrameData(bodyFrame, self._body_frame_data, self.max_body_count) - self._last_body_frame_time = time.clock() + self._last_body_frame_time = time.perf_counter() # need these 2 lines as a workaround for handling IBody referencing exception self._body_frame_data = None @@ -402,7 +398,7 @@ def handle_body_index_arrived(self, handle_index): try: with self._body_index_frame_lock: bodyIndexFrame.CopyFrameDataToArray(self._body_index_frame_data_capacity, self._body_index_frame_data) - self._last_body_index_frame_time = time.clock() + self._last_body_index_frame_time = time.perf_counter() except: pass bodyIndexFrame = None @@ -419,7 +415,7 @@ def handle_infrared_arrived(self, handle_index): try: with self._infrared_frame_lock: infraredFrame.CopyFrameDataToArray(self._infrared_frame_data_capacity, self._infrared_frame_data) - self._last_infrared_frame_time = time.clock() + self._last_infrared_frame_time = time.perf_counter() except: pass infraredFrame = None diff --git a/pykinect2/PyKinectV2.py b/pykinect2/PyKinectV2.py index 6fdb0ca..7ad1112 100644 --- a/pykinect2/PyKinectV2.py +++ b/pykinect2/PyKinectV2.py @@ -7,9 +7,7 @@ from comtypes import * from comtypes import GUID from ctypes import HRESULT -from comtypes import helpstring from comtypes import COMMETHOD -from comtypes import dispid STRING = c_char_p INT_PTR = c_int from ctypes.wintypes import _LARGE_INTEGER @@ -18,10 +16,9 @@ from ctypes.wintypes import _FILETIME WSTRING = c_wchar_p -from _ctypes import COMError comtypes.hresult.E_PENDING = 0x8000000A -import numpy.distutils.system_info as sysinfo + class _event(object): @@ -2216,7 +2213,15 @@ class ICoordinateMappingChangedEventArgs(comtypes.IUnknown): ('grfStateBits', c_ulong), ('reserved', c_ulong), ] -required_size = 64 + sysinfo.platform_bits / 4 + +# Test version to replace numpy.distutils which is deprecated +import struct + +def get_platform_bits(): + return 64 if struct.calcsize('P') * 8 == 64 else 32 + +platform_bits = get_platform_bits() +required_size = 64 + platform_bits / 4 assert sizeof(tagSTATSTG) == required_size, sizeof(tagSTATSTG) assert alignment(tagSTATSTG) == 8, alignment(tagSTATSTG) @@ -2865,7 +2870,8 @@ class IMultiSourceFrameReader(comtypes.IUnknown): 'JointType_HipLeft', 'ColorImageFormat_Rgba', 'IColorCameraSettings', '_DetectionResult', 'IColorFrameReader', 'ColorImageFormat_Yuy2', '_Activity'] -from comtypes import _check_version; _check_version('') + +# from comtypes import _check_version; _check_version('') KINECT_SKELETON_COUNT = 6