13.3.1.1. Interfața de linie de comandă openmv

Instalarea pachetului adaugă un executabil openmv care deschide un vizualizator pygame conectat la o cameră prin USB. Fără niciun argument în afară de portul serial, rulează un mic script de test încorporat, transmite înapoi tamponul de cadre (frame buffer) rezultat și îl afișează scalat și adnotat cu rata de cadre curentă:

openmv --port /dev/ttyACM0

Calea portului depinde de platforma gazdă. Pe Linux, /dev/ttyACMx pentru USB CDC și /dev/ttyUSBx pentru o punte USB-to-UART. Pe macOS, /dev/tty.usbmodem... sau /dev/cu.usbmodem.... Pe Windows, COMx.

Vizualizatorul este cea mai rapidă modalitate de a confirma că pachetul este instalat, că se poate ajunge la cameră și că protocolul funcționează. Este de asemenea un cadru de demonstrație util în timpul dezvoltării scripturilor – înlocuiește scriptul de test încorporat cu orice fișier MicroPython folosind --script și urmărește rezultatul fără a părăsi terminalul.

Esc, Ctrl+C în terminal sau închiderea ferestrei vizualizatorului ies toate în mod curat.

13.3.1.1.1. Rularea unui script personalizat

--script îndreaptă interfața de linie de comandă către un fișier sursă MicroPython de pe disc. Fișierul este încărcat pe cameră, executat în locul scriptului de test încorporat, iar orice cadre produse sunt transmise înapoi vizualizatorului:

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

Tot ce scrie scriptul în stdout este reflectat în timp real în terminalul gazdei. Folosește --quiet pentru a suprima acest lucru sau --debug pentru jurnalizarea detaliată a protocolului.

13.3.1.1.2. Previzualizarea unui canal personalizat

--channel NAME interoghează un canal de date personalizat înregistrat de scriptul care rulează pe cameră și afișează primii zece octeți ai fiecărei actualizări în terminal:

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

Scriptul de test încorporat care rulează atunci când nu este furnizat niciun --script înregistrează un canal ticks care returnează timpul de funcționare al camerei în milisecunde, astfel încât --channel ticks demonstrează suprafața de canal bidirecțional pe care Canale personalizate o tratează în detaliu – fără a scrie cod tu însuți nici pe gazdă, nici pe cameră.

13.3.1.1.3. Modul de evaluare comparativă (benchmark)

--bench înlocuiește scriptul de test standard cu un test de debit pentru compresia JPEG:

openmv --port /dev/ttyACM0 --bench

Camera captează un cadru RGB565 QVGA, îl comprimă în JPEG și apoi golește același tampon comprimat într-o buclă strânsă. Vizualizatorul raportează rata brută a datelor USB în loc de un cadru decodat în direct, astfel încât numărul de pe ecran este limita superioară pe care o poate susține legătura către acea gazdă. Util pentru compararea camerelor sau a gazdelor fără variabilitatea schimbării a ceea ce se captează efectiv.

13.3.1.1.4. Profilare

Interfața de linie de comandă poate suprapune date de profilare în direct peste cadrele transmise. Suprapunerea este utilă doar atunci când camera rulează o versiune de firmware PROFILE_ENABLE=1 cu canalul profile înregistrat; pe firmware-ul de serie, controalele de profilare nu au niciun efect.

  • --firmware PATH – încarcă fișierul ELF al firmware-ului pe care îl rulează camera, astfel încât suprapunerea să poată rezolva adresele de funcții din înregistrările de profil în nume care pot fi citite de om. Fără el, suprapunerea afișează adresele brute.

Trei scurtături de tastatură din vizualizator controlează profilatorul:

Tastă

Acțiune

P

Parcurge ciclic suprapunerea profilatorului: dezactivată, performanță, evenimente.

M

Comută modul profilatorului între inclusiv și exclusiv. Cronometrarea inclusivă atribuie timpul funcției apelate funcției apelante; cronometrarea exclusivă nu o face.

R

Resetează contoarele profilatorului.

13.3.1.1.5. Indicatoare de reglare a protocolului

Indicatoarele de mai jos reflectă parametrii constructorului din openmv.Camera. Valorile implicite funcționează pe fiecare cameră livrată; suprascrie-le doar atunci când depanezi o versiune de firmware personalizată sau simulezi condiții nefavorabile ale legăturii.

  • --baudrate N – implicit 921600 (valoarea magică ce comută USB la protocolul OpenMV). Suprascrie doar pe legăturile UART.

  • --timeout SEC – timeout per operațiune, în secunde (implicit 1.0).

  • --max-retry N – numărul de reîncercări înainte ca legătura să fie declarată întreruptă (implicit 3).

  • --max-payload N – dimensiunea maximă a sarcinii utile în octeți (implicit 4096). Camera negociază în jos dacă nu poate gestiona atâta.

  • --crc BOOL – activează validarea CRC pentru fiecare pachet (implicit true).

  • --seq BOOL – activează validarea numerelor de secvență (implicit true).

  • --ack BOOL – activează confirmarea per pachet (implicit true).

  • --events BOOL – activează notificările de evenimente de la cameră (implicit true).

  • --drop-rate FLOAT – rata de simulare a pierderii de pachete în [0.0, 1.0] (implicit 0.0). Doar pentru testare.

Un buton de reglare specific interfeței de linie de comandă:

  • --poll MS – rata de interogare pentru bucla principală a vizualizatorului, în milisecunde (implicit 4).

13.3.1.1.6. Indicatoare diverse

Două indicatoare ajustează modul în care vizualizatorul prezintă fluxul fără a schimba comportamentul de pe cameră:

  • --scale N – factorul de zoom al afișării (implicit 4). Util atunci când cadrele QVGA sunt prea mici pentru a fi citite pe un afișaj 4K.

  • --raw – solicită camerei să trimită tampoanele de pixeli necomprimate în loc de comprimate JPEG. Util pe camerele fără suport JPEG hardware; Transmiterea în flux a cadrelor tratează compromisurile.

13.3.1.1.7. Ce face vizualizatorul

Interfața de linie de comandă este ea însăși un program openmv.Camera. Se conectează, apelează stop() pentru a șterge orice script care rulează, încarcă scriptul cu exec(), activează transmisia cu streaming(), apoi rulează în buclă apelând read_frame() (pentru a actualiza afișajul), read_stdout() (pentru a reflecta tipăririle scriptului) și read_status() (pentru a urmări activitatea fiecărui alt canal înregistrat). Sursa se află la cli.py și este o referință funcțională pentru o aplicație care controlează o cameră de la un capăt la altul.