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/ 目录中附带的真实工具正是使用此处展示的这些模式。