tof — Драйвер датчика часу прольоту#

Модуль tof керує датчиками вимірювання відстані методом часу прольоту (ToF), підключеними до OpenMV Cam через I2C. Кожен кадр повертає значення глибини в міліметрах для кожного пікселя у сітці зон 8x8 (VL53L5CX / VL53L8CX), яке може бути відображено як окреме зображення глибини за допомогою snapshot() або накладено на кадр видимого світла від датчика CSI за допомогою draw_depth(), як правило, через кольорову палітру, наприклад image.PALETTE_DEPTH.

Приклад використання:

import csi
import tof

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

tof.init()

while True:
    img = csi0.snapshot()
    depth, depth_min, depth_max = tof.read_depth()
    tof.draw_depth(img, depth)
    print("====================")
    print("Min depth in mm seen: %0.2f" % depth_min)
    print("Max depth in mm seen: %0.2f" % depth_max)

Якщо потрібно обертати масив/зображення глибини кратно 90 градусам, передайте такі комбінації hmirror/vflip/transpose до read_depth, draw_depth або snapshot:

  • vflip=False, hmirror=False, transpose=False -> поворот на 0 градусів

  • vflip=True,  hmirror=False, transpose=True -> поворот на 90 градусів

  • vflip=True,  hmirror=True,  transpose=False -> поворот на 180 градусів

  • vflip=False, hmirror=True,  transpose=True -> поворот на 270 градусів

Функції#

tof.init(type: int = -1) None#

Ініціалізує вбудований датчик глибини.

type вказує тип TOF-датчика:

За замовчуванням type дорівнює -1, що змушує tof.init() автоматично виявляти та ініціалізувати підключений TOF-датчик за його I2C-адресою.

tof.reset() None#

Скидає стан датчика глибини.

tof.deinit() None#

Деініціалізує датчик глибини та звільняє ресурси.

tof.width() int#

Повертає ширину (горизонтальну роздільну здатність) датчика глибини, що використовується. Генерує RuntimeError, якщо датчик не ініціалізовано.

tof.height() int#

Повертає висоту (вертикальну роздільну здатність) датчика глибини, що використовується. Генерує RuntimeError, якщо датчик не ініціалізовано.

tof.type() int#

Повертає тип датчика глибини, що використовується:

Генерує RuntimeError, якщо датчик не ініціалізовано.

tof.refresh() int#

Повертає частоту оновлення (у Гц) датчика глибини, що використовується:

Генерує RuntimeError, якщо датчик не ініціалізовано.

tof.read_depth(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = 100) Tuple[List[float], float, float]#

Повертає кортеж, що містить список глибин (width * height значень типу float у мм), мінімальну виміряну глибину та максимальну виміряну глибину.

hmirror якщо True, відображає масив глибин горизонтально.

vflip якщо True, перевертає масив глибин вертикально.

transpose якщо True, транспонує масив глибин.

timeout — кількість мілісекунд очікування нового кадру перед генерацією RuntimeError. Якщо 0, чекає нескінченно.

tof.draw_depth(image: image.Image, depth: List[float], x: int = 0, y: int = 0, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int = image.PALETTE_DEPTH, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None) None#

Малює масив depth (повернутий read_depth) на зображенні image, лівий верхній кут якого починається в точці x, y.

x_scale визначає масштабування відображуваного зображення по осі x (число з плаваючою точкою). Від’ємне значення горизонтально відображає зображення. Якщо не вказано, відповідає y_scale для збереження пропорцій.

y_scale визначає масштабування відображуваного зображення по осі y (число з плаваючою точкою). Від’ємне значення вертикально перевертає зображення. Якщо не вказано, відповідає x_scale для збереження пропорцій.

roi — кортеж прямокутника області інтересу (x, y, w, h) вихідного масиву глибин для відображення.

rgb_channel — канал RGB (0=R, 1=G, 2=B) для витягнення з джерела. -1 (за замовчуванням) використовує всі канали.

alpha визначає, яка частина джерела змішується з цільовим зображенням. 255 — непрозоре, 0 — без змін. Діапазон: 0-255.

color_palette — перелік кольорової палітри (наприклад, image.PALETTE_DEPTH, image.PALETTE_RAINBOW) або 256-піксельне зображення RGB565, що використовується як таблиця відповідності кольорів для значення глибини у відтінках сірого.

alpha_palette якщо не None, — 256-піксельне зображення GRAYSCALE, що використовується як таблиця відповідності альфа-каналу для модуляції alpha на кожен піксель.

hint — логічне АБО з:

  • image.AREA: Використовувати масштабування по площі при зменшенні.

  • image.BILINEAR: Використовувати білінійне масштабування.

  • image.BICUBIC: Використовувати бікубічне масштабування.

  • image.CENTER: Центрувати зображення на цільовому.

  • image.HMIRROR: Горизонтально відобразити.

  • image.VFLIP: Вертикально перевернути.

  • image.TRANSPOSE: Транспонувати (поміняти x/y).

  • image.EXTRACT_RGB_CHANNEL_FIRST: Застосувати витягнення rgb_channel перед масштабуванням.

  • image.APPLY_COLOR_PALETTE_FIRST: Застосувати кольорову палітру перед масштабуванням.

  • image.SCALE_ASPECT_KEEP: Вписати у ціль зі збереженням пропорцій.

  • image.SCALE_ASPECT_EXPAND: Заповнити ціль зі збереженням пропорцій (з обрізанням).

  • image.SCALE_ASPECT_IGNORE: Заповнити ціль без збереження пропорцій (з розтягуванням).

  • image.ROTATE_90: Повернути на 90 градусів.

  • image.ROTATE_180: Повернути на 180 градусів.

  • image.ROTATE_270: Повернути на 270 градусів.

scale — кортеж з двох значень (min, max), що визначає мінімальну та максимальну глибину (у мм) для масштабування зображення глибини. За замовчуванням використовуються фактичні мінімум та максимум масиву глибин.

Примітка

read_depth запам’ятовує, чи було його викликано з transpose=True, і draw_depth використовує це внутрішньо для визначення розміру вихідного масиву.

tof.snapshot(hmirror: bool = False, vflip: bool = False, transpose: bool = False, x_scale: float | None = None, y_scale: float | None = None, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: int = image.PALETTE_DEPTH, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None, pixformat: int = image.RGB565, copy_to_fb: bool = False, timeout: int = 100) image.Image#

Зчитує кадр із датчика глибини та повертає новий об’єкт image.Image у форматі image.GRAYSCALE або image.RGB565.

hmirror якщо True, горизонтально відображає нове зображення.

vflip якщо True, вертикально перевертає нове зображення.

transpose якщо True, транспонує нове зображення.

x_scale визначає масштабування зображення по осі x (число з плаваючою точкою). Від’ємні значення перевертають горизонтально. Якщо не вказано, відповідає y_scale.

y_scale визначає масштабування зображення по осі y (число з плаваючою точкою). Від’ємні значення перевертають вертикально. Якщо не вказано, відповідає x_scale.

roi — кортеж прямокутника області інтересу (x, y, w, h) джерела для витягнення.

rgb_channel — канал RGB (0=R, 1=G, 2=B) для витягнення. -1 (за замовчуванням) використовує всі канали.

alpha визначає змішування джерела з ціллю. 255 — непрозоре, 0 — ціль залишається незміненою. Діапазон: 0-255.

color_palette — перелік кольорової палітри (наприклад, image.PALETTE_DEPTH) або 256-піксельне зображення RGB565, що використовується як таблиця відповідності кольорів.

alpha_palette якщо не None, — 256-піксельне зображення GRAYSCALE, що використовується як таблиця відповідності альфа-каналу.

hint — логічне АБО з:

  • image.AREA: Використовувати масштабування по площі при зменшенні.

  • image.BILINEAR: Використовувати білінійне масштабування.

  • image.BICUBIC: Використовувати бікубічне масштабування.

  • image.CENTER: Центрувати зображення на цільовому.

  • image.HMIRROR: Горизонтально відобразити.

  • image.VFLIP: Вертикально перевернути.

  • image.TRANSPOSE: Транспонувати (поміняти x/y).

  • image.EXTRACT_RGB_CHANNEL_FIRST: Застосувати витягнення rgb_channel перед масштабуванням.

  • image.APPLY_COLOR_PALETTE_FIRST: Застосувати кольорову палітру перед масштабуванням.

  • image.SCALE_ASPECT_KEEP: Вписати у ціль зі збереженням пропорцій.

  • image.SCALE_ASPECT_EXPAND: Заповнити ціль зі збереженням пропорцій (з обрізанням).

  • image.SCALE_ASPECT_IGNORE: Заповнити ціль без збереження пропорцій (з розтягуванням).

  • image.ROTATE_90: Повернути на 90 градусів.

  • image.ROTATE_180: Повернути на 180 градусів.

  • image.ROTATE_270: Повернути на 270 градусів.

scale — кортеж з двох значень (min, max), що визначає мінімальну та максимальну глибину (у мм) для масштабування зображення. За замовчуванням використовуються фактичні мінімум/максимум кадру.

pixformat визначає кінцевий формат пікселів зображення. Має бути image.GRAYSCALE або image.RGB565.

copy_to_fb якщо True, записує нове зображення у кадровий буфер замість виділення пам’яті на купі MicroPython.

timeout — кількість мілісекунд очікування нового кадру перед генерацією RuntimeError. Якщо 0, чекає нескінченно.

Константи#

tof.TOF_VL53LX: int#

TOF-датчик VL53L5CX або VL53L8CX (8x8 пікселів).