13.3.1.1. openmv CLI

安裝此套件會新增一個 openmv 可執行檔,它會開啟一個透過 USB 連接到相機的 pygame 檢視器。若在序列埠之後不帶任何引數,它會執行一個內建的小型測試指令碼,將產生的影格緩衝區串流回主機,並以縮放後的畫面顯示,同時標註當前的影格率:

openmv --port /dev/ttyACM0

埠路徑取決於主機平台。在 Linux 上,USB CDC 為 /dev/ttyACMx,USB 轉 UART 橋接器則為 /dev/ttyUSBx。在 macOS 上為 /dev/tty.usbmodem.../dev/cu.usbmodem...。在 Windows 上則為 COMx

檢視器是確認套件已安裝、相機可連線且通訊協定正常運作最快速的方式。它在指令碼開發過程中也是一個實用的示範框架——只要用 --script 將內建測試指令碼換成任何 MicroPython 檔案,就能在不離開終端機的情況下觀看結果。

在終端機中按 EscCtrl+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 會輪詢由執行中相機端指令碼註冊的自訂資料頻道,並將每次更新的前十個位元組列印到終端機:

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

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 程式。它會連線,呼叫 stop() 清除任何執行中的指令碼,用 exec() 上傳指令碼,用 streaming() 啟用串流,接著迴圈呼叫 read_frame()(更新顯示)、read_stdout()(鏡像指令碼的輸出)以及 read_status()(監看其他每一個已註冊頻道的活動)。原始碼位於 cli.py,是一個完整端到端驅動相機之應用程式的可運作參考範例。