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-файл прошивки, на которой работает камера, чтобы наложение могло сопоставить адреса функций в записях профиля с понятными человеку именами. Без него наложение показывает необработанные адреса.
Три сочетания клавиш в окне просмотра управляют профилировщиком:
Клавиша |
Действие |
|---|---|
|
Циклически переключает наложение профилировщика: выключено, производительность, события. |
|
Переключает режим профилировщика между inclusive и exclusive. Inclusive-замер относит время вызываемой функции на вызывающую; exclusive-замер этого не делает. |
|
Сбрасывает счётчики профилировщика. |
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 и служит рабочим примером приложения, управляющего камерой от начала и до конца.