13.4.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.4.1.1.1. Запуск пользовательского скрипта#

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

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

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

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

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

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

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

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

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

openmv --port /dev/ttyACM0 --bench

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

13.4.1.1.4. Профилирование#

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

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

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

Клавиша

Действие

P

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

M

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

R

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

13.4.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.4.1.1.6. Прочие флаги#

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

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

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

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

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