13.3.1.1. Das openmv-CLI¶
Bei der Installation des Pakets wird ein ausführbares Programm openmv hinzugefügt, das einen pygame-Viewer öffnet, der über USB mit einer Kamera verbunden ist. Ohne weitere Argumente nach dem seriellen Port führt es ein kleines integriertes Testskript aus, streamt den daraus resultierenden Framebuffer zurück und zeigt ihn skaliert und mit der aktuellen Bildrate beschriftet an:
openmv --port /dev/ttyACM0
Der Pfad des Ports hängt von der Host-Plattform ab. Unter Linux ist es /dev/ttyACMx für USB CDC und /dev/ttyUSBx für eine USB-zu-UART-Brücke. Unter macOS /dev/tty.usbmodem... oder /dev/cu.usbmodem.... Unter Windows COMx.
Der Viewer ist der schnellste Weg, um zu bestätigen, dass das Paket installiert ist, die Kamera erreichbar ist und das Protokoll funktioniert. Er ist außerdem ein nützliches Demo-Werkzeug während der Skriptentwicklung – ersetzen Sie das integrierte Testskript mit --script durch eine beliebige MicroPython-Datei und beobachten Sie das Ergebnis, ohne das Terminal zu verlassen.
Mit Esc, Ctrl+C im Terminal oder dem Schließen des Viewer-Fensters wird das Programm sauber beendet.
13.3.1.1.1. Ein benutzerdefiniertes Skript ausführen¶
--script weist das CLI auf eine MicroPython-Quelldatei auf der Festplatte hin. Die Datei wird auf die Kamera hochgeladen, anstelle des integrierten Testskripts ausgeführt, und alle Einzelbilder, die sie erzeugt, werden zum Viewer zurückgestreamt:
openmv --port /dev/ttyACM0 --script my_script.py
Alles, was das Skript auf stdout ausgibt, wird in Echtzeit auf das Host-Terminal gespiegelt. Übergeben Sie --quiet, um dies zu unterdrücken, oder --debug für ausführliche Protokollprotokollierung.
13.3.1.1.2. Vorschau eines benutzerdefinierten Kanals¶
--channel NAME fragt einen benutzerdefinierten Datenkanal ab, der vom laufenden kameraseitigen Skript registriert wurde, und gibt die ersten zehn Bytes jeder Aktualisierung im Terminal aus:
openmv --port /dev/ttyACM0 --channel ticks
Das integrierte Testskript, das ausgeführt wird, wenn kein --script angegeben ist, registriert einen ticks-Kanal, der die Betriebszeit der Kamera in Millisekunden zurückgibt. So demonstriert --channel ticks die bidirektionale Kanaloberfläche, die Benutzerdefinierte Kanäle ausführlich behandelt – ohne dass Sie selbst Code auf dem Host oder der Kamera schreiben müssen.
13.3.1.1.3. Benchmark-Modus¶
--bench ersetzt das Standard-Testskript durch einen Durchsatz-Benchmark für die JPEG-Komprimierung:
openmv --port /dev/ttyACM0 --bench
Die Kamera nimmt ein RGB565-QVGA-Einzelbild auf, komprimiert es zu JPEG und leert dann denselben komprimierten Puffer in einer engen Schleife. Der Viewer meldet die reine USB-Datenrate statt eines live dekodierten Einzelbilds, sodass die Zahl auf dem Bildschirm die Obergrenze ist, die die Verbindung zu diesem Host aufrechterhalten kann. Nützlich zum Vergleichen von Kameras oder Hosts, ohne die Variabilität durch eine Änderung dessen, was tatsächlich aufgenommen wird.
13.3.1.1.4. Profiling¶
Das CLI kann Live-Profiler-Daten über die gestreamten Einzelbilder legen. Das Overlay ist nur nützlich, wenn die Kamera einen Firmware-Build mit PROFILE_ENABLE=1 und registriertem profile-Kanal ausführt; bei der Standard-Firmware haben die Profiling-Steuerelemente keine Wirkung.
--firmware PATH– lädt die Firmware-ELF, die die Kamera ausführt, damit das Overlay die Funktionsadressen in den Profil-Datensätzen in menschenlesbare Namen auflösen kann. Ohne sie zeigt das Overlay rohe Adressen an.
Drei Tastenkombinationen im Viewer steuern den Profiler:
Taste |
Aktion |
|---|---|
|
Wechselt das Profiler-Overlay durch: aus, Leistung, Ereignisse. |
|
Schaltet den Profiler-Modus zwischen inklusiv und exklusiv um. Bei inklusiver Zeitmessung wird die Zeit des Aufgerufenen dem Aufrufer angerechnet; bei exklusiver Zeitmessung nicht. |
|
Setzt die Profiler-Zähler zurück. |
13.3.1.1.5. Flags zur Protokoll-Feinabstimmung¶
Die folgenden Flags spiegeln die Konstruktorparameter von openmv.Camera wider. Die Standardwerte funktionieren bei jeder ausgelieferten Kamera; überschreiben Sie sie nur beim Debuggen eines benutzerdefinierten Firmware-Builds oder zum Simulieren ungünstiger Verbindungsbedingungen.
--baudrate N– Standardwert ist921600(der magische Wert, der USB auf das OpenMV-Protokoll umstellt). Überschreiben Sie ihn nur bei UART-Verbindungen.--timeout SEC– Timeout pro Vorgang in Sekunden (Standard1.0).--max-retry N– Wiederholungsversuche, bevor die Verbindung als unterbrochen erklärt wird (Standard3).--max-payload N– maximale Nutzdatengröße in Bytes (Standard4096). Die Kamera handelt einen niedrigeren Wert aus, wenn sie so viel nicht verarbeiten kann.--crc BOOL– aktiviert die CRC-Validierung bei jedem Paket (Standardtrue).--seq BOOL– aktiviert die Validierung der Sequenznummern (Standardtrue).--ack BOOL– aktiviert die Bestätigung pro Paket (Standardtrue).--events BOOL– aktiviert Ereignisbenachrichtigungen von der Kamera (Standardtrue).--drop-rate FLOAT– Simulationsrate für Paketverluste im Bereich[0.0, 1.0](Standard0.0). Nur zu Testzwecken.
Ein CLI-spezifischer Feinabstimmungsregler:
--poll MS– Abfragerate für die Hauptschleife des Viewers in Millisekunden (Standard4).
13.3.1.1.6. Verschiedene Flags¶
Zwei Flags passen an, wie der Viewer den Stream darstellt, ohne das kameraseitige Verhalten zu ändern:
--scale N– Anzeige-Zoomfaktor (Standard4). Nützlich, wenn QVGA-Einzelbilder zu klein sind, um sie auf einem 4K-Display zu lesen.--raw– fordert die Kamera auf, Pixelpuffer unkomprimiert statt JPEG-komprimiert zu senden. Nützlich bei Kameras ohne Hardware-JPEG-Unterstützung; Einzelbilder streamen behandelt die Kompromisse.
13.3.1.1.7. Was der Viewer tut¶
Das CLI ist selbst ein openmv.Camera-Programm. Es stellt eine Verbindung her, ruft stop() auf, um ein laufendes Skript zu beenden, lädt das Skript mit exec() hoch, aktiviert das Streaming mit streaming() und ruft dann in einer Schleife read_frame() (um die Anzeige zu aktualisieren), read_stdout() (um die Ausgaben des Skripts zu spiegeln) und read_status() (um jeden anderen registrierten Kanal auf Aktivität zu überwachen) auf. Der Quellcode befindet sich unter cli.py und ist eine funktionierende Referenz für eine Anwendung, die eine Kamera von Anfang bis Ende ansteuert.