fir — драйвер теплового датчика (fir == далекий інфрачервоний діапазон)

Модуль 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-адресу, тому для ініціалізації саме MLX90641 необхідно явно передати 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.FIR_MLX90621: За замовчуванням 18. Допустимі значення: 15, 16, 17 або 18.

  • fir.FIR_MLX90640: За замовчуванням 19. Допустимі значення: 16, 17, 18 або 19.

  • fir.FIR_MLX90641: За замовчуванням 19. Допустимі значення: 16, 17, 18 або 19.

  • fir.FIR_AMG8833: Фіксовано 12.

Вища роздільна здатність зменшує максимальний діапазон вимірюваних температур, і навпаки.

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) області інтересу (ROI) у вихідних ІЧ-даних для відображення.

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

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

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

alpha_palette — 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 — 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) області інтересу (ROI) у вихідних ІЧ-даних для відображення.

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

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

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

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

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

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

timeout якщо не -1 — кількість мілісекунд очікування нового кадру.

Константи

fir.FIR_SHIELD: int

Термопільний щит OpenMV Cam (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).