13.3.1.1. واجهة سطر الأوامر openmv

تثبيت الحزمة يضيف ملفًا تنفيذيًا باسم openmv يفتح عارض pygame متصلًا بالكاميرا عبر USB. وبدون أي وسائط بعد منفذ الاتصال التسلسلي، يُشغّل برنامجًا نصيًا اختباريًا صغيرًا مدمجًا، ويبثّ مخزن الإطارات الناتج إلى الخلف، ويعرضه مكبَّرًا ومُعلَّمًا بمعدل الإطارات الحالي:

openmv --port /dev/ttyACM0

يعتمد مسار المنفذ على نظام التشغيل المضيف. على Linux، يكون /dev/ttyACMx لمنفذ USB CDC و /dev/ttyUSBx لجسر USB إلى UART. على macOS، يكون /dev/tty.usbmodem... أو /dev/cu.usbmodem.... على Windows، يكون COMx.

العارض هو أسرع طريقة للتأكد من أن الحزمة مثبتة، وأن الكاميرا قابلة للوصول، وأن البروتوكول يعمل. كما أنه أداة عرض مفيدة أثناء تطوير البرامج النصية -- استبدل البرنامج النصي الاختباري المدمج بأي ملف MicroPython باستخدام --script وشاهد النتيجة دون مغادرة الطرفية.

يؤدي الضغط على Esc أو Ctrl+C في الطرفية، أو إغلاق نافذة العارض، إلى الخروج بشكل سليم.

13.3.1.1.1. تشغيل برنامج نصي مخصص

يوجّه --script واجهة سطر الأوامر إلى ملف مصدري بلغة 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. تحليل الأداء

تستطيع واجهة سطر الأوامر وضع بيانات المحلّل المباشرة كطبقة فوقية على الإطارات المبثوثة. تكون الطبقة الفوقية مفيدة فقط عندما تُشغّل الكاميرا برنامجًا ثابتًا مبنيًا بـ PROFILE_ENABLE=1 مع تسجيل قناة profile؛ أما على البرنامج الثابت الأصلي فلا تأثير لعناصر التحكم في تحليل الأداء.

  • --firmware PATH -- يُحمّل ملف ELF للبرنامج الثابت الذي تُشغّله الكاميرا حتى تتمكن الطبقة الفوقية من تحويل عناوين الدوال في سجلات المحلّل إلى أسماء مقروءة للبشر. بدونه تُظهر الطبقة الفوقية العناوين الخام.

ثلاثة اختصارات لوحة مفاتيح في العارض تتحكم في المحلّل:

المفتاح

الإجراء

P

تدوير الطبقة الفوقية للمحلّل: إيقاف، أداء، أحداث.

M

تبديل وضع المحلّل بين الشامل والحصري. يُحمّل التوقيت الشامل وقت المُستدعَى على المُستدعِي؛ أما التوقيت الحصري فلا يفعل.

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). للاختبار فقط.

مقبض ضبط واحد خاص بواجهة سطر الأوامر:

  • --poll MS -- معدل الاستطلاع للحلقة الرئيسية للعارض، بالميلي ثانية (الافتراضي 4).

13.3.1.1.6. أعلام متنوعة

علَمان يضبطان كيفية عرض العارض للبثّ دون تغيير سلوك جانب الكاميرا:

  • --scale N -- معامل تكبير العرض (الافتراضي 4). مفيد عندما تكون إطارات QVGA أصغر من أن تُقرأ على شاشة 4K.

  • --raw -- يطلب من الكاميرا إرسال مخازن البكسلات غير مضغوطة بدلًا من ضغطها بـ JPEG. مفيد على الكاميرات التي لا تدعم JPEG عتاديًا؛ يغطي بث الإطارات المفاضلات.

13.3.1.1.7. ما الذي يفعله العارض

واجهة سطر الأوامر نفسها برنامج openmv.Camera. تتصل، وتستدعي stop() لمسح أي برنامج نصي عامل، وترفع البرنامج النصي باستخدام exec()، وتُمكّن البثّ بـ streaming()، ثم تكرر استدعاء read_frame() (لتحديث العرض)، وread_stdout() (لعكس مطبوعات البرنامج النصي)، وread_status() (لمراقبة كل قناة مسجّلة أخرى بحثًا عن نشاط). المصدر موجود في cli.py وهو مرجع عملي لتطبيق يقود كاميرا من البداية إلى النهاية.