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).