12. 主機協定

每台 OpenMV 相機(cam)都隨附一個協定堆疊,將相機以一組具名資料通道的形式呈現給主機程式。主機程式可以是開發者筆記型電腦上的 Python 指令碼、桌面 GUI、UART 另一端的另一台相機,或是在工作站上監看一整批相機的服務。相機並不在意是哪一種——相同的封裝、相同的可靠性機制、相同的通道抽象,對所有這些情況都適用。

這是對相機專案離開 IDE 後不斷出現的兩個問題的解答:

  • 「我要如何把相機所見的即時畫面傳入我筆電上的自訂 GUI?」

  • 「我要如何讓操作人員在執行階段變更閾值或選取感興趣區域,而不必重新燒錄韌體?」

相機端的 protocol 模組與主機端的 openmv-python 套件回答了這兩個問題:它讓相機上的一個 Python 類別公開一個通道,主機上的 Python 類別便能從中讀取、寫入並對其上的事件做出反應,這一切都透過單一的 USB 或序列連線完成。

一台主機 PC 透過 USB 連接到相機;相機公開三個 通道——一個用於影像資料的影格通道、一個用於控制值的設定 通道,以及內建的 stdout 通道供列印之用——而主機指令碼 則對每個通道進行讀取或寫入。

本章同時教導雙方。相機端的程式碼示範如何註冊通道並餵入資料;主機端的程式碼則示範如何連線、列出通道、拉取資料並將指令推送回去。在 openmv-projects/tools/ 目錄中隨附的實際工具,所使用的正是這裡展示的模式。

總結