v5.1.0#

v5.1.0 – это выпуск с новыми возможностями. Панель под буфером кадра вырастает из гистограммы в набор живых представлений – Board Info, Memory, Statistics и новое представление Channels, которое превращает значения, публикуемые скриптом, в виджеты, графики, спектры и карты глубины и записывает их в файлы, – буфер кадра получает селектор источника для камер с несколькими датчиками, IDE учится загружать сторонние репозитории плат, прошивок, примеров, моделей и заглушек, а видеозаписи переходят на H.264. Поддерживаются новые платы и датчики, инструменты прошивки были укреплены полным аудитом каждого изменения после v5.0.0, а несколько поведений были перенесены из OpenMV Studio. Он построен на Qt Creator 14.0.2 и содержит прошивку v5.0.1.

Основные изменения#

  • Представления панели – заголовок панели гистограммы получает селектор, переключающий панель между представлениями Histogram, Board Info (оборудование, версии и возможности подключённой камеры), Memory (живые графики кучи MicroPython и каждого пула UMA, с отслеживанием пиков), Statistics (счётчики пакетов, ошибок и событий по каналам протокола отладки) и Channels.

  • Представление Channels – скрипт может публиковать именованные каналы данных и элементов управления по протоколу отладки, а IDE отображает их в реальном времени: метки, переключатели, ползунки, счётчики, радиокнопки, поля ввода, селекторы, кнопки и текстовые блоки, которые записывают изменения обратно на камеру; графики осциллограмм с панорамированием, масштабированием, маркерами, триггерами, историей и анализатором спектра; и карты глубины с собственными палитрами камеры, тремя фильтрами масштабирования и тональным отображением. Любой график или карта записывается в файлы CSV, WAV, NumPy или Edge Impulse JSON и CBOR – включая Record All для целого канала – для сбора обучающих данных. Последние значения остаются на экране, когда скрипт останавливается.

  • Селектор источника буфера кадра – камеры с более чем одним датчиком изображения показывают в заголовке буфера кадра селектор для выбора того, какой датчик транслируется в IDE (или для выключения трансляции), переключатель JPG стал селектором режима потоковой передачи JPG / RAW, а заголовок панели называет формат, в котором пришёл каждый кадр.

  • Сторонние репозитории – поставщик может опубликовать репозиторий плат, прошивок (каналы релизов и разработки), примеров, моделей машинного обучения и заглушек .pyi; IDE устанавливает его по URL или из папки, оставленной установщиком, объединяет с собственным содержимым, поддерживает в актуальном состоянии и позволяет упорядочивать поставщиков по приоритету. Управляется из Preferences → OpenMV → Third Party Repositories.

  • Новое оборудование – плата OpenMV N6 Classic (включая драйвер её загрузчика, правило udev и запись восстановления ROM-DFU) и датчики FLIR Lepton 3.1R и UW.

  • Записи H.264 – рекордер буфера кадра и конвертер видео теперь кодируют H.264 вместо MPEG-4 Part 2, с фиксированным интервалом ключевых кадров, чтобы по записям можно было чисто перематывать, и частотой кадров, округлённой до целого числа.

  • Исправления по итогам аудита – каждый коммит после v5.0.0 был дважды проверен на регрессии, с особым вниманием к путям прошивки, загрузчика и ROMFS; найденные дефекты исправлены в этом выпуске (см. исправления ошибок).

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

  • Представления Board Info, Memory и Statistics в панели гистограммы, с оформлением во всю ширину в тёмной и светлой темах и выделяемым текстом (cdea506655b, 7629a588db9, e21bd94a395, b55dcc412f6, fc744920011, e7dc3bf0092, 448e21db0bd).

  • Представление Channels – полный набор элементов управления (label, toggle, slider, spin box, radio, line edit, select, push button, text), графики осциллограмм с анализатором спектра (окна Ханна, Хэмминга, Блэкмана и прямоугольное, усреднение, удержание пика, логарифмическая частота), триггеры по переднему и заднему фронту, маркеры, история и экспорт графика; карты глубины с палитрами Depth, Rainbow, Ironbow и Event, масштабированием nearest / bilinear / bicubic, тональным отображением Script Range / Auto Range / Equalize, кнопкой паузы, показаниями при наведении, заголовком с объявленным диапазоном и минимумом / максимумом / средним кадра и Save Image; запись в CSV, WAV, NumPy и Edge Impulse JSON / CBOR с необязательной меткой Edge Impulse, разбиением длинных захватов на части и Record All; интервал Channel Polling в настройках протокола (5b4f31a6b3a, d1252a24f14, bfd7fd72f94, d1c2ab02a5f, 4808b8ffe26, dfc323b4ec7, 61c077df9a5, 8c2cd6cf1f1, 1534225fcee).

  • Селектор источника буфера кадра и индикатор формата – выбор датчика для потоковой передачи на камерах с несколькими датчиками, либо Off; полученный формат кадра показывается в заголовке панели; переключатель JPG теперь является селектором JPG Mode / RAW Mode (e76284bde9e, c2baff8d60c, afece31cb6a, 76448d7b9dd).

  • Сторонние репозитории – файловые репозитории прошивок, объединяемые со встроенным списком плат, сетевые обновления со страницей в Preferences, канал прошивки для разработки для каждого поставщика, управляемый пользователем приоритет поставщиков, примеры поставщиков, объединяемые в File → Examples, модели поставщиков, объединяемые в Model Zoo, пользовательские заглушки .pyi, передаваемые автодополнению кода, предупреждения о переопределении, когда поставщик затеняет встроенное содержимое, и проверка лицензии для плат поставщиков (21a63a74949, b5512efe949, b15afdac479, 1fe693f0b61, ae11ffeffc4, cf47a37ba65, 100bdeb530b, 252924901f7, c75a81f2a4a, 3e7f077a738, 5c5aa3e657c, e3f36adbdcb, b04da8ee888).

  • Удаление комментариев перед запуском – комментарии удаляются из скрипта перед отправкой на камеру, что экономит RAM камеры на скриптах с большим числом комментариев; строки сохраняются, поэтому номера строк в трассировке по-прежнему совпадают с редактором (677546ee033).

  • Встроенная отметка ошибки – когда скрипт завершается исключением, редактор помечает проблемную строку красным с текстом ошибки рядом; отметка снимается, когда вы редактируете файл, запускаете скрипт снова или отключаетесь (677546ee033).

  • Перетаскивание в редактор ROMFS – файлы, перетащенные с рабочего стола, проходят ту же компиляцию скриптов и преобразование моделей, что и Add File, в папку, на которую они были брошены (677546ee033).

Улучшения редактора, терминала и интерфейса#

  • Гистограммы вычисляются из полного 8-битного RGB вместо таблиц RGB565 камеры, с общей палитрой графиков, полупрозрачными заливками и более тусклыми линиями сетки (238e099373e, f126e8f34c0, cebbf0c9e2c).

  • Скрытые представления панели не выполняют работу – гистограмма пропускает вычисления и перерисовку, пока показывается другое представление или панель свёрнута, и навёрстывает упущенное при повторном показе; перерисовки нулевого размера подавлены (c8730df8399).

  • Примеры скриптов открываются с пустой строкой после импортов, и входящие в комплект примеры были переформатированы таким же образом (1f88f617ec5, 87c8f7d41c7).

  • Автодополнение кода показывает приватные имена – встроенный языковой сервер больше не отфильтровывает члены с префиксом _, которые используют модули камеры (23ab5b38bb3).

  • macOS – группы элементов управления протоколом в настройках больше не сжаты, представления элементов защищены от сбоев специальных возможностей Cocoa, пользователи Apple Silicon предупреждаются о параметре безопасности «Allow accessories to connect», а пользователи RT1062 – когда не выдано разрешение Input Monitoring (оно нужно для обновлений прошивки); оба предупреждения показываются после подключения (7d7b69367bf, 69fe7ffc913, 742cb4d8c0b, 8890eb77834, 89646292e8d).

  • Сочетания клавиш режима просмотрщика – лишние сочетания клавиш, ломавшие режим просмотрщика (и обычную IDE), отключены, а режим просмотрщика больше не сохраняет свои очищенные сочетания в настройки полной IDE (251b422f642, 0d153671c1d).

  • Неизвестные датчики именуются по идентификатору чипа в строке состояния, чтобы их можно было опознать и добавить в таблицу датчиков (df561775b54).

Прошивка, платы и инструменты#

  • Поддержка OpenMV N6 Classic: запись платы, драйвер DFU для Windows и коды установщика, правило udev для Linux (4ff4a1f239d, bdd6c96ef47, 25fcdc13c6a, 7730b699f60).

  • Поддержка датчиков FLIR Lepton 3.1R и UW (12c03024f3c).

  • Передача управления загрузчику IMX – заранее взведённый перехватчик захватывает загрузчик RT1062 в момент его перечисления, заменяя цикл запуска процесса на каждую пробу, который мог пропустить односекундное окно на загруженном хосте (3d8b63c6859).

  • Zip-архивы прошивки – Load Custom Firmware принимает архивы только с romfs и архивы без ROMFS, а пользовательская прошивка или прошивка для разработки подготавливается для плат IMX, уже находящихся в режиме загрузчика (b6f16f54c1a, 94d5fd5c30e).

  • Закрытые каталоги подготовки для прошивки для разработки / пользовательской прошивки, образов редактора ROMFS и временных файлов инструментов для видео, чтобы устаревшие файлы других процессов никогда не могли быть прошиты или преобразованы по ошибке (939154501af, a288fe712e7, 5c8c717adec).

  • Видео H.264 – записи и преобразования кодируются в H.264 с фиксированным интервалом ключевых кадров; частота кадров записи, близкая к целому числу, округляется до него, чтобы проигрыватели сообщали 30 FPS, а не 29,97 (6ad1968341d, d62c110e155, bab488a54fe).

  • Контрольная сумма zip-архива ресурсов – обновление ресурсов IDE проверяется по SHA-256, публикуемой вместе с версией (677546ee033).

  • Честный User-Agent в запросах к серверам OpenMV (c4279c0213e).

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

Два прохода проверки каждого изменения после v5.0.0 нашли и исправили следующее (ccea3b17d01, 71826200611):

  • Пути прошивки и загрузчика – zip-архив Load Custom Firmware для платы, уже находящейся в режиме загрузчика, вместо этого прошивал релизную сборку; путь восстановления Alif теперь отказывается от пользовательской сборки, а не прошивает релиз; «окирпиченная» N6 Classic восстанавливалась обычным загрузчиком и прошивкой N6; устаревший корень сторонних ресурсов мог направить «окирпиченную» встроенную плату к файлам поставщика; перехватчик IMX мог перейти к прошивке после собственного сбоя, игнорировал Cancel во время ожидания flashloader и оставлял последовательный порт открытым после отмены во время взведения; у загрузчика N6 Classic не было правила udev; в допустимых кодах выхода установщика драйверов Windows была опечатка.

  • Редактор ROMFS – Cancel во время чтения ROMFS сообщал «Failed to unpack ROMFS!» и ждал десять секунд камеру, всё ещё находящуюся в загрузчике; Cancel во время записи молча завершался с, возможно, частичной ROMFS; ошибка dfu-util во время записи сообщалась как успех; Cancel в последующем диалоге отбрасывал все правки; Auto Reconnect мог подключиться под открытым редактором; Edit ROMFS при подключённой камере без нужды сначала отключался и переподключался; временные каталоги конвертера утекали. После отменённой операции загрузчику теперь предлагается выйти из DFU, чтобы камера вернулась сама.

  • Сторонние репозитории – записи zip-архива проверяются перед извлечением (без обхода путей и символических ссылок), установки и переустановки частей сохраняют старую копию, пока новая не будет на месте, отклонённая плата поставщика больше не утягивает за собой встроенную плату, с которой пересекалась, отсутствующая маска PID ничему не соответствовала во время выполнения, а строки базового индекса примеров / моделей больше не захватывают одноимённые файлы поставщиков.

  • Буфер кадра и датчики – событийный датчик GENX320 (идентификатор чипа выше 0x80000000) отключал буфер кадра; сохранённый выбор датчика не переживал перезапуск; старая настройка «disable frame buffer» не переносилась; команда источника потока ограничена версией протокола; метрика фокусировки застывала, пока страница гистограммы была скрыта; формат кадра оставался в заголовке после отключения.

  • Процесс подключения – предупреждения macOS могли проглотить «Yes» в запросе на обновление прошивки; Model Zoo всегда открывался свёрнутым без восстановления выбора; резервный вариант с единственным диском для диска камеры был недостижим, когда камера была подключена более десяти секунд.

  • Представление Channels и рекордер – враждебные размеры кадров могли переполнить проверки размера; рекордеры Edge Impulse перевыделяли память на каждом фрагменте и теперь ограничены 64 МБ на часть; схема с разделителями в именах могла индексировать за пределы списка записей; дублирующиеся записи оставляли работающий рекордер без владельца; записи отбрасываются, пока представление заморожено; список каналов теперь обновляется при событиях отмены регистрации и мягкой перезагрузки.

  • Видео – нечётная введённая пользователем ширина ломала кодирование H.264 в сборках с libx264; отменённые или неудавшиеся преобразования .bin оставляли кадры, которые следующий запуск подмешивал к результату.

  • Протокол – сброс чтения, выполняемый перед определением протокола, ограничен (задача #336) (77cd13af76f); привязка диска камеры больше не проигрывает гонку другим томам (9877480c304).

  • Предупреждение -Wdeprecated-copy в обёртке сведений о последовательном порте (abcfaa8af5e).

Локализация#

  • Все 37 каталогов обновлены для представлений панели, представления Channels и его карты глубины и каждой новой строки в этом выпуске (1b71f243733, dc13c23ed81, a7debafdafa, 173a57422f7).

Поддержка платформ и инструментов#

  • Основа Qt Creator: 14.0.2.

  • Версия OpenMV IDE повышена до 5.1.0.

  • Входящая в комплект прошивка: v5.0.1 (см. журнал изменений прошивки).

  • Новые платы и датчики: OpenMV N6 Classic; FLIR Lepton 3.1R и UW.

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

Отсутствуют для существующих проектов. Переключатель JPG в заголовке буфера кадра теперь является селектором JPG Mode / RAW Mode, а его старая настройка «disable frame buffer» переносится в запись Off нового селектора источника. Комментарии удаляются из скриптов перед запуском; скрипт, который полагается на чтение собственного исходного текста во время выполнения, не должен этого делать.