v3.3.0

v3.3.0 — це великий реліз. Він додає повну підтримку теплової камери FLIR Lepton з новим інтерфейсом sensor.ioctl() і колірними палітрами, модуль відеовиводу tv через SPI, тригерний режим із глобальним затвором, великий набір нових методів малювання/аналізу 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(), а також багато нових властивостей плям.

  • Нові бібліотеки — драйвер датчика відстані VL53L1X ToF, драйвер двигуна TB6612, micro-linalg.

  • Несумісні зміни: API cpufreq перероблено, sensor.set_framesize() тепер викидає виняток при помилці, sensor.alloc_extra_fb() більше не підтримує Bayer/JPEG, а позиційні аргументи image.replace() змістилися — дивіться розділ несумісних змін.

Нові можливості

  • FLIR Lepton — додано sensor.ioctl() для специфічного управління датчиком та повний набір ioctls для 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(), ключові слова rotation / 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, обертання).

  • Бібліотеки — додано драйвер датчика відстані vl53l1x ToF, драйвер двигуна tb6612 (з прикладами DC-двигуна та кроковий Motor-Shield) та бібліотеку micro-linalg (ulinalg / umatrix).

  • Оновлено FatFS до FF13C (з підтримкою exFAT).

Інші зміни та покращення

  • Покращено стандартну якість JPEG (середній діапазон між низьким і високим замість фіксованого значення); операції із зображенням на місці більше не вимагають повторення зображення як першого аргументу; draw_string() приймає нецілі значення масштабу.

Виправлення помилок

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

  • Виправлено зависання Lepton 3.5 під час запуску (таймаут + відновлення) та надійність скидання, порядок виклику set_framesize() перед set_pixformat() для MT9V034 (порядок більше не має значення), 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 — відеовивід через SPI / композитний відеовихід.

  • Тригерний режим із глобальним затвором (MT9V034).

Несумісні зміни API

Видимі користувачем несумісні зміни API між v3.2.0 та v3.3.0. Область: Python C-модулі в modules/ та Python бібліотеки в scripts/libraries/.

Кожна зміна позначена рівнем впливу:

  • major — стосується більшості скриптів, що використовували цю функцію; вам потрібно буде портувати код.

  • minor — вузький API; стосується лише скриптів, що використовували його.

  • behavior — той самий API, різні результати; перевірте налаштовані скрипти.

Зміни згруповані за рівнем впливу в такому порядку. Якщо вам потрібно лише портувати код, перейдіть до контрольного списку міграції в кінці. Кожен хеш коміту містить посилання на його diff на 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 типова робота включає:

  1. Портування коду cpufreq на цілочисельний МГц set_frequency() та get_current_frequencies() / get_supported_frequencies() (переробка cpufreq).

  2. Передача mask до image.replace() як ключового слова (зміна replace).

  3. Виділення додаткових кадрових буферів як GRAYSCALE / RGB565 замість Bayer/JPEG (зміна alloc_extra_fb).

  4. Перехоплення ValueError навколо sensor.set_framesize() замість перевірки на False (зміна set_framesize).

Всі інші скрипти виконуються без змін.