You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
4.2 KiB
88 lines
4.2 KiB
## License: Apache 2.0. See LICENSE file in root directory.
|
|
## Copyright(c) 2017 Intel Corporation. All Rights Reserved.
|
|
|
|
#####################################################
|
|
## rs400 advanced mode tutorial ##
|
|
#####################################################
|
|
|
|
# First import the library
|
|
import pyrealsense2 as rs
|
|
import time
|
|
import json
|
|
|
|
DS5_product_ids = ["0AD1", "0AD2", "0AD3", "0AD4", "0AD5", "0AF6", "0AFE", "0AFF", "0B00", "0B01", "0B03", "0B07", "0B3A", "0B5C", "0B5B"]
|
|
|
|
def find_device_that_supports_advanced_mode() :
|
|
ctx = rs.context()
|
|
ds5_dev = rs.device()
|
|
devices = ctx.query_devices();
|
|
for dev in devices:
|
|
if dev.supports(rs.camera_info.product_id) and str(dev.get_info(rs.camera_info.product_id)) in DS5_product_ids:
|
|
if dev.supports(rs.camera_info.name):
|
|
print("Found device that supports advanced mode:", dev.get_info(rs.camera_info.name))
|
|
return dev
|
|
raise Exception("No D400 product line device that supports advanced mode was found")
|
|
|
|
try:
|
|
dev = find_device_that_supports_advanced_mode()
|
|
advnc_mode = rs.rs400_advanced_mode(dev)
|
|
print("Advanced mode is", "enabled" if advnc_mode.is_enabled() else "disabled")
|
|
|
|
# Loop until we successfully enable advanced mode
|
|
while not advnc_mode.is_enabled():
|
|
print("Trying to enable advanced mode...")
|
|
advnc_mode.toggle_advanced_mode(True)
|
|
# At this point the device will disconnect and re-connect.
|
|
print("Sleeping for 5 seconds...")
|
|
time.sleep(5)
|
|
# The 'dev' object will become invalid and we need to initialize it again
|
|
dev = find_device_that_supports_advanced_mode()
|
|
advnc_mode = rs.rs400_advanced_mode(dev)
|
|
print("Advanced mode is", "enabled" if advnc_mode.is_enabled() else "disabled")
|
|
|
|
# Get each control's current value
|
|
print("Depth Control: \n", advnc_mode.get_depth_control())
|
|
print("RSM: \n", advnc_mode.get_rsm())
|
|
print("RAU Support Vector Control: \n", advnc_mode.get_rau_support_vector_control())
|
|
print("Color Control: \n", advnc_mode.get_color_control())
|
|
print("RAU Thresholds Control: \n", advnc_mode.get_rau_thresholds_control())
|
|
print("SLO Color Thresholds Control: \n", advnc_mode.get_slo_color_thresholds_control())
|
|
print("SLO Penalty Control: \n", advnc_mode.get_slo_penalty_control())
|
|
print("HDAD: \n", advnc_mode.get_hdad())
|
|
print("Color Correction: \n", advnc_mode.get_color_correction())
|
|
print("Depth Table: \n", advnc_mode.get_depth_table())
|
|
print("Auto Exposure Control: \n", advnc_mode.get_ae_control())
|
|
print("Census: \n", advnc_mode.get_census())
|
|
|
|
#To get the minimum and maximum value of each control use the mode value:
|
|
query_min_values_mode = 1
|
|
query_max_values_mode = 2
|
|
current_std_depth_control_group = advnc_mode.get_depth_control()
|
|
min_std_depth_control_group = advnc_mode.get_depth_control(query_min_values_mode)
|
|
max_std_depth_control_group = advnc_mode.get_depth_control(query_max_values_mode)
|
|
print("Depth Control Min Values: \n ", min_std_depth_control_group)
|
|
print("Depth Control Max Values: \n ", max_std_depth_control_group)
|
|
|
|
# Set some control with a new (median) value
|
|
current_std_depth_control_group.scoreThreshA = int((max_std_depth_control_group.scoreThreshA - min_std_depth_control_group.scoreThreshA) / 2)
|
|
advnc_mode.set_depth_control(current_std_depth_control_group)
|
|
print("After Setting new value, Depth Control: \n", advnc_mode.get_depth_control())
|
|
|
|
# Serialize all controls to a Json string
|
|
serialized_string = advnc_mode.serialize_json()
|
|
print("Controls as JSON: \n", serialized_string)
|
|
as_json_object = json.loads(serialized_string)
|
|
|
|
# We can also load controls from a json string
|
|
# For Python 2, the values in 'as_json_object' dict need to be converted from unicode object to utf-8
|
|
if type(next(iter(as_json_object))) != str:
|
|
as_json_object = {k.encode('utf-8'): v.encode("utf-8") for k, v in as_json_object.items()}
|
|
# The C++ JSON parser requires double-quotes for the json object so we need
|
|
# to replace the single quote of the pythonic json to double-quotes
|
|
json_string = str(as_json_object).replace("'", '\"')
|
|
advnc_mode.load_json(json_string)
|
|
|
|
except Exception as e:
|
|
print(e)
|
|
pass
|