v3.7.0

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

Основні зміни

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

  • 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, безліччю констант розміру кадру, 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) та приклад пробудження ExtInt із режиму зупинки.

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

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

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

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

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

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

  • Виправлено вихід LCD-шилда та режим моно-аудіо з 1 каналом на 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, інші результати; перевірте налаштовані скрипти.

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

  5. Видаліть зсув −128 при передачі Y до yuv_to_* (зміна yuv_to_*).

Всі інші скрипти працюють без змін.