v3.9.0¶
v3.9.0 — крупный релиз. Он добавляет порт nRF с Arduino Nano 33 BLE Sense (камера, PDM-модуль audio, ulab, замороженные драйверы датчиков), привносит тепловые датчики FLIR Lepton плюс MLX90641 / MLX90621 и значительно переработанный модуль fir, ioctl-вызовы автофокуса OV5640 и новый потоковый тип image.ImageIO. Устаревший модуль CMSIS-NN nn и старые классы ImageReader / ImageWriter были удалены — ознакомьтесь с критическими изменениями ниже.
Основные моменты¶
Arduino Nano 33 BLE Sense — новый порт nRF52840 с камерой, PDM-модулем
audio,ulabи замороженными драйверами датчиков.Тепловизор — поддержка FLIR Lepton, MLX90641 и MLX90621 с переработанным модулем
fir(палитры, зеркалирование, масштабирование, радиометрия, FFC).Автофокус OV5640 — новые ioctl-вызовы
sensor.IOCTL_*_AUTO_FOCUS.image.ImageIO— унифицированный тип потока изображений (память или файл; read/write/seek/size/close), заменяющийImageReader/ImageWriter.Критическое: модуль CMSIS-NN
nnиimage.ImageReader/image.ImageWriterбыли удалены, а поведениеfind_lines()/firизменилось — см. критические изменения.
Новые возможности¶
Порт nRF / Arduino Nano 33 BLE Sense — новый порт nRF52840 и поддержка платы, с новым модулем
audio(audio.init(),audio.start_streaming(),audio.stop_streaming()), включённымulabи замороженными драйверами датчиковapds9960/lps22h/lsm9ds1/hts221.image.ImageIO— новый тип потока изображений, поддерживающий как потоки в памяти, так и файловые потоки черезread()/write()/seek()/size()/close(), плюс примеры чтения/записи/работы с памятью ImageIO.FLIR Lepton — добавлена поддержка
FIR_LEPTONсfir.radiometric(),fir.trigger_ffc()иfir.register_vsync_cb().Тепловые датчики — добавлена поддержка термопар MLX90641 (
FIR_MLX90641) и MLX90621 (официальные драйверы Melexis).Палитры / ориентация
fir— добавлены константыfir.PALETTE_RAINBOW/PALETTE_IRONBOW/GRAYSCALE/RGB565, аfir.read_ir()теперь принимаетhmirror/vflip/transpose.Автофокус OV5640 — добавлены
sensor.IOCTL_TRIGGER_AUTO_FOCUS/IOCTL_PAUSE_AUTO_FOCUS/IOCTL_RESET_AUTO_FOCUS/IOCTL_WAIT_ON_AUTO_FOCUS(OpenMV 2/3/4/4 Plus/PT/Portenta).Примеры для Arduino реорганизованы в каталоги по платам.
Прочие изменения и улучшения¶
Переход на сжатые сообщения об ошибках MicroPython (более короткие строки исключений); аргумент
typeфункцииfir.init()теперь автоматически определяется через сканирование шины I2C, если он опущен; исключениеxallocтеперь сообщает количество запрошенных байтов; на Portenta включён UART 8; примеры FIR консолидированы вthermal_camera.py/thermal_overlay.py/thermal_overlay_lcd.py. Чтобы уместиться во флеш-память,image.get_similarity()и выборочный поиск были отключены в сборке OpenMV 4, и библиотеку изображений теперь можно собирать без файловой системы (для плат без файловой системы).
Исправления ошибок¶
Камера и датчики:
Исправлен расчёт PCLK OV5640, добавлены отсутствующие обработчики IRQ I2C (устранены зависания передачи I2C), переработаны чтение/запись cambus I2C для надёжности, шина Lepton I2C сделана выбираемой, выводы восстановления шины cambus перенесены в конфигурацию по платам, добавлена однократная повторная попытка сканирования cambus перед сбоем и заставлен работать OpenMV PT (общая I2C для Lepton + камеры).
Тепловизор:
Исправлен расчёт максимального значения в
firget_ir()/draw_ir()иimage.get_similarity()(FLT_MIN→-FLT_MAX), обработка 12→16 бит для AMG8833 и точность MLX90621 (официальный драйвер Melexis).
Дисплей, аудио и система:
Передачи STM32 SPI LCD перенесены на функции обратного вызова HAL SPI (надёжность дисплея), исправлены
audio.init()для Nano 33 (HF-генератор + соотношение PDM, чтобы микрофон работал), состояние таймера H7 с новым HAL,gc_collectдля nRF и ранняя инициализация/деинициализация платы, а также прекращён вывод ложного сообщения «uh oh, no preference for overlapping detection» во времяfind_apriltags()/find_rects().
Аппаратное обеспечение и поддержка плат¶
Arduino Nano 33 BLE Sense — новая плата nRF52840 (камера, PDM-аудио,
ulab, замороженные драйверы датчиков).Тепловые датчики FLIR Lepton, MLX90641 и MLX90621.
Автофокус OV5640 — OpenMV 2/3/4/4 Plus/PT/Portenta.
Portenta — включён UART 8.
Критические изменения API¶
Видимые пользователю изменения API между v3.8.0 и v3.9.0. Область: C-модули Python в modules/ и библиотеки Python в scripts/libraries/.
Каждое изменение помечено по степени влияния:
major — затрагивает большинство скриптов, использовавших функцию; вам потребуется портировать код.
minor — узкий API; затрагивает только скрипты, которые его использовали.
behavior — тот же API, другие результаты; перепроверьте настроенные скрипты.
Изменения сгруппированы по влиянию в этом порядке. Если вы просто хотите портировать свой код, перейдите к контрольному списку миграции в конце. Каждый хеш коммита ссылается на свой diff на GitHub.
Модуль CMSIS-NN nn удалён (major)¶
Модуль CMSIS-NN nn был удалён, включая nn.load(), net.forward(), net.search() и вспомогательный nn_class. Вывод модели переходит в модуль TensorFlow Lite (tf). Скрипты, которые загружали модели .network с помощью nn, должны быть портированы на tf с моделью TensorFlow Lite.
Коммиты: fbc767b36
ImageReader / ImageWriter заменены на image.ImageIO (major)¶
image.ImageReader / image.ImageWriter и их методы next_frame() / add_frame() были удалены и заменены новым типом image.ImageIO, который поддерживает как потоки в памяти, так и файловые потоки через read() / write() / seek() / size() / close(). Код, использующий старые классы reader/writer, должен быть портирован на image.ImageIO (см. переименованные примеры imageio_read.py / imageio_write.py).
Коммиты: 783a78754
Ключевое слово scale функции fir.draw_ir() удалено (minor)¶
fir.draw_ir() была переписана поверх нового конвейера рисования изображений. Ключевое слово scale=(min, max) было удалено, а добавлены аргументы hint, x_scale, y_scale, roi и позиционные смещения x/y. Скрипты, которые передавали scale=(min, max) в fir.draw_ir(), должны убрать его и использовать новые аргументы.
Коммиты: 0a29103b1
Аппроксимация find_lines() (behavior)¶
image.find_lines() теперь аппроксимирует величину градиента как (abs(gx) + abs(gy)) / 2 и пропускает величины ниже 126. Это быстрее, но изменяет набор обнаруженных линий и значения аккумулятора, поэтому перепроверьте и перенастройте threshold / theta_margin / rho_margin.
Коммиты: 902ae3c98
fir.snapshot() переработана (behavior)¶
fir.snapshot() была существенно переработана с новым API ключевых слов (hmirror, vflip, transpose, x_scale, y_scale, x_size, y_size, scale, rgb_channel, alpha, color_palette, hint, pixformat, copy_to_fb), а встроенные примеры были переписаны. Прежнее поведение с позиционными аргументами / только pixformat изменилось; портируйте скрипты FIR на новую форму с ключевыми словами (см. обновлённые примеры для шилда thermopile).
Коммиты: 53f2248b8
fir.init() вызывает исключение при сбое (behavior)¶
fir.init() теперь вызывает исключение (и чисто деинициализируется), когда тепловой датчик не обнаружен, вместо тихого продолжения. Оберните fir.init() в try / except (или убедитесь, что датчик подключён) там, где вы ранее полагались на то, что она не вызывает исключений.
Коммиты: 4b2f972f3
Контрольный список миграции¶
Для чистого перехода на v3.9.0 типичная работа такова:
Портируйте вывод модели CMSIS-NN
nnна модуль TensorFlow Litetf(удаление nn).Замените
image.ImageReader/image.ImageWriterнаimage.ImageIO(изменение ImageIO).Уберите ключевое слово
scale=(min, max)изfir.draw_ir()и используйте новые аргументы (изменение draw_ir).Перенастройте параметры
find_lines()под приближённую метрику величины (изменение find_lines).Портируйте скрипты FIR на новый API ключевых слов
fir.snapshot()(изменение fir.snapshot) и обработайте вызов исключенияfir.init()при отсутствующем датчике (изменение fir.init).
Все остальные скрипты работают без изменений.