pyorbbec 1.0.1.25__cp310-cp310-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. OrbbecSDK.dll +0 -0
  2. OrbbecSDK.lib +0 -0
  3. OrbbecSDKConfig-release.cmake +19 -0
  4. OrbbecSDKConfig.cmake +104 -0
  5. OrbbecSDKConfig.xml +2332 -0
  6. extensions/depthengine/depthengine.dll +0 -0
  7. extensions/depthengine/depthengine.lib +0 -0
  8. extensions/filters/FilterProcessor.dll +0 -0
  9. extensions/filters/ob_priv_filter.dll +0 -0
  10. extensions/firmwareupdater/firmwareupdater.dll +0 -0
  11. extensions/frameprocessor/ob_frame_processor.dll +0 -0
  12. pyorbbec/__init__.py +1 -0
  13. pyorbbec/__version__.py +10 -0
  14. pyorbbec/config/OrbbecSDKConfig.md +222 -0
  15. pyorbbec/config/OrbbecSDKConfig.xml +2332 -0
  16. pyorbbec/config/multi_device_sync_config.json +28 -0
  17. pyorbbec/examples/.gitkeep +0 -0
  18. pyorbbec/examples/README.md +26 -0
  19. pyorbbec/examples/callback.py +303 -0
  20. pyorbbec/examples/color.py +64 -0
  21. pyorbbec/examples/coordinate_transform.py +184 -0
  22. pyorbbec/examples/depth.py +107 -0
  23. pyorbbec/examples/depth_work_mode.py +59 -0
  24. pyorbbec/examples/device_firmware_update.py +155 -0
  25. pyorbbec/examples/device_optional_depth_presets_update.py +142 -0
  26. pyorbbec/examples/enumerate.py +118 -0
  27. pyorbbec/examples/hdr.py +216 -0
  28. pyorbbec/examples/hot_plug.py +160 -0
  29. pyorbbec/examples/hw_d2c_align.py +135 -0
  30. pyorbbec/examples/imu.py +60 -0
  31. pyorbbec/examples/infrared.py +148 -0
  32. pyorbbec/examples/logger.py +55 -0
  33. pyorbbec/examples/metadata.py +64 -0
  34. pyorbbec/examples/multi_device.py +169 -0
  35. pyorbbec/examples/multi_streams.py +219 -0
  36. pyorbbec/examples/net_device.py +177 -0
  37. pyorbbec/examples/playback.py +277 -0
  38. pyorbbec/examples/point_cloud.py +90 -0
  39. pyorbbec/examples/post_processing.py +119 -0
  40. pyorbbec/examples/preset.py +67 -0
  41. pyorbbec/examples/quick_start.py +90 -0
  42. pyorbbec/examples/recorder.py +238 -0
  43. pyorbbec/examples/requirements.txt +9 -0
  44. pyorbbec/examples/save_image_to_disk.py +106 -0
  45. pyorbbec/examples/sync_align.py +109 -0
  46. pyorbbec/examples/two_devices_sync.py +233 -0
  47. pyorbbec/examples/utils.py +127 -0
  48. pyorbbec-1.0.1.25.dist-info/METADATA +12 -0
  49. pyorbbec-1.0.1.25.dist-info/RECORD +138 -0
  50. pyorbbec-1.0.1.25.dist-info/WHEEL +5 -0
  51. pyorbbec-1.0.1.25.dist-info/licenses/LICENSE +202 -0
  52. pyorbbec-1.0.1.25.dist-info/licenses/NOTICE +1 -0
  53. pyorbbec-1.0.1.25.dist-info/top_level.txt +1 -0
  54. pyorbbecsdk/OrbbecSDK.dll +0 -0
  55. pyorbbecsdk/OrbbecSDK.lib +0 -0
  56. pyorbbecsdk/OrbbecSDKConfig-release.cmake +19 -0
  57. pyorbbecsdk/OrbbecSDKConfig.cmake +104 -0
  58. pyorbbecsdk/OrbbecSDKConfig.xml +2332 -0
  59. pyorbbecsdk/__init__.py +1 -0
  60. pyorbbecsdk/__version__.py +10 -0
  61. pyorbbecsdk/config/OrbbecSDKConfig.md +222 -0
  62. pyorbbecsdk/config/OrbbecSDKConfig.xml +2332 -0
  63. pyorbbecsdk/config/multi_device_sync_config.json +28 -0
  64. pyorbbecsdk/examples/.gitkeep +0 -0
  65. pyorbbecsdk/examples/README.md +26 -0
  66. pyorbbecsdk/examples/callback.py +303 -0
  67. pyorbbecsdk/examples/color.py +64 -0
  68. pyorbbecsdk/examples/coordinate_transform.py +184 -0
  69. pyorbbecsdk/examples/depth.py +107 -0
  70. pyorbbecsdk/examples/depth_work_mode.py +59 -0
  71. pyorbbecsdk/examples/device_firmware_update.py +155 -0
  72. pyorbbecsdk/examples/device_optional_depth_presets_update.py +142 -0
  73. pyorbbecsdk/examples/enumerate.py +118 -0
  74. pyorbbecsdk/examples/hdr.py +216 -0
  75. pyorbbecsdk/examples/hot_plug.py +160 -0
  76. pyorbbecsdk/examples/hw_d2c_align.py +135 -0
  77. pyorbbecsdk/examples/imu.py +60 -0
  78. pyorbbecsdk/examples/infrared.py +148 -0
  79. pyorbbecsdk/examples/logger.py +55 -0
  80. pyorbbecsdk/examples/metadata.py +64 -0
  81. pyorbbecsdk/examples/multi_device.py +169 -0
  82. pyorbbecsdk/examples/multi_streams.py +219 -0
  83. pyorbbecsdk/examples/net_device.py +177 -0
  84. pyorbbecsdk/examples/playback.py +277 -0
  85. pyorbbecsdk/examples/point_cloud.py +90 -0
  86. pyorbbecsdk/examples/post_processing.py +119 -0
  87. pyorbbecsdk/examples/preset.py +67 -0
  88. pyorbbecsdk/examples/quick_start.py +90 -0
  89. pyorbbecsdk/examples/recorder.py +238 -0
  90. pyorbbecsdk/examples/requirements.txt +9 -0
  91. pyorbbecsdk/examples/save_image_to_disk.py +106 -0
  92. pyorbbecsdk/examples/sync_align.py +109 -0
  93. pyorbbecsdk/examples/two_devices_sync.py +233 -0
  94. pyorbbecsdk/examples/utils.py +127 -0
  95. pyorbbecsdk/extensions/depthengine/depthengine.dll +0 -0
  96. pyorbbecsdk/extensions/depthengine/depthengine.lib +0 -0
  97. pyorbbecsdk/extensions/filters/FilterProcessor.dll +0 -0
  98. pyorbbecsdk/extensions/filters/ob_priv_filter.dll +0 -0
  99. pyorbbecsdk/extensions/firmwareupdater/firmwareupdater.dll +0 -0
  100. pyorbbecsdk/extensions/frameprocessor/ob_frame_processor.dll +0 -0
  101. pyorbbecsdk/pyorbbecsdk/__init__.py +1 -0
  102. pyorbbecsdk/pyorbbecsdk/__version__.py +10 -0
  103. pyorbbecsdk/pyorbbecsdk/config/OrbbecSDKConfig.md +222 -0
  104. pyorbbecsdk/pyorbbecsdk/config/OrbbecSDKConfig.xml +2332 -0
  105. pyorbbecsdk/pyorbbecsdk/config/multi_device_sync_config.json +28 -0
  106. pyorbbecsdk/pyorbbecsdk/examples/.gitkeep +0 -0
  107. pyorbbecsdk/pyorbbecsdk/examples/README.md +26 -0
  108. pyorbbecsdk/pyorbbecsdk/examples/callback.py +303 -0
  109. pyorbbecsdk/pyorbbecsdk/examples/color.py +64 -0
  110. pyorbbecsdk/pyorbbecsdk/examples/coordinate_transform.py +184 -0
  111. pyorbbecsdk/pyorbbecsdk/examples/depth.py +107 -0
  112. pyorbbecsdk/pyorbbecsdk/examples/depth_work_mode.py +59 -0
  113. pyorbbecsdk/pyorbbecsdk/examples/device_firmware_update.py +155 -0
  114. pyorbbecsdk/pyorbbecsdk/examples/device_optional_depth_presets_update.py +142 -0
  115. pyorbbecsdk/pyorbbecsdk/examples/enumerate.py +118 -0
  116. pyorbbecsdk/pyorbbecsdk/examples/hdr.py +216 -0
  117. pyorbbecsdk/pyorbbecsdk/examples/hot_plug.py +160 -0
  118. pyorbbecsdk/pyorbbecsdk/examples/hw_d2c_align.py +135 -0
  119. pyorbbecsdk/pyorbbecsdk/examples/imu.py +60 -0
  120. pyorbbecsdk/pyorbbecsdk/examples/infrared.py +148 -0
  121. pyorbbecsdk/pyorbbecsdk/examples/logger.py +55 -0
  122. pyorbbecsdk/pyorbbecsdk/examples/metadata.py +64 -0
  123. pyorbbecsdk/pyorbbecsdk/examples/multi_device.py +169 -0
  124. pyorbbecsdk/pyorbbecsdk/examples/multi_streams.py +219 -0
  125. pyorbbecsdk/pyorbbecsdk/examples/net_device.py +177 -0
  126. pyorbbecsdk/pyorbbecsdk/examples/playback.py +277 -0
  127. pyorbbecsdk/pyorbbecsdk/examples/point_cloud.py +90 -0
  128. pyorbbecsdk/pyorbbecsdk/examples/post_processing.py +119 -0
  129. pyorbbecsdk/pyorbbecsdk/examples/preset.py +67 -0
  130. pyorbbecsdk/pyorbbecsdk/examples/quick_start.py +90 -0
  131. pyorbbecsdk/pyorbbecsdk/examples/recorder.py +238 -0
  132. pyorbbecsdk/pyorbbecsdk/examples/requirements.txt +9 -0
  133. pyorbbecsdk/pyorbbecsdk/examples/save_image_to_disk.py +106 -0
  134. pyorbbecsdk/pyorbbecsdk/examples/sync_align.py +109 -0
  135. pyorbbecsdk/pyorbbecsdk/examples/two_devices_sync.py +233 -0
  136. pyorbbecsdk/pyorbbecsdk/examples/utils.py +127 -0
  137. pyorbbecsdk/pyorbbecsdk.cp310-win_amd64.pyd +0 -0
  138. pyorbbecsdk.cp310-win_amd64.pyd +0 -0
@@ -0,0 +1,233 @@
1
+ # ******************************************************************************
2
+ # Copyright (c) 2024 Orbbec 3D Technology, Inc
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http:# www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ******************************************************************************
16
+ import json
17
+ import os
18
+ from queue import Queue
19
+ from typing import List
20
+
21
+ import cv2
22
+ import numpy as np
23
+
24
+ from pyorbbecsdk import *
25
+ from utils import frame_to_bgr_image
26
+
27
+ MAX_DEVICES = 2
28
+ curr_device_cnt = 0
29
+
30
+ MAX_QUEUE_SIZE = 5
31
+ ESC_KEY = 27
32
+
33
+ color_frames_queue: List[Queue] = [Queue() for _ in range(MAX_DEVICES)]
34
+ depth_frames_queue: List[Queue] = [Queue() for _ in range(MAX_DEVICES)]
35
+ serial_number_list: List[str] = ["" for _ in range(MAX_DEVICES)]
36
+ has_color_sensor: List[bool] = [False for _ in range(MAX_DEVICES)]
37
+ stop_rendering = False
38
+ multi_device_sync_config = {}
39
+ # config_file_path current file path
40
+ config_file_path = os.path.join(
41
+ os.path.abspath(os.path.dirname(__file__)),
42
+ "../config/multi_device_sync_config.json",
43
+ )
44
+
45
+
46
+ def sync_mode_from_str(sync_mode_str: str) -> OBMultiDeviceSyncMode:
47
+ # to lower case
48
+ sync_mode_str = sync_mode_str.upper()
49
+ if sync_mode_str == "FREE_RUN":
50
+ return OBMultiDeviceSyncMode.FREE_RUN
51
+ elif sync_mode_str == "STANDALONE":
52
+ return OBMultiDeviceSyncMode.STANDALONE
53
+ elif sync_mode_str == "PRIMARY":
54
+ return OBMultiDeviceSyncMode.PRIMARY
55
+ elif sync_mode_str == "SECONDARY":
56
+ return OBMultiDeviceSyncMode.SECONDARY
57
+ elif sync_mode_str == "SECONDARY_SYNCED":
58
+ return OBMultiDeviceSyncMode.SECONDARY_SYNCED
59
+ elif sync_mode_str == "SOFTWARE_TRIGGERING":
60
+ return OBMultiDeviceSyncMode.SOFTWARE_TRIGGERING
61
+ elif sync_mode_str == "HARDWARE_TRIGGERING":
62
+ return OBMultiDeviceSyncMode.HARDWARE_TRIGGERING
63
+ else:
64
+ raise ValueError(f"Invalid sync mode: {sync_mode_str}")
65
+
66
+
67
+ def on_new_frame_callback(frames: FrameSet, index: int):
68
+ global color_frames_queue, depth_frames_queue
69
+ global MAX_QUEUE_SIZE
70
+ assert index < MAX_DEVICES
71
+ color_frame = frames.get_color_frame()
72
+ depth_frame = frames.get_depth_frame()
73
+ if color_frame is not None:
74
+ if color_frames_queue[index].qsize() >= MAX_QUEUE_SIZE:
75
+ color_frames_queue[index].get()
76
+ color_frames_queue[index].put(color_frame)
77
+ if depth_frame is not None:
78
+ if depth_frames_queue[index].qsize() >= MAX_QUEUE_SIZE:
79
+ depth_frames_queue[index].get()
80
+ depth_frames_queue[index].put(depth_frame)
81
+
82
+
83
+ def rendering_frames():
84
+ global color_frames_queue, depth_frames_queue
85
+ global curr_device_cnt
86
+ global stop_rendering
87
+ global serial_number_list
88
+ while not stop_rendering:
89
+ for i in range(curr_device_cnt):
90
+ color_frame = None
91
+ depth_frame = None
92
+ if not color_frames_queue[i].empty():
93
+ color_frame = color_frames_queue[i].get()
94
+ if not depth_frames_queue[i].empty():
95
+ depth_frame = depth_frames_queue[i].get()
96
+ if color_frame is None and depth_frame is None:
97
+ continue
98
+
99
+ # print serial number, color timestamp, depth timestamp, break line
100
+ if color_frame is not None:
101
+ print(f"device#{i}, color frame timestamp: {color_frame.get_timestamp_us()} us , system timestamp: {color_frame.get_system_timestamp_us()} us")
102
+ if depth_frame is not None:
103
+ print(f"device#{i}, depth frame timestamp: {depth_frame.get_timestamp_us()} us , system timestamp: {depth_frame.get_system_timestamp_us()} us")
104
+ color_image = None
105
+ depth_image = None
106
+ color_width, color_height = 0, 0
107
+ if color_frame is not None:
108
+ color_width, color_height = (
109
+ color_frame.get_width(),
110
+ color_frame.get_height(),
111
+ )
112
+ color_image = frame_to_bgr_image(color_frame)
113
+ if depth_frame is not None:
114
+ width = depth_frame.get_width()
115
+ height = depth_frame.get_height()
116
+ scale = depth_frame.get_depth_scale()
117
+ depth_format = depth_frame.get_format()
118
+ if depth_format != OBFormat.Y16:
119
+ print("depth format is not Y16")
120
+ continue
121
+ depth_data = np.frombuffer(depth_frame.get_data(), dtype=np.uint16)
122
+ depth_data = depth_data.reshape((height, width))
123
+
124
+ depth_data = depth_data.astype(np.float32) * scale
125
+
126
+ depth_image = cv2.normalize(
127
+ depth_data, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U
128
+ )
129
+ depth_image = cv2.applyColorMap(depth_image, cv2.COLORMAP_JET)
130
+
131
+ if color_image is not None and depth_image is not None:
132
+ window_size = (color_width // 2, color_height // 2)
133
+ color_image = cv2.resize(color_image, window_size)
134
+ depth_image = cv2.resize(depth_image, window_size)
135
+ image = np.hstack((color_image, depth_image))
136
+ elif depth_image is not None and not has_color_sensor[i]:
137
+ image = depth_image
138
+ else:
139
+ continue
140
+ cv2.imshow("Device {}".format(i), image)
141
+ key = cv2.waitKey(1)
142
+ if key == ord("q") or key == ESC_KEY:
143
+ return
144
+
145
+
146
+ def start_streams(pipelines: List[Pipeline], configs: List[Config]):
147
+ index = 0
148
+ for pipeline, config in zip(pipelines, configs):
149
+ pipeline.start(
150
+ config,
151
+ lambda frame_set, curr_index=index: on_new_frame_callback(
152
+ frame_set, curr_index
153
+ ),
154
+ )
155
+ index += 1
156
+
157
+
158
+ def stop_streams(pipelines: List[Pipeline]):
159
+ for pipeline in pipelines:
160
+ pipeline.stop()
161
+
162
+
163
+ def read_config(config_file: str):
164
+ global multi_device_sync_config
165
+ with open(config_file, "r") as f:
166
+ config = json.load(f)
167
+ for device in config["devices"]:
168
+ multi_device_sync_config[device["serial_number"]] = device
169
+ print(f"Device {device['serial_number']}: {device['config']['mode']}")
170
+
171
+
172
+ def main():
173
+ global config_file_path
174
+ read_config(config_file_path)
175
+ ctx = Context()
176
+ device_list = ctx.query_devices()
177
+ global curr_device_cnt
178
+ curr_device_cnt = device_list.get_count()
179
+ if curr_device_cnt == 0:
180
+ print("No device connected")
181
+ return
182
+ if curr_device_cnt > MAX_DEVICES:
183
+ print("Too many devices connected")
184
+ return
185
+ pipelines: List[Pipeline] = []
186
+ configs: List[Config] = []
187
+ global has_color_sensor
188
+ for i in range(device_list.get_count()):
189
+ device = device_list.get_device_by_index(i)
190
+ pipeline = Pipeline(device)
191
+ config = Config()
192
+ serial_number = device.get_device_info().get_serial_number()
193
+ serial_number_list[i] = serial_number
194
+ sync_config_json = multi_device_sync_config[serial_number]
195
+ sync_config = device.get_multi_device_sync_config()
196
+ sync_config.mode = sync_mode_from_str(sync_config_json["config"]["mode"])
197
+ sync_config.color_delay_us = sync_config_json["config"]["color_delay_us"]
198
+ sync_config.depth_delay_us = sync_config_json["config"]["depth_delay_us"]
199
+ sync_config.trigger_out_enable = sync_config_json["config"]["trigger_out_enable"]
200
+ sync_config.trigger_out_delay_us = sync_config_json["config"]["trigger_out_delay_us"]
201
+ sync_config.frames_per_trigger = sync_config_json["config"]["frames_per_trigger"]
202
+ print(f"Device {serial_number} sync config: {sync_config}")
203
+ device.set_multi_device_sync_config(sync_config)
204
+ try:
205
+ profile_list = pipeline.get_stream_profile_list(OBSensorType.COLOR_SENSOR)
206
+ color_profile: VideoStreamProfile = (
207
+ profile_list.get_default_video_stream_profile()
208
+ )
209
+ config.enable_stream(color_profile)
210
+ has_color_sensor[i] = True
211
+ except OBError as e:
212
+ print(e)
213
+ has_color_sensor[i] = False
214
+ profile_list = pipeline.get_stream_profile_list(OBSensorType.DEPTH_SENSOR)
215
+ depth_profile = profile_list.get_default_video_stream_profile()
216
+ config.enable_stream(depth_profile)
217
+ config.enable_stream(depth_profile)
218
+ pipelines.append(pipeline)
219
+ configs.append(config)
220
+ global stop_rendering
221
+ start_streams(pipelines, configs)
222
+ ctx.enable_multi_device_sync(60000)
223
+ try:
224
+ rendering_frames()
225
+ stop_streams(pipelines)
226
+ except KeyboardInterrupt:
227
+ stop_rendering = True
228
+ stop_streams(pipelines)
229
+ cv2.destroyAllWindows()
230
+
231
+
232
+ if __name__ == "__main__":
233
+ main()
@@ -0,0 +1,127 @@
1
+ # ******************************************************************************
2
+ # Copyright (c) 2024 Orbbec 3D Technology, Inc
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http:# www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ******************************************************************************
16
+ from typing import Union, Any, Optional
17
+
18
+ import cv2
19
+ import numpy as np
20
+
21
+ from pyorbbecsdk import FormatConvertFilter, VideoFrame
22
+ from pyorbbecsdk import OBFormat, OBConvertFormat
23
+
24
+
25
+ def yuyv_to_bgr(frame: np.ndarray, width: int, height: int) -> np.ndarray:
26
+ yuyv = frame.reshape((height, width, 2))
27
+ bgr_image = cv2.cvtColor(yuyv, cv2.COLOR_YUV2BGR_YUY2)
28
+ return bgr_image
29
+
30
+
31
+ def uyvy_to_bgr(frame: np.ndarray, width: int, height: int) -> np.ndarray:
32
+ uyvy = frame.reshape((height, width, 2))
33
+ bgr_image = cv2.cvtColor(uyvy, cv2.COLOR_YUV2BGR_UYVY)
34
+ return bgr_image
35
+
36
+
37
+ def i420_to_bgr(frame: np.ndarray, width: int, height: int) -> np.ndarray:
38
+ y = frame[0:height, :]
39
+ u = frame[height:height + height // 4].reshape(height // 2, width // 2)
40
+ v = frame[height + height // 4:].reshape(height // 2, width // 2)
41
+ yuv_image = cv2.merge([y, u, v])
42
+ bgr_image = cv2.cvtColor(yuv_image, cv2.COLOR_YUV2BGR_I420)
43
+ return bgr_image
44
+
45
+
46
+ def nv21_to_bgr(frame: np.ndarray, width: int, height: int) -> np.ndarray:
47
+ y = frame[0:height, :]
48
+ uv = frame[height:height + height // 2].reshape(height // 2, width)
49
+ yuv_image = cv2.merge([y, uv])
50
+ bgr_image = cv2.cvtColor(yuv_image, cv2.COLOR_YUV2BGR_NV21)
51
+ return bgr_image
52
+
53
+
54
+ def nv12_to_bgr(frame: np.ndarray, width: int, height: int) -> np.ndarray:
55
+ y = frame[0:height, :]
56
+ uv = frame[height:height + height // 2].reshape(height // 2, width)
57
+ yuv_image = cv2.merge([y, uv])
58
+ bgr_image = cv2.cvtColor(yuv_image, cv2.COLOR_YUV2BGR_NV12)
59
+ return bgr_image
60
+
61
+
62
+ def determine_convert_format(frame: VideoFrame):
63
+ if frame.get_format() == OBFormat.I420:
64
+ return OBConvertFormat.I420_TO_RGB888
65
+ elif frame.get_format() == OBFormat.MJPG:
66
+ return OBConvertFormat.MJPG_TO_RGB888
67
+ elif frame.get_format() == OBFormat.YUYV:
68
+ return OBConvertFormat.YUYV_TO_RGB888
69
+ elif frame.get_format() == OBFormat.NV21:
70
+ return OBConvertFormat.NV21_TO_RGB888
71
+ elif frame.get_format() == OBFormat.NV12:
72
+ return OBConvertFormat.NV12_TO_RGB888
73
+ elif frame.get_format() == OBFormat.UYVY:
74
+ return OBConvertFormat.UYVY_TO_RGB888
75
+ else:
76
+ return None
77
+
78
+
79
+ def frame_to_rgb_frame(frame: VideoFrame) -> Union[Optional[VideoFrame], Any]:
80
+ if frame.get_format() == OBFormat.RGB:
81
+ return frame
82
+ convert_format = determine_convert_format(frame)
83
+ if convert_format is None:
84
+ print("Unsupported format")
85
+ return None
86
+ print("covert format: {}".format(convert_format))
87
+ convert_filter = FormatConvertFilter()
88
+ convert_filter.set_format_convert_format(convert_format)
89
+ rgb_frame = convert_filter.process(frame)
90
+ if rgb_frame is None:
91
+ print("Convert {} to RGB failed".format(frame.get_format()))
92
+ return rgb_frame
93
+
94
+
95
+ def frame_to_bgr_image(frame: VideoFrame) -> Union[Optional[np.array], Any]:
96
+ width = frame.get_width()
97
+ height = frame.get_height()
98
+ color_format = frame.get_format()
99
+ data = np.asanyarray(frame.get_data())
100
+ image = np.zeros((height, width, 3), dtype=np.uint8)
101
+ if color_format == OBFormat.RGB:
102
+ image = np.resize(data, (height, width, 3))
103
+ image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
104
+ elif color_format == OBFormat.BGR:
105
+ image = np.resize(data, (height, width, 3))
106
+ image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
107
+ elif color_format == OBFormat.YUYV:
108
+ image = np.resize(data, (height, width, 2))
109
+ image = cv2.cvtColor(image, cv2.COLOR_YUV2BGR_YUYV)
110
+ elif color_format == OBFormat.MJPG:
111
+ image = cv2.imdecode(data, cv2.IMREAD_COLOR)
112
+ elif color_format == OBFormat.I420:
113
+ image = i420_to_bgr(data, width, height)
114
+ return image
115
+ elif color_format == OBFormat.NV12:
116
+ image = nv12_to_bgr(data, width, height)
117
+ return image
118
+ elif color_format == OBFormat.NV21:
119
+ image = nv21_to_bgr(data, width, height)
120
+ return image
121
+ elif color_format == OBFormat.UYVY:
122
+ image = np.resize(data, (height, width, 2))
123
+ image = cv2.cvtColor(image, cv2.COLOR_YUV2BGR_UYVY)
124
+ else:
125
+ print("Unsupported color format: {}".format(color_format))
126
+ return None
127
+ return image
@@ -0,0 +1,12 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyorbbec
3
+ Version: 1.0.1.25
4
+ Summary: pyorbbecsdk is a python wrapper for the OrbbecSDK
5
+ Author: zhonghong
6
+ Author-email: zhonghong@orbbec.com
7
+ License-File: LICENSE
8
+ License-File: NOTICE
9
+ Dynamic: author
10
+ Dynamic: author-email
11
+ Dynamic: license-file
12
+ Dynamic: summary
@@ -0,0 +1,138 @@
1
+ OrbbecSDK.dll,sha256=z8IS-6IMIU1EL4zGqjm-es1b3PdwjQ_NF56KcseKd1c,5898240
2
+ OrbbecSDK.lib,sha256=tMwbGojYZOSpMKXeGynYJ8_CJELDpc_ISMtyXKBdCxo,88226
3
+ OrbbecSDKConfig-release.cmake,sha256=dwib3awBDW2EaDnRnWtagTyEJVvITNQdXs4EDoycNQE,913
4
+ OrbbecSDKConfig.cmake,sha256=4Gpn1MPUwZRHlTzpQR-7bnWspmPRhvgPJqFPUN6aEeM,4090
5
+ OrbbecSDKConfig.xml,sha256=tLezO2f22zJdc6fe17qVBkoRK1mAtN9D-mpjc-msu58,116521
6
+ pyorbbecsdk.cp310-win_amd64.pyd,sha256=4RypYufkOp07cutIG9YNrWT0fFUy1rBl7_gVuupUAHg,1083392
7
+ extensions/depthengine/depthengine.dll,sha256=wBTUpKUOdczTdfocLQP9HIyGu-erP24fgQLK8QPkwww,355328
8
+ extensions/depthengine/depthengine.lib,sha256=jGOeCkxG97Dxe3DXWdx9NjMO8pDhWiVo3uJpO5x_b7A,5194
9
+ extensions/filters/FilterProcessor.dll,sha256=MkdKafj-3_G8JdGlntck2Em_vWS4Xy-qoDpHI9ZvGP4,101376
10
+ extensions/filters/ob_priv_filter.dll,sha256=qwqN-yQBUEuCW5nLUFLa_5-pvyguTA9sXDYFvQLCkiI,69120
11
+ extensions/firmwareupdater/firmwareupdater.dll,sha256=phMqyuz1iePcP2E7J9UBeu1cqgo2KGRlrQkXVKVUMU0,223744
12
+ extensions/frameprocessor/ob_frame_processor.dll,sha256=uiAU81qRwPfEPaLqduYZY7lIe_clONtdqG7bQIiwrBw,179200
13
+ pyorbbec/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
14
+ pyorbbec/__version__.py,sha256=A7lTxKw06iHB99ygtvk_bxIr7wFSg3VghDAYWNEB_Sk,324
15
+ pyorbbec/config/OrbbecSDKConfig.md,sha256=IZLMDT9TDKSYIe9nN2cGXip4Tu8Q8hxU2ZXGDPV5zE4,11973
16
+ pyorbbec/config/OrbbecSDKConfig.xml,sha256=tLezO2f22zJdc6fe17qVBkoRK1mAtN9D-mpjc-msu58,116521
17
+ pyorbbec/config/multi_device_sync_config.json,sha256=UPXVYICKx7__E6Qdpp-cJhkykEQ_ANzGCFk2twS2Ir8,828
18
+ pyorbbec/examples/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ pyorbbec/examples/README.md,sha256=RcYtrgMSkRJzV9F1x2pFMOWeufUlXhBx1AU8SA-khvk,6688
20
+ pyorbbec/examples/callback.py,sha256=OIwPl0n7-RqoID-rYQ3lLn0JuW8A_UoKDpivEkmUrHQ,10089
21
+ pyorbbec/examples/color.py,sha256=hoYePHn2nr-87hI9b2HsrGxM1puoQY-L7HcaXdJbxMs,2280
22
+ pyorbbec/examples/coordinate_transform.py,sha256=8PtR5X-CW3HL63f90H1HTW1GIk78x8zHCsxtIA7FGCA,7597
23
+ pyorbbec/examples/depth.py,sha256=UMVLhW2KwmRzyx6iQOE0UQ6w4BxRmKr9zJTe55YwzNk,3843
24
+ pyorbbec/examples/depth_work_mode.py,sha256=s_CynLMNOJ5ho_W3LlQSb6xsOxq9ic9cwNYuQIpiQOQ,2679
25
+ pyorbbec/examples/device_firmware_update.py,sha256=C7PQYJaq9-ZHQ1aHPpWzNAtNLEXYp3RCMn2dhf_F0Ts,5684
26
+ pyorbbec/examples/device_optional_depth_presets_update.py,sha256=Od0it5ZkyASuRLKwWIBg0kb1z-iGK4jyUI3iariczXc,5313
27
+ pyorbbec/examples/enumerate.py,sha256=iBOYtxoj_ONDi96786MBnBNdyIupoeDkzr6E9Vxp7zQ,4542
28
+ pyorbbec/examples/hdr.py,sha256=fIydBjSMoZDYnPA5nZRLHjoTP0qTARbihvfaa-kmzZw,8243
29
+ pyorbbec/examples/hot_plug.py,sha256=j93htlFu1WHG6GQroXReuWfBQeHlSzthhvCI-UFBcTs,5517
30
+ pyorbbec/examples/hw_d2c_align.py,sha256=7YpSp3a39IXwwIcjpRQ-iC-9jC3uVO4-xAdcuI0WFcc,4909
31
+ pyorbbec/examples/imu.py,sha256=AONK3NEo7StlAf0z1tAOAebwP1zm1xveXP8Qk1TUT_s,2470
32
+ pyorbbec/examples/infrared.py,sha256=N8jP0DjwIYo7XeEtlcJMo0yxo08qwO9NnfiibGDjKSE,5235
33
+ pyorbbec/examples/logger.py,sha256=6_QT14NOIA3toIeWiIUkZzeiQqU0X16b5fMbzAOjJ3M,2053
34
+ pyorbbec/examples/metadata.py,sha256=bNXwOLiJL22eZODoDditsJ4gAhSBqAnBoAveYP7Kc-o,2432
35
+ pyorbbec/examples/multi_device.py,sha256=sOY-ibIYFbgTjU6jWz2GxFA_V4V2PozMRbnR4iBVx6E,6574
36
+ pyorbbec/examples/multi_streams.py,sha256=SU_17Hpz8B-H8ZZsId6ikrWiEDwSPZER8dPIxQf8iEI,7435
37
+ pyorbbec/examples/net_device.py,sha256=wnaxNrhMfDmMIoH0jo0cIz4_QQXUZAwKQgA7tUHuZPo,6319
38
+ pyorbbec/examples/playback.py,sha256=pDHHVcnIQQ1NMo-S3xZUMPaAK-K_lnnDHmkelnzLO5k,9714
39
+ pyorbbec/examples/point_cloud.py,sha256=taxO558Mi2EnVe-wUnjHDsmyNK08x2XKDtldbQednVI,3350
40
+ pyorbbec/examples/post_processing.py,sha256=uZiSb8PRPz1xC4Bykq0-Y9Lo6JYO85u7JLmjU5GKJe4,4622
41
+ pyorbbec/examples/preset.py,sha256=tMPw3fvB1DbaS8EZW3Qcllpp2WHR613W3eHusP9Jmp4,2440
42
+ pyorbbec/examples/quick_start.py,sha256=CCCzX7jNqdPA9ToOwmNFo0HiDXjAprRXieIn_s9UxBA,3329
43
+ pyorbbec/examples/recorder.py,sha256=TyTguLIgIzZsVu86DezziLlcKc4zqBSoNuVB9GLiB9A,8122
44
+ pyorbbec/examples/requirements.txt,sha256=rhA823-1338jfVO5OCYytSX7Xg1Eux8k0C-CADEm5ug,252
45
+ pyorbbec/examples/save_image_to_disk.py,sha256=IhLVQ1S-l6IX6EVEK5xHLFZD-7fpDxQLC1ufviDtASs,3984
46
+ pyorbbec/examples/sync_align.py,sha256=35x3Rm0K5SbPQL7V16XBUOvQI0o3hQBXhLTRbtg3_nk,4040
47
+ pyorbbec/examples/two_devices_sync.py,sha256=O0tu1YNIHX3WVtnswdx7VkkRnUbdZ4kARf6WyilBU20,9450
48
+ pyorbbec/examples/utils.py,sha256=UHDUGqXhoRyhkkAahcbA1r0KX4le7q68GV4LjkcfXx0,5092
49
+ pyorbbec-1.0.1.25.dist-info/licenses/LICENSE,sha256=SbvpEU5JIU3yzMMkyzrI0dGqHDoJR_lMKGdl6GZHsy4,11558
50
+ pyorbbec-1.0.1.25.dist-info/licenses/NOTICE,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
51
+ pyorbbecsdk/OrbbecSDK.dll,sha256=z8IS-6IMIU1EL4zGqjm-es1b3PdwjQ_NF56KcseKd1c,5898240
52
+ pyorbbecsdk/OrbbecSDK.lib,sha256=tMwbGojYZOSpMKXeGynYJ8_CJELDpc_ISMtyXKBdCxo,88226
53
+ pyorbbecsdk/OrbbecSDKConfig-release.cmake,sha256=dwib3awBDW2EaDnRnWtagTyEJVvITNQdXs4EDoycNQE,913
54
+ pyorbbecsdk/OrbbecSDKConfig.cmake,sha256=4Gpn1MPUwZRHlTzpQR-7bnWspmPRhvgPJqFPUN6aEeM,4090
55
+ pyorbbecsdk/OrbbecSDKConfig.xml,sha256=tLezO2f22zJdc6fe17qVBkoRK1mAtN9D-mpjc-msu58,116521
56
+ pyorbbecsdk/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
57
+ pyorbbecsdk/__version__.py,sha256=A7lTxKw06iHB99ygtvk_bxIr7wFSg3VghDAYWNEB_Sk,324
58
+ pyorbbecsdk/pyorbbecsdk.cp310-win_amd64.pyd,sha256=4RypYufkOp07cutIG9YNrWT0fFUy1rBl7_gVuupUAHg,1083392
59
+ pyorbbecsdk/config/OrbbecSDKConfig.md,sha256=IZLMDT9TDKSYIe9nN2cGXip4Tu8Q8hxU2ZXGDPV5zE4,11973
60
+ pyorbbecsdk/config/OrbbecSDKConfig.xml,sha256=tLezO2f22zJdc6fe17qVBkoRK1mAtN9D-mpjc-msu58,116521
61
+ pyorbbecsdk/config/multi_device_sync_config.json,sha256=UPXVYICKx7__E6Qdpp-cJhkykEQ_ANzGCFk2twS2Ir8,828
62
+ pyorbbecsdk/examples/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ pyorbbecsdk/examples/README.md,sha256=RcYtrgMSkRJzV9F1x2pFMOWeufUlXhBx1AU8SA-khvk,6688
64
+ pyorbbecsdk/examples/callback.py,sha256=OIwPl0n7-RqoID-rYQ3lLn0JuW8A_UoKDpivEkmUrHQ,10089
65
+ pyorbbecsdk/examples/color.py,sha256=hoYePHn2nr-87hI9b2HsrGxM1puoQY-L7HcaXdJbxMs,2280
66
+ pyorbbecsdk/examples/coordinate_transform.py,sha256=8PtR5X-CW3HL63f90H1HTW1GIk78x8zHCsxtIA7FGCA,7597
67
+ pyorbbecsdk/examples/depth.py,sha256=UMVLhW2KwmRzyx6iQOE0UQ6w4BxRmKr9zJTe55YwzNk,3843
68
+ pyorbbecsdk/examples/depth_work_mode.py,sha256=s_CynLMNOJ5ho_W3LlQSb6xsOxq9ic9cwNYuQIpiQOQ,2679
69
+ pyorbbecsdk/examples/device_firmware_update.py,sha256=C7PQYJaq9-ZHQ1aHPpWzNAtNLEXYp3RCMn2dhf_F0Ts,5684
70
+ pyorbbecsdk/examples/device_optional_depth_presets_update.py,sha256=Od0it5ZkyASuRLKwWIBg0kb1z-iGK4jyUI3iariczXc,5313
71
+ pyorbbecsdk/examples/enumerate.py,sha256=iBOYtxoj_ONDi96786MBnBNdyIupoeDkzr6E9Vxp7zQ,4542
72
+ pyorbbecsdk/examples/hdr.py,sha256=fIydBjSMoZDYnPA5nZRLHjoTP0qTARbihvfaa-kmzZw,8243
73
+ pyorbbecsdk/examples/hot_plug.py,sha256=j93htlFu1WHG6GQroXReuWfBQeHlSzthhvCI-UFBcTs,5517
74
+ pyorbbecsdk/examples/hw_d2c_align.py,sha256=7YpSp3a39IXwwIcjpRQ-iC-9jC3uVO4-xAdcuI0WFcc,4909
75
+ pyorbbecsdk/examples/imu.py,sha256=AONK3NEo7StlAf0z1tAOAebwP1zm1xveXP8Qk1TUT_s,2470
76
+ pyorbbecsdk/examples/infrared.py,sha256=N8jP0DjwIYo7XeEtlcJMo0yxo08qwO9NnfiibGDjKSE,5235
77
+ pyorbbecsdk/examples/logger.py,sha256=6_QT14NOIA3toIeWiIUkZzeiQqU0X16b5fMbzAOjJ3M,2053
78
+ pyorbbecsdk/examples/metadata.py,sha256=bNXwOLiJL22eZODoDditsJ4gAhSBqAnBoAveYP7Kc-o,2432
79
+ pyorbbecsdk/examples/multi_device.py,sha256=sOY-ibIYFbgTjU6jWz2GxFA_V4V2PozMRbnR4iBVx6E,6574
80
+ pyorbbecsdk/examples/multi_streams.py,sha256=SU_17Hpz8B-H8ZZsId6ikrWiEDwSPZER8dPIxQf8iEI,7435
81
+ pyorbbecsdk/examples/net_device.py,sha256=wnaxNrhMfDmMIoH0jo0cIz4_QQXUZAwKQgA7tUHuZPo,6319
82
+ pyorbbecsdk/examples/playback.py,sha256=pDHHVcnIQQ1NMo-S3xZUMPaAK-K_lnnDHmkelnzLO5k,9714
83
+ pyorbbecsdk/examples/point_cloud.py,sha256=taxO558Mi2EnVe-wUnjHDsmyNK08x2XKDtldbQednVI,3350
84
+ pyorbbecsdk/examples/post_processing.py,sha256=uZiSb8PRPz1xC4Bykq0-Y9Lo6JYO85u7JLmjU5GKJe4,4622
85
+ pyorbbecsdk/examples/preset.py,sha256=tMPw3fvB1DbaS8EZW3Qcllpp2WHR613W3eHusP9Jmp4,2440
86
+ pyorbbecsdk/examples/quick_start.py,sha256=CCCzX7jNqdPA9ToOwmNFo0HiDXjAprRXieIn_s9UxBA,3329
87
+ pyorbbecsdk/examples/recorder.py,sha256=TyTguLIgIzZsVu86DezziLlcKc4zqBSoNuVB9GLiB9A,8122
88
+ pyorbbecsdk/examples/requirements.txt,sha256=rhA823-1338jfVO5OCYytSX7Xg1Eux8k0C-CADEm5ug,252
89
+ pyorbbecsdk/examples/save_image_to_disk.py,sha256=IhLVQ1S-l6IX6EVEK5xHLFZD-7fpDxQLC1ufviDtASs,3984
90
+ pyorbbecsdk/examples/sync_align.py,sha256=35x3Rm0K5SbPQL7V16XBUOvQI0o3hQBXhLTRbtg3_nk,4040
91
+ pyorbbecsdk/examples/two_devices_sync.py,sha256=O0tu1YNIHX3WVtnswdx7VkkRnUbdZ4kARf6WyilBU20,9450
92
+ pyorbbecsdk/examples/utils.py,sha256=UHDUGqXhoRyhkkAahcbA1r0KX4le7q68GV4LjkcfXx0,5092
93
+ pyorbbecsdk/extensions/depthengine/depthengine.dll,sha256=wBTUpKUOdczTdfocLQP9HIyGu-erP24fgQLK8QPkwww,355328
94
+ pyorbbecsdk/extensions/depthengine/depthengine.lib,sha256=jGOeCkxG97Dxe3DXWdx9NjMO8pDhWiVo3uJpO5x_b7A,5194
95
+ pyorbbecsdk/extensions/filters/FilterProcessor.dll,sha256=MkdKafj-3_G8JdGlntck2Em_vWS4Xy-qoDpHI9ZvGP4,101376
96
+ pyorbbecsdk/extensions/filters/ob_priv_filter.dll,sha256=qwqN-yQBUEuCW5nLUFLa_5-pvyguTA9sXDYFvQLCkiI,69120
97
+ pyorbbecsdk/extensions/firmwareupdater/firmwareupdater.dll,sha256=phMqyuz1iePcP2E7J9UBeu1cqgo2KGRlrQkXVKVUMU0,223744
98
+ pyorbbecsdk/extensions/frameprocessor/ob_frame_processor.dll,sha256=uiAU81qRwPfEPaLqduYZY7lIe_clONtdqG7bQIiwrBw,179200
99
+ pyorbbecsdk/pyorbbecsdk/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
100
+ pyorbbecsdk/pyorbbecsdk/__version__.py,sha256=A7lTxKw06iHB99ygtvk_bxIr7wFSg3VghDAYWNEB_Sk,324
101
+ pyorbbecsdk/pyorbbecsdk/config/OrbbecSDKConfig.md,sha256=IZLMDT9TDKSYIe9nN2cGXip4Tu8Q8hxU2ZXGDPV5zE4,11973
102
+ pyorbbecsdk/pyorbbecsdk/config/OrbbecSDKConfig.xml,sha256=tLezO2f22zJdc6fe17qVBkoRK1mAtN9D-mpjc-msu58,116521
103
+ pyorbbecsdk/pyorbbecsdk/config/multi_device_sync_config.json,sha256=UPXVYICKx7__E6Qdpp-cJhkykEQ_ANzGCFk2twS2Ir8,828
104
+ pyorbbecsdk/pyorbbecsdk/examples/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
+ pyorbbecsdk/pyorbbecsdk/examples/README.md,sha256=RcYtrgMSkRJzV9F1x2pFMOWeufUlXhBx1AU8SA-khvk,6688
106
+ pyorbbecsdk/pyorbbecsdk/examples/callback.py,sha256=OIwPl0n7-RqoID-rYQ3lLn0JuW8A_UoKDpivEkmUrHQ,10089
107
+ pyorbbecsdk/pyorbbecsdk/examples/color.py,sha256=hoYePHn2nr-87hI9b2HsrGxM1puoQY-L7HcaXdJbxMs,2280
108
+ pyorbbecsdk/pyorbbecsdk/examples/coordinate_transform.py,sha256=8PtR5X-CW3HL63f90H1HTW1GIk78x8zHCsxtIA7FGCA,7597
109
+ pyorbbecsdk/pyorbbecsdk/examples/depth.py,sha256=UMVLhW2KwmRzyx6iQOE0UQ6w4BxRmKr9zJTe55YwzNk,3843
110
+ pyorbbecsdk/pyorbbecsdk/examples/depth_work_mode.py,sha256=s_CynLMNOJ5ho_W3LlQSb6xsOxq9ic9cwNYuQIpiQOQ,2679
111
+ pyorbbecsdk/pyorbbecsdk/examples/device_firmware_update.py,sha256=C7PQYJaq9-ZHQ1aHPpWzNAtNLEXYp3RCMn2dhf_F0Ts,5684
112
+ pyorbbecsdk/pyorbbecsdk/examples/device_optional_depth_presets_update.py,sha256=Od0it5ZkyASuRLKwWIBg0kb1z-iGK4jyUI3iariczXc,5313
113
+ pyorbbecsdk/pyorbbecsdk/examples/enumerate.py,sha256=iBOYtxoj_ONDi96786MBnBNdyIupoeDkzr6E9Vxp7zQ,4542
114
+ pyorbbecsdk/pyorbbecsdk/examples/hdr.py,sha256=fIydBjSMoZDYnPA5nZRLHjoTP0qTARbihvfaa-kmzZw,8243
115
+ pyorbbecsdk/pyorbbecsdk/examples/hot_plug.py,sha256=j93htlFu1WHG6GQroXReuWfBQeHlSzthhvCI-UFBcTs,5517
116
+ pyorbbecsdk/pyorbbecsdk/examples/hw_d2c_align.py,sha256=7YpSp3a39IXwwIcjpRQ-iC-9jC3uVO4-xAdcuI0WFcc,4909
117
+ pyorbbecsdk/pyorbbecsdk/examples/imu.py,sha256=AONK3NEo7StlAf0z1tAOAebwP1zm1xveXP8Qk1TUT_s,2470
118
+ pyorbbecsdk/pyorbbecsdk/examples/infrared.py,sha256=N8jP0DjwIYo7XeEtlcJMo0yxo08qwO9NnfiibGDjKSE,5235
119
+ pyorbbecsdk/pyorbbecsdk/examples/logger.py,sha256=6_QT14NOIA3toIeWiIUkZzeiQqU0X16b5fMbzAOjJ3M,2053
120
+ pyorbbecsdk/pyorbbecsdk/examples/metadata.py,sha256=bNXwOLiJL22eZODoDditsJ4gAhSBqAnBoAveYP7Kc-o,2432
121
+ pyorbbecsdk/pyorbbecsdk/examples/multi_device.py,sha256=sOY-ibIYFbgTjU6jWz2GxFA_V4V2PozMRbnR4iBVx6E,6574
122
+ pyorbbecsdk/pyorbbecsdk/examples/multi_streams.py,sha256=SU_17Hpz8B-H8ZZsId6ikrWiEDwSPZER8dPIxQf8iEI,7435
123
+ pyorbbecsdk/pyorbbecsdk/examples/net_device.py,sha256=wnaxNrhMfDmMIoH0jo0cIz4_QQXUZAwKQgA7tUHuZPo,6319
124
+ pyorbbecsdk/pyorbbecsdk/examples/playback.py,sha256=pDHHVcnIQQ1NMo-S3xZUMPaAK-K_lnnDHmkelnzLO5k,9714
125
+ pyorbbecsdk/pyorbbecsdk/examples/point_cloud.py,sha256=taxO558Mi2EnVe-wUnjHDsmyNK08x2XKDtldbQednVI,3350
126
+ pyorbbecsdk/pyorbbecsdk/examples/post_processing.py,sha256=uZiSb8PRPz1xC4Bykq0-Y9Lo6JYO85u7JLmjU5GKJe4,4622
127
+ pyorbbecsdk/pyorbbecsdk/examples/preset.py,sha256=tMPw3fvB1DbaS8EZW3Qcllpp2WHR613W3eHusP9Jmp4,2440
128
+ pyorbbecsdk/pyorbbecsdk/examples/quick_start.py,sha256=CCCzX7jNqdPA9ToOwmNFo0HiDXjAprRXieIn_s9UxBA,3329
129
+ pyorbbecsdk/pyorbbecsdk/examples/recorder.py,sha256=TyTguLIgIzZsVu86DezziLlcKc4zqBSoNuVB9GLiB9A,8122
130
+ pyorbbecsdk/pyorbbecsdk/examples/requirements.txt,sha256=rhA823-1338jfVO5OCYytSX7Xg1Eux8k0C-CADEm5ug,252
131
+ pyorbbecsdk/pyorbbecsdk/examples/save_image_to_disk.py,sha256=IhLVQ1S-l6IX6EVEK5xHLFZD-7fpDxQLC1ufviDtASs,3984
132
+ pyorbbecsdk/pyorbbecsdk/examples/sync_align.py,sha256=35x3Rm0K5SbPQL7V16XBUOvQI0o3hQBXhLTRbtg3_nk,4040
133
+ pyorbbecsdk/pyorbbecsdk/examples/two_devices_sync.py,sha256=O0tu1YNIHX3WVtnswdx7VkkRnUbdZ4kARf6WyilBU20,9450
134
+ pyorbbecsdk/pyorbbecsdk/examples/utils.py,sha256=UHDUGqXhoRyhkkAahcbA1r0KX4le7q68GV4LjkcfXx0,5092
135
+ pyorbbec-1.0.1.25.dist-info/METADATA,sha256=X-hAbS9CfN0Ppsa-KY4jflXFdDKjsng4AkgdIaubjBE,299
136
+ pyorbbec-1.0.1.25.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
137
+ pyorbbec-1.0.1.25.dist-info/top_level.txt,sha256=1cdRLvJ7xDr8pOk7ZAdJp2uQ3dpDmIHawIgt4NWOsSw,9
138
+ pyorbbec-1.0.1.25.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp310-cp310-win_amd64
5
+