fir — драйвер теплового датчика (fir == far infrared, дальний инфракрасный)#

Модуль fir управляет дальними инфракрасными (FIR) термопарными матрицами, подключёнными к OpenMV Cam по I2C – поддерживаются датчики 8x8, 16x4, 16x12 и 32x24 (см. константы внизу этой страницы). Каждый кадр возвращает температуру каждого пикселя в градусах Цельсия, которая может быть отрисована как самостоятельное тепловое изображение с помощью snapshot() либо наложена на кадр видимого света с CSI-датчика с помощью draw_ir(), обычно через цветовую палитру, такую как image.PALETTE_RAINBOW или image.PALETTE_IRONBOW.

Пример использования:

import csi
import fir

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

fir.init()

while True:
    img = csi0.snapshot()
    ta, ir, to_min, to_max = fir.read_ir()
    fir.draw_ir(img, ir)
    print("====================")
    print("Ambient temperature: %0.2f" % ta)
    print("Min temperature seen: %0.2f" % to_min)
    print("Max temperature seen: %0.2f" % to_max)

Функции#

fir.init(type: int = -1, refresh: int | None = None, resolution: int | None = None) None#

Инициализирует подключённый тепловой датчик.

type указывает тип теплового датчика:

По умолчанию type равен -1, что заставляет fir.init() автоматически сканировать и инициализировать подключённый тепловой датчик на основе его I2C-адреса. Обратите внимание, что fir.FIR_MLX90640 и fir.FIR_MLX90641 используют один и тот же I2C-адрес, поэтому для инициализации именно его необходимо передать fir.FIR_MLX90641 в type.

refresh – это частота обновления теплового датчика в Гц:

  • fir.FIR_MLX90621: По умолчанию 64 Гц. Может быть 1, 2, 4, 8, 16, 32, 64, 128, 256 или 512 Гц.

  • fir.FIR_MLX90640: По умолчанию 32 Гц. Может быть 1, 2, 4, 8, 16, 32 или 64 Гц.

  • fir.FIR_MLX90641: По умолчанию 32 Гц. Может быть 1, 2, 4, 8, 16, 32 или 64 Гц.

  • fir.FIR_AMG8833: Фиксированная 10 Гц.

Более высокая частота обновления снижает точность, и наоборот.

resolution – это разрешение измерений теплового датчика в битах:

Более высокое разрешение снижает максимальный диапазон температур, и наоборот.

fir.deinit() None#

Деинициализирует тепловой датчик и освобождает ресурсы.

fir.width() int#

Возвращает горизонтальное разрешение (в пикселях) используемого теплового датчика.

fir.height() int#

Возвращает вертикальное разрешение (в пикселях) используемого теплового датчика.

fir.type() int#

Возвращает тип используемого теплового датчика. Одно из fir.FIR_MLX90621, fir.FIR_MLX90640, fir.FIR_MLX90641 или fir.FIR_AMG8833.

fir.refresh() int#

Возвращает текущую частоту обновления (Гц), заданную при вызове fir.init().

fir.resolution() int#

Возвращает текущее разрешение (биты), заданное при вызове fir.init().

fir.read_ta() float#

Возвращает температуру окружающей среды (т.е. температуру датчика) в градусах Цельсия в виде числа с плавающей точкой.

fir.read_ir(hmirror: bool = False, vflip: bool = False, transpose: bool = False, timeout: int = -1) Tuple[float, List[float], float, float]#

Возвращает 4-кортеж (ta, ir, to_min, to_max), содержащий температуру окружающей среды, плоский список температур с плавающей точкой длиной width * height, минимальную и максимальную наблюдаемые температуры. Все значения в градусах Цельсия.

hmirror если True, горизонтально зеркалит массив ir.

vflip если True, вертикально переворачивает массив ir.

transpose если True, транспонирует массив ir (меняет местами ширину и высоту).

timeout если не -1, число миллисекунд ожидания нового кадра.

fir.draw_ir(image: image.Image, ir: 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 | None = image.PALETTE_RAINBOW, alpha_palette: int | None = None, hint: int = 0, scale: Tuple[float, float] | None = None) None#

Рисует массив ir на image с верхним левым углом в точке (x, y).

ir – это плоский список температур длиной width * height, возвращаемый fir.read_ir().

x_scale управляет тем, насколько отрисованное изображение масштабируется по оси x. Отрицательное значение переворачивает горизонтально. Если не указано, соответствует y_scale для сохранения соотношения сторон.

y_scale управляет тем, насколько отрисованное изображение масштабируется по оси y. Отрицательное значение переворачивает вертикально. Если не указано, соответствует x_scale для сохранения соотношения сторон.

roi – это прямоугольник области интереса (x, y, w, h) исходных IR-данных для отрисовки.

rgb_channel – это RGB-канал (0=R, 1=G, 2=B) для отрисовки на целевом изображении, когда оно RGB565. -1 (по умолчанию) отрисовывает все каналы.

alpha управляет тем, какая часть исходного изображения смешивается с целевым (0-255). 255 – полностью непрозрачно; 0 не приводит к изменениям.

color_palette – это перечисление цветовой палитры (например, image.PALETTE_RAINBOW, image.PALETTE_IRONBOW) или изображение RGB565 размером 256 пикселей, используемое как таблица поиска по значению исходного пикселя в оттенках серого.

alpha_palette – это изображение GRAYSCALE размером 256 пикселей, используемое как таблица поиска альфа-канала, которая модулирует 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 – это 2-кортеж (min, max), управляющий минимальной/максимальной температурой (в градусах Цельсия), используемой для масштабирования массива ir. По умолчанию равен фактическим минимуму и максимуму ir.

fir.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 | None = image.PALETTE_RAINBOW, 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 = -1) image.Image#

Захватывает кадр с теплового датчика и возвращает его как image.Image. Работает аналогично sensor.snapshot(). Если copy_to_fb равно False, новое изображение выделяется в куче MicroPython (которая ограничена); установите copy_to_fb в True, чтобы вместо этого записать результат в буфер кадра.

hmirror если True, горизонтально зеркалит новое изображение.

vflip если True, вертикально переворачивает новое изображение.

transpose если True, транспонирует новое изображение.

x_scale управляет тем, насколько новое изображение масштабируется по оси x. Отрицательное значение переворачивает горизонтально. Если не указано, соответствует y_scale для сохранения соотношения сторон.

y_scale управляет тем, насколько новое изображение масштабируется по оси y. Отрицательное значение переворачивает вертикально. Если не указано, соответствует x_scale для сохранения соотношения сторон.

roi – это прямоугольник области интереса (x, y, w, h) исходных IR-данных для отрисовки.

rgb_channel – это RGB-канал (0=R, 1=G, 2=B) для отрисовки. -1 (по умолчанию) отрисовывает все каналы.

alpha управляет тем, какая часть исходного изображения смешивается (0-255). 255 – полностью непрозрачно.

color_palette – это перечисление цветовой палитры или изображение RGB565 размером 256 пикселей, используемое как таблица поиска по значению исходного пикселя в оттенках серого.

alpha_palette – это изображение GRAYSCALE размером 256 пикселей, используемое как таблица поиска альфа-канала.

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 – это 2-кортеж (min, max), управляющий минимальной/максимальной температурой (в градусах Цельсия), используемой для масштабирования IR-массива. По умолчанию равен фактическим минимуму и максимуму IR.

pixformat управляет выходным форматом пикселей. Должен быть image.GRAYSCALE или image.RGB565.

copy_to_fb если True, записывает результат в буфер кадра вместо выделения в куче.

timeout если не -1, число миллисекунд ожидания нового кадра.

Константы#

fir.FIR_SHIELD: int#

OpenMV Cam Thermopile Shield (MLX90621). Псевдоним для fir.FIR_MLX90621.

fir.FIR_MLX90621: int#

Тепловой датчик MLX90621 (16x4).

fir.FIR_MLX90640: int#

Тепловой датчик MLX90640 (32x24).

fir.FIR_MLX90641: int#

Тепловой датчик MLX90641 (16x12).

fir.FIR_AMG8833: int#

Тепловой датчик AMG8833 (8x8).