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
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() |