RealSense D435 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдХреЛ рдорд╛рдкрдиреЗ

рдЖрдЬ рдЫрд╡рд┐ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдорд╢реАрди рджреГрд╖реНрдЯрд┐ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдЧреНрд░рдгреА рд╣реИред рдЗрд╕рдХрд╛ рд╕рд╛рд░ рди рдХреЗрд╡рд▓ рдЪрд┐рддреНрд░ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдирд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рд╕рдЯреАрдХ рд╕реНрдерд╛рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рднреА рд╣реИред

рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рддрдиреА рджреВрд░ рд╕реНрдерд┐рдд рд╣реИред рджреВрд░реА рдорд╛рдк рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрдВрдЯреЗрд▓ RealSense D435 рдЧрд╣рд░рд╛рдИ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдкрд░ рдЧрд╣рд░рд╛рдИ рдХреЛ рдорд╛рдкрддрд╛ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо OpenCV рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ RealSense рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рд╕реЗ рджреВрд░реА рдХреЛ рдорд╛рдкрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ ред

рдЫрд╡рд┐

рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ


RealSense рдХреИрдорд░рд╛

рджреВрд░реА рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ RealSense D435 рдЧрд╣рд░рд╛рдИ рдХреИрдорд░рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, RealSense SDK рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

Pyrealsense2 рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рд╕рднреА рдХреЛрдб, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рд╣рдо Python 3.7 рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗ , рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ pyrealsense2 рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

pip install pyrealsense2

OpenCV рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ OpenCV рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (3.4 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрдпреБрдХреНрдд рд╣реИ)ред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдореИрдиреБрдЕрд▓ рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ OpenCV рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред OpenCV рдХреЗ

рд╕рд╛рде , рдПрдХ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рд╕реБрдиреНрди ред

рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди


рдкрд╣рд▓рд╛ рдХрджрдо рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рддрдерд╛рдХрдерд┐рдд рдПрдХ-рдЪрд░рдг рдореЙрдбрд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЗрдЯрд┐рдирд╛ рдиреЗрдЯ, рдПрд╕рдПрд╕рдбреА, рдпреЛрд▓реЛ ), рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреА рдЧрддрд┐ рдореЗрдВ рдЬреАрддрддреЗ рд╣реИрдВ, рдПрдХрджрдо рд╕рд╣реА рд╣реИрдВ ред

рдкреНрд░рдпреЛрдЧ рдХреА рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ SSDLite Mobilenet v2 рд▓реЗрдВрдЧреЗ ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ TensorFlow рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рджреНрд╡рд┐рдЖрдзрд╛рд░реА .pb рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдЬрдореЗ рд╣реБрдП рдЧрдгрдирд╛ рдЧреНрд░рд╛рдл рд╢рд╛рдорд┐рд▓ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдиреНрдпрд╛рд╕ред рд▓реЗрдХрд┐рди OpenCV рдореЗрдВ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рднреА рдкрд╛рда рд╕реНрд╡рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдПрдХ рдЧреНрд░рд╛рдл рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ .pbtxt ред рдпрд╣ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред OpenCV

рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рджреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЙрдкреА рдХрд░реЗрдВ :

  1. github.com/opencv/opencv/blob/master/samples/dnn/tf_text_graph_ssd.py
  2. github.com/opencv/opencv/blob/master/samples/dnn/tf_text_graph_common.py

рдлрд┐рд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:

python tf_text_graph_ssd.py --input /path/to/model.pb --config /path/to/example.config --output /path/to/graph.pbtxt

рдЖрдЙрдЯрдкреБрдЯ рдПрдХ graph.pbtxt рдлрд╝рд╛рдЗрд▓ рд╣реИ ред

рд╣рдордиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореМрдЬреВрджрд╛ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░рдЦрд╛ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдореЙрдбрд▓ / рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ ред

рд╡рд┐рдХрд╛рд╕


рдЕрдм рд╕рдм рдХреБрдЫ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ draw_predictions () рд╡рд┐рдзрд┐ рдкрд░ рдПрдХ рд╕реНрдЯрдм рдмрдирд╛рддреЗ рд╣реИрдВ , рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

import pyrealsense2 as rs
import numpy as np
import cv2 as cv

def draw_predictions(pred_img, color_img, depth_image):
    pass

рдореБрдЦреНрдп рд╡рд╕реНрддреБрдПрдВ рдмрдирд╛рдПрдВ:

pipeline = rs.pipeline() # <-  pipeline      
config = rs.config() # <-      
colorizer = rs.colorizer() # <-      

spatial = rs.spatial_filter()
spatial.set_option(rs.option.holes_fill, 3)

рд╣рдо ssd рдореЙрдбрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ ред рдпрд╣рд╛рдБ, .pbtxt рдлрд╝рд╛рдЗрд▓ рдЬреЛ рд╣рдордиреЗ рдКрдкрд░ рдЙрддреНрдкрдиреНрди рдХреА рд╣реИ рд╡рд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ :

#  
model = cv.dnn.readNetFromTensorflow(
    "models/ssdlite_mobilenet_v2_coco_2018_05_09/frozen_inference_graph.pb", 
    "models/ssdlite_mobilenet_v2_coco_2018_05_09/graph.pbtxt"
)

рд╣рдо рдХреИрдорд░рд╛ рд╕реНрдЯреНрд░реАрдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

#  2 : RGB  depth
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
profile = pipeline.start(config)

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо BGR рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░рдВрдЧ рдзрд╛рд░рд╛ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддреЗ рд╣реИрдВ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣ рдкреНрд░рд╛рд░реВрдк рд╣реИ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ OpenCV рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред

рд╣рдо рдПрдХ рдЪрдХреНрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХрдмреНрдЬрд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдлреНрд░реЗрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВрдЧреЗ:

cv.namedWindow("RealSense object detection", cv.WINDOW_AUTOSIZE)
try:
    while True:
        #     ""  ""
        frames = pipeline.wait_for_frames()
        depth_frame = frames.get_depth_frame()
        color_frame = frames.get_color_frame()
        if not depth_frame or not color_frame:
            continue

рдлреНрд░реЗрдо рдХреЗ рдЖрдЧреЗ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЕрдлреАрдо рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ:

        #    numpy-
        depth_image = np.asanyarray(depth_frame.get_data())
        color_image = np.asanyarray(color_frame.get_data())

рд╣рдо рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП ssd рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ :

        #  
        model.setInput(cv.dnn.blobFromImage(color_image, size=(300, 300), swapRB=True, crop=False))
        pred = model.forward()
        draw_predictions(pred, color_image, depth_image)

рд╣рдо рдЦрд┐рдбрд╝рдХреА рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

	#     
        colorized_depth = cv.applyColorMap(cv.convertScaleAbs(depth_image, alpha=0.03), cv.COLORMAP_JET)
        #    
        images = np.hstack((color_image, colorized_depth))
        cv.imshow("RealSense object detection", images)

рд╣рдо рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

	#    'ESC'  'q'
        key = cv.waitKey(1) & 0xFF
        if (key == 27) or (key == ord('q')):
            cv.destroyWindow("RealSense object detection")
            break        

рд╕реНрдЯреНрд░реАрдо рдмрдВрдж рдХрд░реЗрдВ:

finally:
    pipeline.stop()

рдФрд░ рдЖрдЦрд┐рд░ рдХрд╛ред рд╣рдо draw_predictions () рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЛ рднрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмрдирд╛рдпрд╛ рдерд╛ред рдЗрд╕рдореЗрдВ, рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдореИрдВрдиреЗ рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛: рдкрд╛рдпрд╛ рд╡рд╕реНрддреБ рдХреЗ рдлреНрд░реЗрдо рдореЗрдВ рд╕рднреА рджреВрд░реА рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдФрд╕рдд рд▓реЗрдВ:

def draw_predictions(pred_img, color_img, depth_image):
    for detection in pred_img[0,0,:,:]:
        score = float(detection[2])
        #            50%
        if score > 0.5:
            left = detection[3] * color_img.shape[1]
            top = detection[4] * color_img.shape[0]
            right = detection[5] * color_img.shape[1]
            bottom = detection[6] * color_img.shape[0]
            cv.rectangle(color_img, (int(left), int(top)), (int(right), int(bottom)), (210, 230, 23), 2)
            
            #    
            depth = depth_image[int(left):int(right), int(top):int(bottom)].astype(float)
            depth_scale = profile.get_device().first_depth_sensor().get_depth_scale()
            depth = depth * depth_scale
            dist,_,_,_ = cv.mean(depth)
            dist = round(dist, 1)
            cv.putText(color_img, "dist: "+str(dist)+"m", (int(left), int(top)-5), cv.FONT_HERSHEY_PLAIN, 1, (0, 255, 0), 1)

рдЫрд╡рд┐

рдкреВрд░реНрдг рдХреЛрдб
import pyrealsense2 as rs
import numpy as np
import cv2 as cv

def draw_predictions(pred_img, color_img, depth_image): # <-        
    for detection in pred_img[0,0,:,:]:
        score = float(detection[2])
        #            50%
        if score > 0.5:
            left = detection[3] * color_img.shape[1]
            top = detection[4] * color_img.shape[0]
            right = detection[5] * color_img.shape[1]
            bottom = detection[6] * color_img.shape[0]
            cv.rectangle(color_img, (int(left), int(top)), (int(right), int(bottom)), (210, 230, 23), 2)
            
            #    
            depth = depth_image[int(left):int(right), int(top):int(bottom)].astype(float)
            depth_scale = profile.get_device().first_depth_sensor().get_depth_scale()
            depth = depth * depth_scale
            dist,_,_,_ = cv.mean(depth)
            dist = round(dist, 1)
            cv.putText(color_img, "dist: "+str(dist)+"m", (int(left), int(top)-5), cv.FONT_HERSHEY_PLAIN, 1, (0, 255, 0), 1)


pipeline = rs.pipeline() # <-  pipeline      
config = rs.config() # <-      
colorizer = rs.colorizer() # <-      

#  
model = cv.dnn.readNetFromTensorflow(
    "models/ssdlite_mobilenet_v2_coco_2018_05_09/frozen_inference_graph.pb", 
    "models/ssdlite_mobilenet_v2_coco_2018_05_09/graph.pbtxt"
)

#  2 : RGB  depth
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
profile = pipeline.start(config)

cv.namedWindow("RealSense object detection", cv.WINDOW_AUTOSIZE)
try:
    while True:
        #     ""  ""
        frames = pipeline.wait_for_frames()
        depth_frame = frames.get_depth_frame()
        color_frame = frames.get_color_frame()
        if not depth_frame or not color_frame:
            continue

        #    numpy-
        depth_image = np.asanyarray(depth_frame.get_data())
        color_image = np.asanyarray(color_frame.get_data())
        
        #  
        model.setInput(cv.dnn.blobFromImage(color_image, size=(300, 300), swapRB=True, crop=False))
        pred = model.forward()
        draw_predictions(pred, color_image, depth_image)

        #     
        colorized_depth = cv.applyColorMap(cv.convertScaleAbs(depth_image, alpha=0.03), cv.COLORMAP_JET)
        #    
        images = np.hstack((color_image, colorized_depth))
        cv.imshow("RealSense object detection", images)
        
        #    'ESC'  'q'
        key = cv.waitKey(1) & 0xFF
        if (key == 27) or (key == ord('q')):
            cv.destroyWindow("RealSense object detection")
            break

finally:
    pipeline.stop()


рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрдпрдирд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рджреВрд░реА рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рдЧрднрдЧ 50 рд╕реЗрдореА рдХреА рдЧрд▓рддреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдЪрд╛рд░ рдореАрдЯрд░ рдХреЗ рднреАрддрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдорд╛рдк рдХреА рд╕рдЯреАрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк pyrealsense2 рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдЫрд╡рд┐ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд╣рд░рд╛рдИ рдХреЗ рдирдХреНрд╢реЗ рдкрд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдпрд╛ рд╕реНрд╡рдпрдВ рдЧрд╣рд░рд╛рдИ рдЧрдгрдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рднрд╛рд░рд┐рдд рдФрд╕рдд рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдпрд╛ рдПрдХ рдХреЗрдВрджреНрд░реАрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рджреВрд░реА рдХреЛ рдорд╛рдкреЗрдВ)ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдп рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

Source: https://habr.com/ru/post/undefined/


All Articles