v3.3.0¶
v3.3.0 — это крупный выпуск. Он добавляет полную поддержку тепловизионной камеры FLIR Lepton с новым интерфейсом sensor.ioctl() и цветовыми палитрами, модуль вывода видео по SPI tv, режим триггерного захвата с глобальным затвором, большую партию новых методов рисования/анализа image (gamma_corr(), draw_ellipse(), draw_edges(), множество свойств блобов), а также новые библиотеки ToF / моторов / линейной алгебры. API cpufreq был переработан, а sensor.set_framesize() теперь вызывает исключение — читайте о ломающих изменениях ниже.
Основные моменты¶
FLIR Lepton — полная поддержка тепловизионной камеры через новый интерфейс
sensor.ioctl(), цветовые палитры иimage.to_rainbow().Модуль
tv— вывод видео по SPI на телевизор / композитный выход.Режим триггерного захвата с глобальным затвором — триггерный захват MT9V034 через
sensor.ioctl().Обработка изображений —
gamma_corr(),draw_ellipse(),draw_edges(), альфа-смешивание вdraw_image()и множество новых свойств блобов.Новые библиотеки — измерение расстояния ToF VL53L1X, драйвер мотора TB6612, micro-linalg.
Ломающее изменение: API
cpufreqбыл переработан,sensor.set_framesize()теперь вызывает исключение при неудаче,sensor.alloc_extra_fb()больше не поддерживает Bayer/JPEG, а позиционные аргументыimage.replace()сдвинулись — см. раздел о ломающих изменениях.
Новые возможности¶
FLIR Lepton — добавлены
sensor.ioctl()для специфичного управления датчиком и полный набор ioctl для Lepton (радиометрия, частота обновления/разрешение, выполнение команд, установка/чтение атрибутов, температура FPA/AUX в °C, режим/диапазон измерения, ширина/высота),sensor.set_color_palette()/sensor.get_color_palette()сsensor.PALETTE_RAINBOW/PALETTE_IRONBOW,image.to_rainbow()и примеры скриптов для Lepton (27-Lepton).Триггерный режим —
IOCTL_SET_TRIGGERED_MODE/IOCTL_GET_TRIGGERED_MODEдля триггерного захвата MT9V034 с глобальным затвором, с примерами высокого FPS и триггерного режима.Модуль
tv— добавлены привязки для вывода видео по SPI на телевизор / композитный выход.Обработка изображений — добавлены
image.gamma_corr(),image.draw_ellipse(),image.draw_edges(), альфа-смешивание вdraw_image(), ключевое словоmask=вclear(), повторно добавленыmask_rectangle()/mask_circle()/mask_ellipse(), ключевые слова поворота / hmirror / vflip вdraw_string()/draw_text(), ключевое словоtranspose(и псевдонимыassign/set) вreplace(), параметрыx_scale/y_scaleвcopy(), а такжеcrop()/scale(), конструкторImage()из размеров, пиксельный форматsensor.BINARY, экспортируемые функции преобразования цветовых пространств и множество новых свойств блобов (corners,perimeter,roundness,elongation,extent,compactness,solidity,convexity,enclosing_circle,enclosed_ellipse, поворот).Библиотеки — добавлены драйвер датчика расстояния ToF
vl53l1x, драйвер мотораtb6612(с примерами Motor-Shield для DC-моторов и шаговых двигателей) и библиотека micro-linalg (ulinalg/umatrix).Обновлена FatFS до FF13C (с поддержкой exFAT).
Прочие изменения и улучшения¶
Улучшено качество JPEG по умолчанию (середина диапазона между низким и высоким вместо жёстко заданного значения); операции над изображением на месте больше не требуют повторять изображение в качестве первого аргумента;
draw_string()принимает нецелые значения масштаба.
Исправления ошибок¶
Камера и датчики:
Исправлены зависание при запуске Lepton 3.5 (тайм-аут + восстановление) и надёжность сброса, вызов MT9V034
set_framesize()доset_pixformat()(порядок вызовов больше не имеет значения), WVGA для MT9V034 на STM32H7, диапазон автоэкспозиции MT9V034 и обновления теневых регистров, а также ошибка ADC на H7.
Обработка изображений:
Исправлены недопустимый доступ к памяти в
find_apriltags(),copy()при копировании масштабированного изображения в основной буфер кадра, выделение буфера кадра вto_grayscale()/to_rgb565(),len()объекта ключевой точки, обработка границ MCU в JPEG, разбор списка порогов вbinary()и приём кортежей ключевых точек вdraw_keypoints().
Система:
Исправлены утечки из-за дисбаланса mark/free в
fb_allocв методахimage/fir/lcd/tv/nn,py_assertтеперь освобождает память буфера кадра при перехваченных исключениях (#417), сбрасывается флаг переполнения UART (ORE), чтобы переполнения больше не блокировали чтение из UART, исправлен обработчик прерываний RTC, а также исправлен инструментcascade_convert.pyдля Windows.
Поддержка оборудования и плат¶
Тепловизионная камера FLIR Lepton.
TV shield — вывод видео по SPI на телевизор / композитный выход.
Глобальный затвор (MT9V034) — триггерный режим.
Ломающие изменения API¶
Видимые пользователю ломающие изменения API между v3.2.0 и v3.3.0. Область охвата: C-модули Python в modules/ и библиотеки Python в scripts/libraries/.
Каждое изменение помечено уровнем воздействия:
major — затрагивает большинство скриптов, использующих эту функцию; вам потребуется адаптировать код.
minor — узкий API; затрагивает только скрипты, которые его использовали.
behavior — тот же API, иные результаты; перепроверьте настроенные скрипты.
Изменения сгруппированы по воздействию в этом порядке. Если вы просто хотите адаптировать свой код, перейдите к контрольному списку миграции в конце. Каждый хеш коммита ведёт на его диф на GitHub.
API cpufreq переработан (major)¶
Модуль cpufreq был переработан для поддержки H7. Константы cpufreq.CPUFREQ_120MHZ / 144 / 168 / 192 / 216MHZ и cpufreq.get_frequency() были удалены. cpufreq.set_frequency() теперь принимает обычное целое число МГц (например, cpufreq.set_frequency(120)), а также добавлены cpufreq.get_current_frequencies() / cpufreq.get_supported_frequencies().
Коммиты: 6babf84a1
Позиционные аргументы image.replace() сдвинуты (minor)¶
image.replace() получил аргумент transpose, сдвинув позиционный аргумент mask с 4-й позиции на 5-ю. Код, передававший mask позиционно (например, img.replace(src, hmirror, vflip, mask)), должен перейти на форму с ключевым словом img.replace(src, mask=mask).
Коммиты: dbe7bf059
sensor.alloc_extra_fb() больше не принимает Bayer/JPEG (minor)¶
sensor.alloc_extra_fb() больше не принимает sensor.BAYER или sensor.JPEG (теперь он также поддерживает sensor.BINARY). Код, выделявший дополнительные буферы кадра в формате Bayer или JPEG, должен использовать GRAYSCALE / RGB565 (или выделять буфер другим способом).
Коммиты: f9e6b3fe0
sensor.set_framesize() вызывает исключение при неудаче (behavior)¶
sensor.set_framesize() теперь вызывает ValueError, когда размер кадра не поддерживается, вместо возврата False. Код, проверявший возвращаемое значение False, должен вместо этого перехватывать исключение ValueError.
Коммиты: b0442633e
Контрольный список миграции¶
Для чистого перехода на v3.3.0 типичный объём работ таков:
Перенесите код
cpufreqнаset_frequency()с целым числом МГц иget_current_frequencies()/get_supported_frequencies()(переработка cpufreq).Передавайте
maskвimage.replace()как ключевое слово (изменение replace).Выделяйте дополнительные буферы кадра как
GRAYSCALE/RGB565вместо Bayer/JPEG (изменение alloc_extra_fb).Перехватывайте
ValueErrorвокругsensor.set_framesize()вместо проверки наFalse(изменение set_framesize).
Все остальные скрипты работают без изменений.