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 |
|---|---|
| Przełącza nakładkę profilera: wyłączona, wydajność, zdarzenia. |
| 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. |
| 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ślnie921600(magiczna wartość przełączająca USB na protokół OpenMV). Nadpisuj tylko na łączach UART.Opcja
--timeout SEC– limit czasu na operację w sekundach (domyślnie1.0).Opcja
--max-retry N– liczba ponownych prób, zanim łącze zostanie uznane za zerwane (domyślnie3).Opcja
--max-payload N– maksymalny rozmiar ładunku w bajtach (domyślnie4096). 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ślnietrue).Opcja
--seq BOOL– włącza walidację numerów sekwencyjnych (domyślnietrue).Opcja
--ack BOOL– włącza potwierdzanie każdego pakietu (domyślnietrue).Opcja
--events BOOL– włącza powiadomienia o zdarzeniach z kamery (domyślnietrue).Opcja
--drop-rate FLOAT– współczynnik symulacji odrzucania pakietów w zakresie[0.0, 1.0](domyślnie0.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ślnie4).
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ślnie4). 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.