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() были удалены.
API модуля дисплея (minor)¶
Устаревший резервный вариант имени модуля udisplay был удалён — модуль регистрируется только как display. Методы dsi_write() / dsi_read(), доступные только для DSI, были заменены на bus_write() / bus_read(), которые теперь доступны на всех контроллерах дисплеев.
Изменения 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) модели.
Изменения поведения 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 обычно требуется:
Прекратить использование
Image.div()/cartoon()/mul()(удалённые методы).Импортировать модуль дисплея как
displayи заменитьdsi_write/dsi_readнаbus_write/bus_read(изменение API дисплея).Обновить создание
MQTTClient(portобязателен;ssl_params/callback) и любые вызовыtf.regression()(изменения API библиотек).Передавать
maxметодаawb()иgamma/contrast/brightnessметодаgamma()как ключевые аргументы, а также перепроверить предположения о YUV422/транспонировании и безопасности режима точки доступа (изменения ISP/датчика).