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() теперь требуют чётной ширины и высоты изображения и вызывают ошибку при нечётных размерах. Перед вызовом этих методов обрежьте или измените размер изображения до чётных значений.
Контрольный список миграции¶
Для чистого переноса на v3.6.1 обычно требуется:
Удалить вызовы
sensor.set_framerate()(удаление set_framerate).Перенести задачи TensorFlow с OpenMV Cam M7 (изменение TensorFlow на M7).
Перестать полагаться на возвращаемое значение
set_pixformat()/set_framesize()и ловитьValueErrorдля неподдерживаемых форматов пикселей (изменение возвращаемого значения).Обеспечить чётные размеры изображения перед
lens_corr()/linpolar()/logpolar()(требование чётных размеров).
Все остальные скрипты работают без изменений.