v3.6.1

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

Основные новшества

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

  • Getter-методы датчика + автоповорот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).

  • Getter-методы датчика — добавлены 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.

Прочие изменения и улучшения

  • Существенно оптимизированы фильтры изображения (median / mode / mean / …), find_circles() и коррекция объектива; alloc_extra_fb теперь может выделять любое число байтов; модель обнаружения людей пересобрана с новой операцией average-pool.

Исправления ошибок

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

  • Исправлены sleep() для OV2640 (теперь используется регистр ожидания COM2 вместо вывода power-down), конфигурация вывода FSYNC, полярности HSYNC/VSYNC и адрес/сканирование I2C для HM01B0, GPIO power-down датчика и вывод сброса камеры на 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 — новый драйвер камеры.

  • LSM6DS3 IMU — OpenMV 4 / Portenta.

Несовместимые изменения API

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

Каждое изменение помечено степенью влияния:

  • minor — узкий API; затрагивает только скрипты, которые его использовали.

  • behavior — тот же API, другие результаты; перепроверьте настроенные скрипты.

Изменения сгруппированы по влиянию в этом порядке. Если вам нужно просто перенести код, перейдите к контрольному списку миграции в конце. Каждый хеш коммита ссылается на свой diff на GitHub.

sensor.set_framerate() удалена (minor)

Заглушка sensor.set_framerate(), не выполнявшая никаких действий, была удалена; её вызов теперь вызывает AttributeError. Удалите вызов и управляйте таймингом кадров через framesize/экспозицию. (Рабочая set_framerate() снова появляется в v4.0.2.)

Коммиты: 705e98f91

TensorFlow убран с OpenMV Cam M7 (minor)

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

Коммиты: 2ae875077

set_pixformat() / set_framesize() возвращают None (behavior)

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

Коммиты: f314ac4e7

lens_corr() / linpolar() / logpolar() требуют чётных размеров (behavior)

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() (требование чётных размеров).

Все остальные скрипты работают без изменений.