13.4.1.1. Interfejs wiersza poleceń openmv#

Instalacja pakietu dodaje program wykonywalny openmv, który otwiera podgląd pygame połączony z kamerą przez USB. Bez argumentów poza portem szeregowym uruchamia on niewielki wbudowany skrypt testowy, przesyła z powrotem powstały bufor ramki i wyświetla go przeskalowany oraz opatrzony adnotacją z bieżącą liczbą klatek na sekundę:

openmv --port /dev/ttyACM0

Ścieżka portu zależy od platformy hosta. W systemie Linux jest to /dev/ttyACMx dla USB CDC oraz /dev/ttyUSBx dla mostka USB-UART. W systemie macOS /dev/tty.usbmodem... lub /dev/cu.usbmodem.... W systemie Windows COMx.

Podgląd to najszybszy sposób na potwierdzenie, że pakiet jest zainstalowany, kamera jest osiągalna, a protokół działa. Jest to także przydatne środowisko demonstracyjne podczas tworzenia skryptów – wystarczy zastąpić wbudowany skrypt testowy dowolnym plikiem MicroPython za pomocą opcji --script i obserwować wynik bez opuszczania terminala.

Klawisz Esc, kombinacja Ctrl+C w terminalu lub zamknięcie okna podglądu kończą działanie w czysty sposób.

13.4.1.1.1. Uruchamianie własnego skryptu#

Opcja --script wskazuje interfejsowi wiersza poleceń plik źródłowy MicroPython na dysku. Plik jest przesyłany do kamery, wykonywany zamiast wbudowanego skryptu testowego, a wszelkie generowane przez niego ramki są przesyłane z powrotem do podglądu:

openmv --port /dev/ttyACM0 --script my_script.py

Wszystko, co skrypt wypisuje do stdout, jest na bieżąco odzwierciedlane w terminalu hosta. Przekaż opcję --quiet, aby to wyłączyć, lub --debug w celu szczegółowego logowania protokołu.

13.4.1.1.2. Podgląd własnego kanału#

Opcja --channel NAME odpytuje własny kanał danych zarejestrowany przez działający po stronie kamery skrypt i wypisuje pierwszych dziesięć bajtów każdej aktualizacji do terminala:

openmv --port /dev/ttyACM0 --channel ticks

Wbudowany skrypt testowy uruchamiany, gdy nie podano opcji --script, rejestruje kanał ticks zwracający czas pracy kamery w milisekundach, więc --channel ticks demonstruje dwukierunkową powierzchnię kanałów, którą szczegółowo omawia Własne kanały – bez pisania jakiegokolwiek kodu po stronie hosta czy kamery.

13.4.1.1.3. Tryb testu wydajności#

Opcja --bench zastępuje standardowy skrypt testowy testem przepustowości kompresji JPEG:

openmv --port /dev/ttyACM0 --bench

Kamera przechwytuje jedną ramkę RGB565 QVGA, kompresuje ją do formatu JPEG, a następnie w ciasnej pętli przesyła ten sam skompresowany bufor. Podgląd raportuje surową szybkość przesyłu danych USB, a nie dekodowaną ramkę na żywo, więc liczba na ekranie to górna granica, jaką łącze jest w stanie utrzymać wobec danego hosta. Przydatne do porównywania kamer lub hostów bez zmienności wynikającej ze zmiany tego, co jest faktycznie przechwytywane.

13.4.1.1.4. Profilowanie#

Interfejs wiersza poleceń może nakładać na przesyłane ramki dane profilera na żywo. Nakładka jest przydatna tylko wtedy, gdy kamera korzysta z kompilacji oprogramowania układowego z opcją PROFILE_ENABLE=1 oraz zarejestrowanym kanałem profile; w fabrycznym oprogramowaniu układowym elementy sterujące profilowaniem nie mają żadnego efektu.

  • Opcja --firmware PATH – ładuje plik ELF oprogramowania układowego, które kamera uruchamia, aby nakładka mogła rozwiązać adresy funkcji w rekordach profilu na czytelne dla człowieka nazwy. Bez niej nakładka pokazuje surowe adresy.

Trzy skróty klawiaturowe w podglądzie sterują profilerem:

Klawisz

Działanie

P

Przełącza nakładkę profilera: wyłączona, wydajność, zdarzenia.

M

Przełącza tryb profilera między inkluzywnym a ekskluzywnym. Pomiar inkluzywny zalicza czas funkcji wywoływanej do funkcji wywołującej; pomiar ekskluzywny tego nie robi.

R

Resetuje liczniki profilera.

13.4.1.1.5. Flagi strojenia protokołu#

Poniższe flagi odzwierciedlają parametry konstruktora klasy openmv.Camera. Wartości domyślne działają na każdej dostarczanej kamerze; nadpisuj je tylko podczas debugowania własnej kompilacji oprogramowania układowego lub symulowania niekorzystnych warunków łącza.

  • Opcja --baudrate N – domyślnie 921600 (magiczna wartość przełączająca USB na protokół OpenMV). Nadpisuj tylko na łączach UART.

  • Opcja --timeout SEC – limit czasu na operację w sekundach (domyślnie 1.0).

  • Opcja --max-retry N – liczba ponownych prób, zanim łącze zostanie uznane za zerwane (domyślnie 3).

  • Opcja --max-payload N – maksymalny rozmiar ładunku w bajtach (domyślnie 4096). Kamera negocjuje niższą wartość, jeśli nie jest w stanie obsłużyć takiej ilości.

  • Opcja --crc BOOL – włącza walidację CRC dla każdego pakietu (domyślnie true).

  • Opcja --seq BOOL – włącza walidację numerów sekwencyjnych (domyślnie true).

  • Opcja --ack BOOL – włącza potwierdzanie każdego pakietu (domyślnie true).

  • Opcja --events BOOL – włącza powiadomienia o zdarzeniach z kamery (domyślnie true).

  • Opcja --drop-rate FLOAT – współczynnik symulacji odrzucania pakietów w zakresie [0.0, 1.0] (domyślnie 0.0). Tylko do testów.

Jedno pokrętło strojenia specyficzne dla interfejsu wiersza poleceń:

  • Opcja --poll MS – częstotliwość odpytywania głównej pętli podglądu, w milisekundach (domyślnie 4).

13.4.1.1.6. Różne flagi#

Dwie flagi dostosowują sposób prezentacji strumienia przez podgląd bez zmiany zachowania po stronie kamery:

  • Opcja --scale N – współczynnik powiększenia wyświetlania (domyślnie 4). Przydatna, gdy ramki QVGA są zbyt małe, aby je odczytać na wyświetlaczu 4K.

  • Opcja --raw – żąda, aby kamera wysyłała bufory pikseli nieskompresowane zamiast skompresowanych do formatu JPEG. Przydatna na kamerach bez sprzętowej obsługi JPEG; Strumieniowanie ramek omawia kompromisy.

13.4.1.1.7. Co robi podgląd#

Interfejs wiersza poleceń sam jest programem openmv.Camera. Łączy się, wywołuje stop(), aby wyczyścić wszelkie działające skrypty, przesyła skrypt za pomocą exec(), włącza strumieniowanie za pomocą streaming(), a następnie w pętli wywołuje read_frame() (aby zaktualizować wyświetlacz), read_stdout() (aby odzwierciedlić wydruki skryptu) oraz read_status() (aby śledzić aktywność każdego innego zarejestrowanego kanału). Kod źródłowy znajduje się pod adresem cli.py i stanowi działający materiał referencyjny dla aplikacji sterującej kamerą od początku do końca.