12. 호스트 프로토콜#

모든 OpenMV 캠에는 카메라를 명명된 데이터 채널 집합으로서 호스트 프로그램에 노출하는 프로토콜 스택이 함께 제공됩니다. 호스트 프로그램은 개발자 노트북의 Python 스크립트일 수도, 데스크톱 GUI일 수도, UART 반대편의 또 다른 캠일 수도, 카메라 무리를 감시하는 워크스테이션에서 실행되는 서비스일 수도 있습니다. 캠은 어느 것인지 신경 쓰지 않습니다 – 동일한 프레이밍, 동일한 신뢰성 메커니즘, 동일한 채널 추상화가 그 모두에 적용됩니다.

이것은 캠 프로젝트가 IDE를 벗어나면 끊임없이 떠오르는 두 가지 질문에 대한 답입니다:

  • “캠이 보는 것의 라이브 화면을 내 노트북의 사용자 정의 GUI로 어떻게 가져올까?”

  • “재플래시 없이, 운영자가 런타임에 임계값을 바꾸거나 관심 영역을 선택하게 하려면 어떻게 할까?”

캠 측의 protocol 모듈과 호스트 측의 openmv-python 패키지가 두 질문 모두에 답합니다. 이들은 캠의 Python 클래스가 채널 을 노출하게 하여, 호스트의 Python 클래스가 단일 USB 또는 시리얼 연결을 통해 그 채널을 읽고, 쓰고, 이벤트에 반응할 수 있게 합니다.

A host PC connects to a cam over USB; the cam exposes three channels -- a frame channel for image data, a config channel for control values, and the built-in stdout channel for prints -- and the host script reads or writes each.

이 장에서는 양쪽을 모두 다룹니다. 캠 측 코드는 채널을 등록하고 거기에 데이터를 공급하는 방법을 보여주고, 호스트 측 코드는 연결하고, 채널 목록을 가져오고, 데이터를 끌어오고, 명령을 되돌려 보내는 방법을 보여줍니다. openmv-projects/tools/ 디렉터리에 포함되어 제공되는 실제 도구들은 여기에서 보여주는 패턴을 그대로 사용합니다.

하지만 호스트 코드가 전혀 필요 없는 경우가 많습니다. OpenMV IDE 자체가 호스트입니다. 이름 붙은 판독값과 컨트롤의 protocol.CBORChannel을 등록하면 IDE의 채널 뷰가 이를 레이블, 스위치, 슬라이더, 그래프, 깊이 맵으로 실시간 표시하고, 운영자의 변경을 스크립트로 되돌려 보냅니다. CBORChannel을 이용한 위젯과 원격 측정가 그 빠른 경로이며, 이 장의 나머지는 프로젝트에 자체 호스트가 필요할 때를 위한, 그 기반이 되는 내용입니다.