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