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вказує тип теплового датчика:fir.FIR_SHIELD: 16x4 пікселів (MLX90621).fir.FIR_MLX90621: 16x4 пікселів.fir.FIR_MLX90640: 32x24 пікселів.fir.FIR_MLX90641: 16x12 пікселів.fir.FIR_AMG8833: 8x8 пікселів.
За замовчуванням
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.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.