13.3.1.1. openmv CLI

패키지를 설치하면 USB를 통해 카메라에 연결된 pygame 뷰어를 여는 openmv 실행 파일이 추가됩니다. 시리얼 포트 외에 인자를 지정하지 않으면 작은 내장 테스트 스크립트를 실행하고 결과 프레임 버퍼를 다시 스트리밍하며, 이를 확대하여 현재 프레임 레이트와 함께 주석을 달아 표시합니다:

openmv --port /dev/ttyACM0

포트 경로는 호스트 플랫폼에 따라 다릅니다. Linux에서는 USB CDC의 경우 /dev/ttyACMx, USB-to-UART 브리지의 경우 /dev/ttyUSBx입니다. macOS에서는 /dev/tty.usbmodem... 또는 /dev/cu.usbmodem...입니다. Windows에서는 COMx입니다.

뷰어는 패키지가 설치되었는지, 카메라에 접근 가능한지, 프로토콜이 작동하는지 확인하는 가장 빠른 방법입니다. 또한 스크립트 개발 중에 유용한 데모 도구이기도 합니다. --script로 내장 테스트 스크립트를 임의의 MicroPython 파일로 교체하면 터미널을 벗어나지 않고도 결과를 확인할 수 있습니다.

터미널에서 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은 실행 중인 카메라 측 스크립트가 등록한 커스텀 데이터 채널을 폴링하고 각 업데이트의 처음 10바이트를 터미널에 출력합니다:

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 채널이 등록된 PROFILE_ENABLE=1 펌웨어 빌드를 실행 중일 때만 유용합니다. 기본 펌웨어에서는 프로파일링 컨트롤이 아무런 효과가 없습니다.

  • --firmware PATH – 카메라가 실행 중인 펌웨어 ELF를 로드하여 오버레이가 프로파일 레코드의 함수 주소를 사람이 읽을 수 있는 이름으로 변환할 수 있도록 합니다. 이 옵션이 없으면 오버레이는 원시 주소를 표시합니다.

뷰어의 세 가지 키보드 단축키로 프로파일러를 제어합니다:

동작

P

프로파일러 오버레이를 순환합니다: 끄기, 성능, 이벤트.

M

프로파일러 모드를 inclusiveexclusive 사이에서 토글합니다. 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 프로그램입니다. CLI는 연결한 뒤 stop() 을 호출하여 실행 중인 스크립트를 모두 정리하고, exec() 으로 스크립트를 업로드하며, streaming() 으로 스트리밍을 활성화한 다음, read_frame() (디스플레이 갱신), read_stdout() (스크립트의 출력 미러링), read_status() (등록된 다른 모든 채널의 활동 감시)를 호출하는 루프를 반복합니다. 소스 코드는 cli.py 에 있으며, 카메라를 처음부터 끝까지 구동하는 애플리케이션에 대한 실용적인 참고 자료입니다.