5.7.1. Приклад 1: Отримання відеопотоку

Отримання відеопотоків, зібраних роботом, дуже корисно для реалізації певних практичних сценаріїв. Процес отримання відеопотоків через SDK виглядає наступним чином.

• Спочатку ініціалізуйте об’єкт робота, як описано в розділі Ініціалізація робота. Вам також потрібно імпортувати модуль camera , оскільки у прикладі буде використано визначення модуля camera :

from robomaster import camera

• Інтерфейс для отримання відеопотоків належить модулю camera. Тому спочатку отримайте об’єкт camera, як описано в розділі Отримання об’єктів модуля. У цьому прикладі для отримання об’єктів модуля використовується метод, описаний у розділі Отримання об’єктів модуля:

ep_camera= ep_robot.camera

• Метод start_video_stream модуля camera має два параметри. Параметр display вказує, чи відображати отримані відеопотоки. Параметр resolution визначає розмір відео. У цьому прикладі описано два способи отримання відеопотоку.

○ Спосіб 1: Отримайте відеопотік і відтворюйте його безпосередньо протягом 10 секунд :

ep_camera.start_video_stream(display=True, resolution=camera.STREAM_360P)
time.sleep(10)
ep_camera.stop_video_stream()

○ Спосіб 2: Отримайте відеопотік і відобразіть 200 кадрів зображення, використовуючи метод, наданий cv2 .:

ep_camera.start_video_stream(display=False)
for i in range(0, 200):
    img = ep_camera.read_cv2_image()
    cv2.imshow("Robot", img)
    cv2.waitKey(1)
cv2.destroyAllWindows()
ep_camera.stop_video_stream()

Спосіб 1 безпосередньо використовує метод start_video_tream () об’єкта camera для отримання та відтворення відеопотоку, зібраного роботом через SDK. Спосіб 2 отримує відеопотік за допомогою методу start_video_stream об’єкта camera , а потім відтворює отриманий відеопотік за допомогою cv2.inshow ().

• Звільніть відповідні ресурси, як описано в розділі Звільнення ресурсів роботів.

Повний процес отримання, а потім безпосередньо відображення відеоскрипу див. у прикладах example/04_camera/01_video_with_display.py.

import time
from robomaster import robot
from robomaster import camera


if __name__ == '__main__':
    ep_robot = robot.Robot()
    ep_robot.initialize(conn_type="sta")

    ep_camera = ep_robot.camera

    # 显示十秒图传
    ep_camera.start_video_stream(display=True, resolution=camera.STREAM_360P)
    time.sleep(10)
    ep_camera.stop_video_stream()

    ep_robot.close()

Для повного процесу отримання відеопотоку, а потім відображення зображень за допомогою методу, запропонованого cv2, зверніться до прикладу програми examples/04_camera/03_video_without_display.py.

import cv2
from robomaster import robot


if __name__ == '__main__':
    ep_robot = robot.Robot()
    ep_robot.initialize(conn_type="sta")

    ep_camera = ep_robot.camera

    # 显示200帧图传
    ep_camera.start_video_stream(display=False)
    for i in range(0, 200):
        img = ep_camera.read_cv2_image()
        cv2.imshow("Robot", img)
        cv2.waitKey(1)
    cv2.destroyAllWindows()
    ep_camera.stop_video_stream()

    ep_robot.close()