v4.5.1

v4.5.1 добавляет подсказки рисования по ориентации/пропорциям изображения, загрузку изображений напрямую из файлового пути, ioctl широкого поля зрения GC2145 и новый API контроллера подсветки. Также переработаны конструктор Image(), API display и разбор аргументов модулей — прочитайте несовместимые изменения ниже.

Основное

  • Подсказки рисованияdraw_image() получил подсказки ориентации (HMIRROR/VFLIP/TRANSPOSE, ROTATE_90/180/270) и масштабирования по пропорциям (SCALE_ASPECT_KEEP/EXPAND/IGNORE).

  • Загрузка изображений с дискаdraw_image() / display.write() принимают строку файлового пути.

  • Управление подсветкой — новые классы DACBacklight / PWMBacklight и аргумент дисплея backlight=.

  • Несовместимо: изменились конструктор Image(), API display и разбор аргументов модулей — см. несовместимые изменения.

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

  • Подсказки ориентации для draw_image()image.HMIRROR, image.VFLIP, image.TRANSPOSE, а также удобные image.ROTATE_90 / ROTATE_180 / ROTATE_270.

  • Подсказки пропорций для draw_image()image.SCALE_ASPECT_KEEP / SCALE_ASPECT_EXPAND / SCALE_ASPECT_IGNORE для вписывания / расширения / растягивания.

  • Константы палитрыimage.PALETTE_RAINBOW и image.PALETTE_IRONBOW (перенесены в модуль image).

  • Широкое поле зрения — новые ioctl sensor.IOCTL_SET_FOV_WIDE / IOCTL_GET_FOV_WIDE (на GC2145, масштабирование датчика до 5x).

  • Загрузка с дискаdraw_image() и display.write() принимают строку файлового пути исходного изображения, загружая его напрямую из хранилища.

  • Контроллеры подсветки — новые классы DACBacklight и PWMBacklight (импортируемые из display) и аргумент backlight= (только по ключевому слову) в конструкторах SPI/параллельных дисплеев.

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

  • Драйвер дисплея ST7701 DSI перенесён в собственный модуль st7701.py (по-прежнему импортируемый через from display import *) и заморожен на Arduino Giga; драйвер IMU lsm9ds1 был заморожен на Arduino Nano 33 BLE Sense.

  • Камеры MT9V022 / MT9V034 (с глобальным затвором) теперь применяют коррекцию шума строк для лучшего качества изображения.

  • Том USB-накопителя i.MX RT теперь помечается как диск OpenMV.

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

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

  • Исправлено обнаружение углов (find_keypoints() FAST/AGAST) на изображениях выше 480 строк — построчный буфер теперь рассчитывается по высоте изображения.

  • Добавлена поддержка вывода FSYNC для кадрово-синхронизированного snapshot() на i.MX RT (OpenMV RT1060) и исправлены перепутанные выводы SPI4 MOSI/MISO на RT1060.

Дисплей и видео:

  • Исправлен порядок аргументов конструктора SPIDisplay (bgr, byte_swap, triple_buffer применялись к неверным параметрам).

  • Исправлено повреждение изображения на TV-шилде при рисовании изображения с заданным прямоугольником и неверные границы кадра MJPEG при записи масштабированных кадров.

Сеть:

  • Режим точки доступа WINC WiFi больше не навязывает устаревшее ограничение только-WEP — режимы открытой точки доступа и WPA работают с корректной обработкой PSK.

Оборудование и поддержка плат

  • OpenMV RT1060 — вывод FSYNC и исправленные выводы SPI4.

  • Arduino GIGA — обходное решение для надёжности QSPI; дисплей ST7701 вшит в прошивку.

  • Arduino Nano 33 BLE Sense — драйвер IMU lsm9ds1 вшит в прошивку.

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

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

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

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

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

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

Конструктор Image() и API display (minor)

Конструктор image.Image был переработан на именованные аргументы (height, pixformat, buffer=, copy_to_fb=); теперь он может создавать изображение из существующего bytearray/буфера, а для сжатых форматов требуется буфер. display.write() был переработан: x_scale/y_scale теперь принимают float (коэффициент масштабирования) или int (целевой размер в пикселях), а отдельные ключевые слова x_size/y_size были удалены. Первый позиционный аргумент WINC.connect() был переименован essidssid, а результаты сканирования WINC WiFi изменились на (ssid_bytes, bssid_bytes, channel, rssi, security, N) (SSID/BSSID теперь являются bytes; BSSID больше не является форматированной MAC-строкой).

Коммиты: 6752c95ac, 161737092, 8178c237c, b6cdf8de1

Диапазон подсветки, масштабирование и аргументы только по ключевым словам (behavior)

Display.backlight() теперь принимает интенсивность 0–100 (0 = выкл, 100 = полная) вместо 0–255, вызывая ValueError при выходе за пределы. Целочисленные значения x_scale/y_scale теперь трактуются как мультипликативный коэффициент масштабирования (так же, как float), а не как целевой размер в пикселях — это затрагивает fir.snapshot()/draw_ir(), tof.snapshot()/ draw_depth(), display и масштабирование tv. Разбор аргументов в модулях sensor, fir, tof, tv, mjpeg, gif, imageio, tf и audio был унифицирован, сделав несколько ранее позиционных параметров доступными только по ключевому слову (имена, значения по умолчанию и поведение в остальном не изменились).

Коммиты: 391ec443f, 8bd25d6cd, 477312656, 08bf62a32, a4c0f20bf, 9b411a66d, 3d679f5a6, d15fc6b8d, 555e67ecd

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

Для чистого переноса на v4.5.1 типичная работа такова:

  1. Обновите создание Image() до новой именованной формы, переведите display.write() с x_size/y_size и переименуйте WINC.connect() essidssid (обработайте новые кортежи сканирования на основе bytes) (изменения конструктора/дисплея/WINC).

  2. Перемасштабируйте вызовы Display.backlight() на диапазон 0–100, перепроверьте любое использование целочисленных x_scale/y_scale и передавайте ранее позиционные параметры модулей по ключевому слову (изменения поведения).