13.3.1.1. CLI openmv

Установка пакета добавляет исполняемый файл openmv, который открывает окно просмотра на pygame, подключённое к камере по USB. Если после последовательного порта не передано никаких аргументов, запускается небольшой встроенный тестовый скрипт, полученный буфер кадра передаётся обратно и отображается с масштабированием и аннотацией текущей частоты кадров:

openmv --port /dev/ttyACM0

Путь к порту зависит от хост-платформы. В Linux это /dev/ttyACMx для USB CDC и /dev/ttyUSBx для моста USB-to-UART. В macOS это /dev/tty.usbmodem... или /dev/cu.usbmodem.... В Windows это COMx.

Окно просмотра – это самый быстрый способ убедиться, что пакет установлен, камера доступна, а протокол работает. Оно также служит удобной демонстрационной оснасткой при разработке скриптов: замените встроенный тестовый скрипт любым файлом MicroPython с помощью --script и наблюдайте результат, не покидая терминал.

Нажатие Esc, Ctrl+C в терминале или закрытие окна просмотра – все эти действия завершают работу корректно.

13.3.1.1.1. Запуск пользовательского скрипта

--script указывает CLI на файл с исходным кодом MicroPython на диске. Файл загружается в камеру, выполняется вместо встроенного тестового скрипта, и все производимые им кадры передаются обратно в окно просмотра:

openmv --port /dev/ttyACM0 --script my_script.py

Всё, что скрипт выводит в stdout, в реальном времени зеркалируется в хост-терминал. Передайте --quiet, чтобы это подавить, или --debug для подробного протоколирования.

13.3.1.1.2. Предпросмотр пользовательского канала

--channel NAME опрашивает пользовательский канал данных, зарегистрированный работающим скриптом на стороне камеры, и выводит первые десять байт каждого обновления в терминал:

openmv --port /dev/ttyACM0 --channel ticks

Встроенный тестовый скрипт, который запускается, когда --script не задан, регистрирует канал ticks, возвращающий время работы камеры в миллисекундах, поэтому --channel ticks демонстрирует двунаправленный интерфейс каналов, который подробно рассматривается в Пользовательские каналы – без написания какого-либо кода на хосте или камере самостоятельно.

13.3.1.1.3. Режим бенчмарка

--bench заменяет стандартный тестовый скрипт бенчмарком пропускной способности JPEG-сжатия:

openmv --port /dev/ttyACM0 --bench

Камера захватывает один кадр RGB565 QVGA, сжимает его в JPEG, а затем сбрасывает тот же сжатый буфер в плотном цикле. Окно просмотра сообщает скорость передачи необработанных данных по USB, а не живой декодированный кадр, поэтому число на экране – это верхняя граница, которую канал способен поддерживать к данному хосту. Полезно для сравнения камер или хостов без вариативности, вносимой изменением того, что фактически захватывается.

13.3.1.1.4. Профилирование

CLI может накладывать данные живого профилировщика на передаваемые кадры. Наложение полезно только тогда, когда камера работает на сборке прошивки с PROFILE_ENABLE=1 и зарегистрированным каналом profile; на штатной прошивке элементы управления профилированием не оказывают никакого эффекта.

  • --firmware PATH – загружает ELF-файл прошивки, на которой работает камера, чтобы наложение могло сопоставить адреса функций в записях профиля с понятными человеку именами. Без него наложение показывает необработанные адреса.

Три сочетания клавиш в окне просмотра управляют профилировщиком:

Клавиша

Действие

P

Циклически переключает наложение профилировщика: выключено, производительность, события.

M

Переключает режим профилировщика между inclusive и exclusive. Inclusive-замер относит время вызываемой функции на вызывающую; exclusive-замер этого не делает.

R

Сбрасывает счётчики профилировщика.

13.3.1.1.5. Флаги настройки протокола

Приведённые ниже флаги отражают параметры конструктора openmv.Camera. Значения по умолчанию работают на каждой поставляемой камере; переопределяйте их только при отладке пользовательской сборки прошивки или симуляции неблагоприятных условий канала.

  • --baudrate N – по умолчанию 921600 (магическое значение, переключающее USB на протокол OpenMV). Переопределяйте только для UART-каналов.

  • --timeout SEC – таймаут на операцию в секундах (по умолчанию 1.0).

  • --max-retry N – число повторов, прежде чем канал будет объявлен неработающим (по умолчанию 3).

  • --max-payload N – максимальный размер полезной нагрузки в байтах (по умолчанию 4096). Камера снижает это значение при согласовании, если не может обработать столько.

  • --crc BOOL – включает проверку CRC для каждого пакета (по умолчанию true).

  • --seq BOOL – включает проверку порядковых номеров (по умолчанию true).

  • --ack BOOL – включает подтверждение каждого пакета (по умолчанию true).

  • --events BOOL – включает уведомления о событиях от камеры (по умолчанию true).

  • --drop-rate FLOAT – частота симуляции потери пакетов в диапазоне [0.0, 1.0] (по умолчанию 0.0). Только для тестирования.

Одна настройка, специфичная для CLI:

  • --poll MS – частота опроса основного цикла окна просмотра в миллисекундах (по умолчанию 4).

13.3.1.1.6. Прочие флаги

Два флага меняют то, как окно просмотра отображает поток, не изменяя поведение на стороне камеры:

  • --scale N – коэффициент масштабирования отображения (по умолчанию 4). Полезен, когда кадры QVGA слишком малы для чтения на дисплее 4K.

  • --raw – запрашивает у камеры отправку буферов пикселей в несжатом виде вместо JPEG-сжатия. Полезен на камерах без аппаратной поддержки JPEG; компромиссы рассматриваются в Потоковая передача кадров.

13.3.1.1.7. Что делает окно просмотра

CLI сам по себе является программой на openmv.Camera. Он подключается, вызывает stop(), чтобы очистить любой работающий скрипт, загружает скрипт с помощью exec(), включает потоковую передачу через streaming(), а затем в цикле вызывает read_frame() (для обновления изображения), read_stdout() (для зеркалирования вывода скрипта) и read_status() (для отслеживания активности на каждом другом зарегистрированном канале). Исходный код находится в cli.py и служит рабочим примером приложения, управляющего камерой от начала и до конца.