test_image_stream
1. Basic Functions
Test the display of the image stream
Basic idea: A camera in the virtual environment continuously captures objects, while another thread is responsible for displaying the obtained images on the screen.
2. Implementation Process
2.1 Initialize the Environment
env = RFUniverseBaseEnv(assets=["Camera", "GameObject_Box"])
camera = env.InstanceObject(name="Camera", id=123456, attr_type=attr.CameraAttr)
camera.SetTransform(position=[0, 0.25, 0], rotation=[30, 0, 0])
box = env.InstanceObject(name="GameObject_Box", attr_type=attr.GameObjectAttr)
box.SetTransform(position=[0, 0.05, 0.5], scale=[0.1, 0.1, 0.1])
box.SetColor([1, 0, 0, 1])
Create a camera and an object in the scene and place them in appropriate positions.
2.2 Capture and Display the Image Stream
img = None
class ImageThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while True:
global img
if img is not None:
cv2.imshow("image", img)
cv2.waitKey(10)
thread = ImageThread()
thread.start()
while True:
camera.GetRGB(width=512, height=512)
box.Rotate([0, 1, 0], False)
env.step()
image = np.frombuffer(camera.data["rgb"], dtype=np.uint8)
img = cv2.imdecode(image, cv2.IMREAD_COLOR)
The
ImageThreadclass creates a thread that continuously displays the global variable namedimg(i.e., the images captured in the virtual environment) on the screen.GetRGBis used to control the camera to capture RGB images.Rotaterotates the object in the virtual environment to create a dynamic effect in the image stream.