v3.7.0

v3.7.0 — крупный релиз. Он добавляет модуль audio (PDM-микрофон Portenta H7) с новым неблокирующим API на основе функций обратного вызова, модуль распознавания речи TensorFlow micro_speech, совершенно новый контроллер параллельного RGB LCD (с выводом HDMI и сенсорным экраном FT5X06), метод image.flush() с константами формата пикселей и переписанный конвейер масштабирования image.draw_image(). Несколько устаревших вспомогательных библиотек и методов изображения были удалены, а математика yuv_to_* изменилась — прочтите раздел несовместимых изменений ниже.

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

  • Модуль audio — захват со встроенного PDM-микрофона Portenta H7 с неблокирующим API start_streaming(callback).

  • micro_speech — модуль распознавания речи micro-speech на основе TensorFlow.

  • Новый контроллер LCD — поддержка параллельных RGB-дисплеев, вывод HDMI (TFP410) и сенсорный экран FT5X06.

  • image.draw_image() — переписан с полным конвейером масштабирования/альфа/палитры (x_scale / y_scale / hint / color_palette …).

  • image.flush() плюс константы формата пикселей (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • Несовместимо: удалены устаревшие вспомогательные математические библиотеки и несколько методов изображения, переработаны API draw_image() / LCD, а yuv_to_* больше не вычитает 128 — см. несовместимые изменения.

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

  • audio — новый модуль audio для Portenta H7 для захвата с PDM-микрофона: audio.init(), неблокирующий audio.start_streaming(callback) и audio.stop_streaming() (частота задаётся в Гц).

  • micro_speech — новый модуль с классом MicroSpeech, audio_callback() и micro_speech() для распознавания речи TensorFlow; listen() использует усреднение по скользящему окну и принимает ключевое слово filter для ограничения результатов списком меток.

  • LCD — новый контроллер LCD с поддержкой параллельных RGB-дисплеев, типами LCD_NONE / LCD_SHIELD / LCD_DISPLAY, множеством констант framesize, параметрами triple_buffer / framesize / refresh / bgr / deinit, расширенным display, выводом HDMI через TFP410 и поддержкой сенсорного экрана FT5X06.

  • image.flush() — добавлены метод image.flush() и константы формата пикселей (image.BINARY / GRAYSCALE / RGB565 / YUV422 / BAYER / JPEG).

  • image.draw_image() — переписан с новым конвейером масштабирования: x_scale / y_scale / x_size / y_size, rgb_channel, alpha, color_palette, alpha_palette и hint, плюс константы image.AREA / BILINEAR / BICUBIC / CENTER / EXTRACT_RGB_CHANNEL_FIRST / APPLY_COLOR_PALETTE_FIRST и новые примеры альфа-смешивания / таблиц цветов / масштабирования.

  • ImageReader.next_frame() получил ключевое слово pause для отключения задержки воспроизведения в реальном времени.

  • Добавлены примеры аудио для Portenta (audio_fft.py, micro_speech.py) и пример пробуждения из режима stop по ExtInt.

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

  • Встроенные примеры реорганизованы в scripts/examples/Arduino/; буфер кадра теперь обновляется мгновенно после загрузки/создания изображений с copy_to_fb=True (ручной flush не нужен); куча Portenta немного уменьшена, чтобы вместить больше статического состояния драйверов.

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

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

  • Исправлены перепутанные красный/синий (порядок байтов RGB565) в захваченных изображениях, округление отрисовки DMA2D приведено в соответствие с остальным кодом отрисовки, повреждение fb_alloc при рекурсивных аллокациях (find_blobs()), а top_hat() / black_hat() теперь доступны только при включённых одновременно бинарных и математических операциях.

Дисплей и аудио:

  • Исправлены вывод на LCD shield и одноканальный моно-режим аудио на Portenta.

Portenta:

  • Реализован обходной путь для проблемы Ethernet/SDRAM (установка rst_eth в высокий уровень) и исправлена конфигурация таймингов SDRAM.

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

  • Arduino Portenta H7 — захват аудио со встроенного PDM-микрофона (SAI / PDM2PCM).

  • LCD — новый контроллер параллельного RGB-дисплея (LTDC включён в сборке H7), вывод HDMI через TFP410 и поддержка сенсорного экрана LCD FT5X06.

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

Несовместимые для пользователя изменения API между v3.6.9 и v3.7.0. Область: Python C-модули в modules/ и библиотеки Python в scripts/libraries/.

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

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

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

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

Удалены устаревшие вспомогательные математические библиотеки (minor)

Вспомогательные библиотеки mtx, rv, ulinalg, umatrix и vec удалены из scripts/libraries в пользу ulab. Скрипты, которые import любую из них, перестанут работать и должны быть перенесены на ulab.

Коммиты: 1f7da9272

Удалены remove_shadows() / chrominvar() / illuminvar() (minor)

image.remove_shadows(), image.chrominvar() и image.illuminvar() удалены без замены. Скрипты, вызывающие эти методы, должны убрать эти вызовы.

Коммиты: 3173c2bb3

Переработана сигнатура image.draw_image() (minor)

image.draw_image() переписан на основе нового конвейера масштабирования. Прежние позиционные аргументы alpha / единый scale и прежний порядок позиционных аргументов больше не применяются; используйте новую форму с ключевыми словами (x_scale= / y_scale= или x_size= / y_size=, alpha=, color_palette=, hint= …).

Коммиты: 3439f8824

Переписан модуль LCD (minor)

Модуль lcd переписан под новый контроллер дисплея. lcd.init() теперь принимает type дисплея (LCD_NONE / LCD_SHIELD / LCD_DISPLAY) и новые ключевые аргументы, а набор констант / API существенно реорганизован. Старые скрипты только для shield в основном по-прежнему работают, но значения по умолчанию и поведение изменились — проверьте скрипты LCD с учётом нового API type / framesize.

Коммиты: 185538207

yuv_to_* больше не вычитает 128 (behavior)

image.yuv_to_binary() / yuv_to_grayscale() / yuv_to_rgb() / yuv_to_lab() теперь трактуют элемент Y кортежа как беззнаковое значение 0–255 вместо вычитания 128. Вызывающий код должен передавать Y без прежнего смещения −128, чтобы получить те же цвета, что и раньше.

Коммиты: dcf141192

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

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

  1. Перенести использование mtx / rv / ulinalg / umatrix / vec на ulab (удаление математических библиотек).

  2. Убрать вызовы image.remove_shadows() / chrominvar() / illuminvar() (удалённые методы изображения).

  3. Обновить вызовы image.draw_image() под новую сигнатуру с ключевыми словами (переработка draw_image).

  4. Проверить скрипты LCD с учётом нового API type / framesize модуля lcd (переписывание LCD).

  5. Убрать смещение −128 при передаче Y в yuv_to_* (изменение yuv_to_*).

Все остальные скрипты работают без изменений.