python workspace
This commit is contained in:
131
py_workspace/depth_sensing.py
Normal file
131
py_workspace/depth_sensing.py
Normal file
@ -0,0 +1,131 @@
|
||||
########################################################################
|
||||
#
|
||||
# Copyright (c) 2022, STEREOLABS.
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
########################################################################
|
||||
|
||||
"""
|
||||
This sample demonstrates how to capture a live 3D point cloud
|
||||
with the ZED SDK and display the result in an OpenGL window.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import ogl_viewer.viewer as gl
|
||||
import pyzed.sl as sl
|
||||
import argparse
|
||||
|
||||
def parse_args(init, opt):
|
||||
if len(opt.input_svo_file)>0 and opt.input_svo_file.endswith((".svo", ".svo2")):
|
||||
init.set_from_svo_file(opt.input_svo_file)
|
||||
print("[Sample] Using SVO File input: {0}".format(opt.input_svo_file))
|
||||
elif len(opt.ip_address)>0 :
|
||||
ip_str = opt.ip_address
|
||||
if ip_str.replace(':','').replace('.','').isdigit() and len(ip_str.split('.'))==4 and len(ip_str.split(':'))==2:
|
||||
init.set_from_stream(ip_str.split(':')[0],int(ip_str.split(':')[1]))
|
||||
print("[Sample] Using Stream input, IP : ",ip_str)
|
||||
elif ip_str.replace(':','').replace('.','').isdigit() and len(ip_str.split('.'))==4:
|
||||
init.set_from_stream(ip_str)
|
||||
print("[Sample] Using Stream input, IP : ",ip_str)
|
||||
else :
|
||||
print("Unvalid IP format. Using live stream")
|
||||
if ("HD2K" in opt.resolution):
|
||||
init.camera_resolution = sl.RESOLUTION.HD2K
|
||||
print("[Sample] Using Camera in resolution HD2K")
|
||||
elif ("HD1200" in opt.resolution):
|
||||
init.camera_resolution = sl.RESOLUTION.HD1200
|
||||
print("[Sample] Using Camera in resolution HD1200")
|
||||
elif ("HD1080" in opt.resolution):
|
||||
init.camera_resolution = sl.RESOLUTION.HD1080
|
||||
print("[Sample] Using Camera in resolution HD1080")
|
||||
elif ("HD720" in opt.resolution):
|
||||
init.camera_resolution = sl.RESOLUTION.HD720
|
||||
print("[Sample] Using Camera in resolution HD720")
|
||||
elif ("SVGA" in opt.resolution):
|
||||
init.camera_resolution = sl.RESOLUTION.SVGA
|
||||
print("[Sample] Using Camera in resolution SVGA")
|
||||
elif ("VGA" in opt.resolution):
|
||||
init.camera_resolution = sl.RESOLUTION.VGA
|
||||
print("[Sample] Using Camera in resolution VGA")
|
||||
elif len(opt.resolution)>0:
|
||||
print("[Sample] No valid resolution entered. Using default")
|
||||
else :
|
||||
print("[Sample] Using default resolution")
|
||||
|
||||
|
||||
|
||||
def main(opt):
|
||||
print("Running Depth Sensing sample ... Press 'Esc' to quit\nPress 's' to save the point cloud")
|
||||
|
||||
# Determine memory type based on CuPy availability and user preference
|
||||
use_gpu = gl.GPU_ACCELERATION_AVAILABLE and not opt.disable_gpu_data_transfer
|
||||
mem_type = sl.MEM.GPU if use_gpu else sl.MEM.CPU
|
||||
if use_gpu:
|
||||
print("🚀 Using GPU data transfer with CuPy")
|
||||
|
||||
init = sl.InitParameters(depth_mode=sl.DEPTH_MODE.NEURAL,
|
||||
coordinate_units=sl.UNIT.METER,
|
||||
coordinate_system=sl.COORDINATE_SYSTEM.RIGHT_HANDED_Y_UP)
|
||||
parse_args(init, opt)
|
||||
zed = sl.Camera()
|
||||
status = zed.open(init)
|
||||
if status > sl.ERROR_CODE.SUCCESS:
|
||||
print(repr(status))
|
||||
exit()
|
||||
|
||||
res = sl.Resolution()
|
||||
res.width = -1
|
||||
res.height = -1
|
||||
|
||||
# Get the first PC to retrieve the resolution
|
||||
point_cloud = sl.Mat()
|
||||
zed.retrieve_measure(point_cloud, sl.MEASURE.XYZRGBA, mem_type, res)
|
||||
res = point_cloud.get_resolution()
|
||||
|
||||
# Create OpenGL viewer
|
||||
viewer = gl.GLViewer()
|
||||
viewer.init(1, sys.argv, res)
|
||||
|
||||
while viewer.is_available():
|
||||
if zed.grab() <= sl.ERROR_CODE.SUCCESS:
|
||||
# Retrieve point cloud data using the optimal memory type (GPU if CuPy available)
|
||||
zed.retrieve_measure(point_cloud, sl.MEASURE.XYZRGBA, mem_type, res)
|
||||
viewer.updateData(point_cloud)
|
||||
if viewer.save_data:
|
||||
# For saving, we take CPU memory regardless of processing type
|
||||
point_cloud_to_save = sl.Mat()
|
||||
zed.retrieve_measure(point_cloud_to_save, sl.MEASURE.XYZRGBA, sl.MEM.CPU)
|
||||
err = point_cloud_to_save.write('Pointcloud.ply')
|
||||
if(err == sl.ERROR_CODE.SUCCESS):
|
||||
print("Current .ply file saving succeed")
|
||||
else:
|
||||
print("Current .ply file failed")
|
||||
viewer.save_data = False
|
||||
viewer.exit()
|
||||
zed.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--input_svo_file', type=str, help='Path to an .svo file, if you want to replay it',default = '')
|
||||
parser.add_argument('--ip_address', type=str, help='IP Adress, in format a.b.c.d:port or a.b.c.d, if you have a streaming setup', default = '')
|
||||
parser.add_argument('--resolution', type=str, help='Resolution, can be either HD2K, HD1200, HD1080, HD720, SVGA or VGA', default = '')
|
||||
parser.add_argument('--disable-gpu-data-transfer', action='store_true', help='Disable GPU data transfer acceleration with CuPy even if CuPy is available')
|
||||
opt = parser.parse_args()
|
||||
if len(opt.input_svo_file)>0 and len(opt.ip_address)>0:
|
||||
print("Specify only input_svo_file or ip_address, or none to use wired camera, not both. Exit program")
|
||||
exit()
|
||||
main(opt)
|
||||
Reference in New Issue
Block a user