v3.6.1

v3.6.1 — це великий реліз. Він додає модуль imu (LSM6DS3), набір нових API-геттерів sensor з автоматичним обертанням на основі IMU, 4-точкову перспективну корекцію rotation_corr(), та підтримку Arduino Portenta H7 з камерами HIMAX HM01B0 та OV7690. Ряд API sensor / image змінився, а TensorFlow на M7 було вилучено — ознайомтеся зі змінами, що порушують зворотну сумісність.

Основні можливості

  • Модуль imu — акселерометр / гіроскоп / температура / крен / тангаж на LSM6DS3 (OpenMV 4 / Portenta).

  • Геттери датчика + автообертанняget_pixformat() / get_framesize() / get_hmirror() / get_vflip() / get_windowing(), set_transpose() / set_auto_rotation(), та обертання знімка на основі IMU.

  • Перспективна корекціяrotation_corr() отримує ключові слова fov та corners (4 точки).

  • Нове обладнання — Arduino Portenta H7, HIMAX HM01B0 та камера OV7690.

  • Несумісні зміни: set_pixformat() / set_framesize() тепер повертають None, sensor.set_framerate() було вилучено, TensorFlow вилучено на M7, а lens_corr() / linpolar() тепер вимагають парних розмірів — дивіться зміни, що порушують сумісність.

Нові можливості

  • imu — новий модуль IMU: imu.acceleration_mg(), imu.angular_rate_mdps(), imu.temperature_c(), imu.roll(), imu.pitch(), та imu.sleep() (LSM6DS3 на OpenMV 4 / Portenta).

  • Геттери датчика — додано sensor.get_pixformat(), get_framesize(), get_hmirror(), get_vflip(), get_windowing(), set_transpose() / get_transpose(), та set_auto_rotation() / get_auto_rotation().

  • Автообертанняsensor.snapshot() використовує IMU для перевертання / дзеркального відображення / транспонування кадрів, коли автообертання увімкнено.

  • rotation_corr() — додано ключові слова fov та corners (4-точкова перспектива) з прикладами перспективної корекції.

  • lcd.init() — додано іменований аргумент bgr.

  • collections.deque — увімкнено у збірці MicroPython.

  • Додано константи ідентифікаторів sensor.OV7690 та sensor.HM01B0 і приклад фільтра зображень у стилі numpy за допомогою ulab.

Інші зміни та вдосконалення

  • Значно оптимізовано фільтри зображень (медіанний / режимний / середній / …), find_circles() та корекцію лінзи; alloc_extra_fb тепер може виділяти будь-яку кількість байтів; модель виявлення людей перебудовано з новою операцією усереднювального пулінгу.

Виправлення помилок

Камера та датчики:

  • Виправлено sleep() для OV2640 (тепер використовує регістр режиму очікування COM2 замість виводу вимкнення живлення), конфігурацію виводу FSYNC, полярності HSYNC/VSYNC і адресу/сканування I2C для HM01B0, GPIO вимкнення живлення датчика Portenta та вивід скидання камери, а також вимкнено автообертання при куті нахилу IMU, близькому до 90°/270°.

Обробка зображень та система:

  • Виправлено помилку перевірки меж у фільтрі зображень, жорсткий збій при вимкненні D-кешу, завантаження на платах без картки SD, помилку load_to_fb у tf.load(), переповнення стека при виявленні людей (стек H7 збільшено до ≥12 КБ), а також зміщення USB-дескриптора для режиму високої швидкості на OpenMV 4 Plus.

Апаратне забезпечення та підтримка плат

  • Arduino Portenta H7 — початкова підготовка плати (конфігурація тактового генератора/OSC/HSE для STM32H747, заголовки CMSIS, ADC, SDRAM, Arduino USB PID).

  • HIMAX HM01B0 — новий драйвер монохромної камери (Bayer, тактовий генератор на зовнішньому осциляторі).

  • OV7690 — новий драйвер камери.

  • IMU LSM6DS3 — OpenMV 4 / Portenta.

Несумісні зміни API

Зміни API, помітні для користувача, між v3.6.0 та v3.6.1. Область застосування: C-модулі Python у modules/ та бібліотеки Python у scripts/libraries/.

Кожна зміна позначена ступенем впливу:

  • незначний — вузький API; впливає лише на скрипти, що його використовували.

  • поведінковий — той самий API, різні результати; перевірте налаштовані скрипти.

Зміни згруповано за ступенем впливу в такому порядку. Якщо ви просто хочете перенести свій код, перейдіть до контрольного списку міграції в кінці. Кожен хеш коміту веде до його diff на GitHub.

sensor.set_framerate() вилучено (незначний)

Заглушку sensor.set_framerate() без дії було вилучено; її виклик тепер викликає AttributeError. Видаліть цей виклик і керуйте часом кадрів через розмір кадру/витримку. (Робочий set_framerate() повернуто у v4.0.2.)

Коміти: 705e98f91

TensorFlow вилучено з OpenMV Cam M7 (незначний)

TensorFlow (модуль tf) було вимкнено на OpenMV Cam M7 / OpenMV 3 (він більше не вміщується). import tf на M7 завершується помилкою — використовуйте камеру класу H7 для TensorFlow. (tf знову увімкнено на F7 у v3.6.3.)

Коміти: 2ae875077

set_pixformat() / set_framesize() повертають None (поведінковий)

sensor.set_pixformat() та sensor.set_framesize() тепер повертають None замість True, а непідтримуваний формат пікселів тепер викликає ValueError замість твердження. Код, що перевіряв повернуте значення (наприклад, if sensor.set_pixformat(...):) необхідно виправити, а код, що перехоплював AssertionError для непідтримуваних форматів, повинен перехоплювати ValueError.

Коміти: f314ac4e7

lens_corr() / linpolar() / logpolar() вимагають парних розмірів (поведінковий)

image.lens_corr() та image.linpolar() / image.logpolar() тепер вимагають парної ширини та висоти зображення і викликають помилку при непарних розмірах. Обріжте або змініть розмір зображення до парних значень перед викликом цих методів.

Коміти: b36460a36, 2b26ca17b

Контрольний список міграції

Для чистого перенесення на v3.6.1 зазвичай потрібно виконати:

  1. Видалити виклики sensor.set_framerate() (вилучення set_framerate).

  2. Перенести завдання TensorFlow з OpenMV Cam M7 (зміна TensorFlow на M7).

  3. Припинити залежність від повернутого значення set_pixformat() / set_framesize() та перехоплювати ValueError для непідтримуваних форматів пікселів (зміна повернутого значення).

  4. Забезпечити парні розміри зображення перед lens_corr() / linpolar() / logpolar() (вимога парних розмірів).

Усі інші скрипти працюють без змін.