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.

83 lines
3.5 KiB

# License: Apache 2.0. See LICENSE file in root directory.
# Copyright(c) 2023 Intel Corporation. All Rights Reserved.
#temporary fix to prevent the test from running on Win_SH_Py_DDS_CI
#test:donotrun:dds
#disabled until LRS-986 ticket is resolved due to stability issues
#test:donotrun
import pyrealsense2 as rs
from rspy import test, repo
import os.path
################################################################################################
with test.closure("Test Projection from recording"):
filename = os.path.join(repo.build, 'unit-tests', 'recordings', 'single_depth_color_640x480.bag')
ctx = rs.context()
dev = ctx.load_device(filename)
dev.set_real_time(False)
syncer = rs.syncer()
sensors = dev.query_sensors()
for s in sensors:
s.open(s.get_stream_profiles()[0])
s.start(syncer)
depth = rs.frame()
depth_profile = rs.stream_profile()
color_profile = rs.stream_profile()
while not depth_profile or not color_profile:
frames = syncer.wait_for_frames()
test.check(frames.size() > 0)
if frames.size() == 1:
if frames.get_profile().stream_type() == rs.stream.depth:
depth = frames.get_depth_frame()
depth_profile = depth.get_profile()
else:
color_profile = frames.get_color_frame().get_profile()
else:
depth = frames.get_depth_frame()
depth_profile = depth.get_profile()
color_profile = frames.get_color_frame().get_profile()
depth_intrin = depth_profile.as_video_stream_profile().get_intrinsics()
color_intrin = color_profile.as_video_stream_profile().get_intrinsics()
depth_extrin_to_color = depth_profile.as_video_stream_profile().get_extrinsics_to(color_profile)
color_extrin_to_depth = color_profile.as_video_stream_profile().get_extrinsics_to(depth_profile)
depth_scale = 0
for s in sensors:
depth_sensor = s.is_depth_sensor()
if depth_sensor:
depth_scale = s.as_depth_sensor().get_depth_scale()
test.check_equal(s.get_info(rs.camera_info.name) == "Stereo Module", s.is_depth_sensor())
test.check_equal(s.get_info(rs.camera_info.name) == "RGB Camera", s.is_color_sensor())
count = 0
for i in range(depth_intrin.width):
for j in range(depth_intrin.height):
depth_pixel = [i,j]
udist = depth.as_depth_frame().get_distance(int(depth_pixel[0]+0.5),int(depth_pixel[1]+0.5))
if udist == 0:
continue
point = rs.rs2_deproject_pixel_to_point(depth_intrin, depth_pixel, udist)
other_point = rs.rs2_transform_point_to_point(depth_extrin_to_color, point)
from_pixel = rs.rs2_project_point_to_pixel(color_intrin, other_point)
#Search along a projected beam from 0.1m to 10 meter
to_pixel = rs.rs2_project_color_pixel_to_depth_pixel(depth.get_data(), depth_scale, 0.1,10,depth_intrin, color_intrin,color_extrin_to_depth, depth_extrin_to_color, from_pixel)
dist = ((depth_pixel[1] - to_pixel[1]) ** 2 + (depth_pixel[0] - to_pixel[0]) ** 2) ** 0.5
if dist > 1:
count += 1
MAX_ERROR_PERCENTAGE = 0.1
test.check(count * 100 / (depth_intrin.width * depth_intrin.height) < MAX_ERROR_PERCENTAGE)
for s in sensors:
s.stop()
s.close()
################################################################################################
test.print_results_and_exit()