v4.5.3

v4.5.3 — крупный выпуск: автофокус OV5640, сглаженное рисование линий, перенесённый в основную ветку аппаратный декодер JPEG, значительное расширение возможностей i.MX RT (RT1060) и широкий набор исправлений для камеры/ISP. Несколько редко используемых методов изображения были удалены, а некоторые API ISP/дисплея изменились — прочитайте об изменениях, нарушающих совместимость, ниже.

Основные моменты

  • Автофокус OV5640 — включён на OpenMV 4 / 4 Plus / RT1060 (sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS)), с примером.

  • Сглаженный draw_line() и перенесённый в основную ветку аппаратный декодер JPEG для STM32 (более быстрая декомпрессия JPEG).

  • OpenMV RT1060 получил ulab, операции ISP, set_framerate() / set_frame_callback(), значительно больший буфер кадра и драйвер CAN.

  • Нарушение совместимости: методы Image.div() / cartoon() / mul() были удалены, а некоторые API ISP/дисплея изменились — см. изменения, нарушающие совместимость.

Новые возможности

  • Автофокус OV5640 — прошивка автофокуса включена на OPENMV4, OPENMV4P и OPENMV RT1060; запускается командой sensor.ioctl(sensor.IOCTL_TRIGGER_AUTO_FOCUS). Добавлен новый пример 07-Sensor-Control/autofocus.py.

  • Сглаженное рисование линийdraw_line() получил сглаживание.

  • Пользовательские контроллеры SPI-дисплеевSPIDisplay теперь принимает ключевое слово controller= и предоставляет хук bus_write для пользовательских последовательностей инициализации/команд.

  • Обновление Image.ccm() — теперь принимает вложенные матрицы 3x3 / 4x3 / 3x4 / 4x4 и массивы ulab (с необязательной строкой смещения по каждому каналу); добавлен пример коррекции цвета.

  • Захват JPEG на i.MX RT — захват sensor.JPEG на Arduino Portenta/Nicla Vision/Giga, а также set_framerate() и set_frame_callback() в порту mimxrt.

  • Проверка моделей TFLite — модели теперь содержат хеш порядка операторов и размер набора операторов.

  • WiFi — добавлены константы режимов безопасности CYW43; новые примеры скриптов управления платой i.MX RT (Pin/ADC/CAN/I2C/PWM/SPI/UART/…).

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

  • MicroPython обновлён до 1.22; CMSIS обновлён до 5.9.0.

  • Аппаратный декодер JPEG для STM32 перенесён в основную ветку — более быстрая декомпрессия JPEG на встроенном кодеке.

  • Оптимизированы Image.invert() / negate() и бинарные/математические операции над изображениями (интринсики CMSIS).

  • Библиотеки rpc и vl53l1x стали переносимыми (используют machine / time вместо pyb), поэтому работают на портах, отличных от STM32.

  • Ускоренный с помощью DMA memcpy буфера кадра на OpenMV H7 / H7 Plus / Pro / Pure Thermal и Arduino Giga / Nicla Vision / Portenta H7; STM32 теперь сканирует устройства I2C один раз за сканирование для более быстрой загрузки.

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

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

  • Исправлен XCLK камеры STM32 для получения истинной скважности 50% и ошибка при установке нулевой частоты тактирования камеры; исправлены кадрирование+транспонирование Bayer, сдвиг цвета YUV422 и set_windowing() в порту mimxrt.

  • Исправлены опрос идентификатора чипа GC2145 и hmirror/vflip на повёрнутых креплениях; исправлены PAJ6100 на RT1062 и переполнение SPI-буфера PixArt PAJ7620/PAW3902.

Обработка изображений:

  • Исправлены обрезка roi в find_rects(), усечение дробного смещения в morph(), значения контраста/яркости по умолчанию в image.gamma(), смещения A/B в get_threshold() на RGB565 и декодирование JPEG для размеров, не кратных 8.

Система и библиотеки:

  • machine.LED.value() без аргумента теперь возвращает состояние светодиода вместо его сброса; исправлены деинициализация SPI SSEL на общей шине, machine.deepsleep() на RT1062, сбой TF при отсутствующих операторах и автоактивация сетевого адаптера WINC1500/ninaw10 при connect().

Аппаратное обеспечение и поддержка плат

  • OpenMV RT1060 — включены ulab и операции ISP, увеличен буфер кадра (10M→20M) / fb_alloc (2M→11M), восстановлен драйвер CAN, больше кучи.

  • Arduino GIGA — поддержка камеры GC2145 с автоопределением GC2145/OV5640 (они используют один адрес I2C).

  • i.MX RT — поддержка захвата sensor.JPEG.

Изменения API, нарушающие совместимость

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

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

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

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

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

Удалённые методы изображения (minor)

Методы Image.div(), Image.cartoon() (и его пример) и Image.mul() были удалены.

Коммиты: 7c932602e, 055a468b8, 4fe7fb63b

API модуля дисплея (minor)

Устаревший резервный вариант имени модуля udisplay был удалён — модуль регистрируется только как display. Методы dsi_write() / dsi_read(), доступные только для DSI, были заменены на bus_write() / bus_read(), которые теперь доступны на всех контроллерах дисплеев.

Коммиты: 7df6694c3, 7d1f378a0

Изменения API MQTT и tf.regression (minor)

MQTTClient библиотеки mqtt был переработан: port теперь обязателен, добавлены новые ключевые слова конструктора ssl_params / callback и аргумент timeout в connect(), удалены прежние значения по умолчанию ssl= / port=0, а check_msg() теперь неблокирующий. Функция tf.regression() была переписана — её сигнатура теперь regression(model, array), и она обрабатывает 1D/2D/3D и квантованные (int8) модели.

Коммиты: d12874c63, c5ec576c1

Изменения поведения ISP / датчика (behavior)

Image.awb() был переработан — различие между «серым миром» (по умолчанию) и «белым пятном» (max=True) теперь явное, а аргумент max вместе с аргументами gamma / contrast / brightness метода Image.gamma() теперь являются только ключевыми (позиционные вызовы необходимо обновить). Транспонирование изображения теперь отключено для YUV422 (ранее оно давало некорректный результат), а сдвиг цвета YUV422 был исправлен для соответствия Bayer. Путь JPEG на STM32 теперь вызывает ошибку при несоответствии геометрии JPEG вместо создания повреждённого изображения, а режим точки доступа WiFi теперь применяет режим безопасности по умолчанию на портах STM32 и i.MX RT.

Коммиты: 36d5cecbd, 00500ccde, c1eeaefd6, 333fb2b5f, 55cab8733, c7d40f6af

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

Для чистого переноса на v4.5.3 обычно требуется:

  1. Прекратить использование Image.div() / cartoon() / mul() (удалённые методы).

  2. Импортировать модуль дисплея как display и заменить dsi_write/ dsi_read на bus_write/bus_read (изменение API дисплея).

  3. Обновить создание MQTTClient (port обязателен; ssl_params/callback) и любые вызовы tf.regression() (изменения API библиотек).

  4. Передавать max метода awb() и gamma/contrast/ brightness метода gamma() как ключевые аргументы, а также перепроверить предположения о YUV422/транспонировании и безопасности режима точки доступа (изменения ISP/датчика).