v3.0.0

الإصدار v3.0.0 هو إصدار v2 ← v3 الرئيسي. يقدم OpenMV Cam M7 (STM32F7) ووحدة الشبكة العصبية nn الجديدة المعتمدة على CMSIS-NN (لتحل محل دالتي find_number() / classify_object() القديمتين المُبرمجتين بشكل صلب)، ويضيف دعم مستشعر MT9V034 ذي الغالق العام وFLIR Lepton، وأحجام الإطارات sensor.WVGA، ويحدّث النواة إلى MicroPython 1.9.4. تغيّرت عدة سلوكيات في image / sensor / WiFi — اقرأ التغييرات الجذرية أدناه.

أبرز النقاط

  • OpenMV Cam M7 — لوحة STM32F7 جديدة.

  • وحدة nn — استدلال CMSIS-NN: nn.load()، Net.forward()، Net.search()، مع مُحوّل نماذج وأمثلة.

  • مستشعرات جديدة — MT9V034 ذو الغالق العام (يُطلق بـ FSIN) وFLIR Lepton.

  • تحديث النواة إلى MicroPython 1.9.4.

  • تغيير جذري: أُزيلت دالتا image.find_number() / image.classify_object() المُبرمجتان بشكل صلب، وأصبحت sensor.sleep() تطلق استثناءً، وتعيد منافذ WINC أعداد البايتات الحقيقية، وتعيد image.binary() صورة جديدة، وأصبحت find_apriltags() محدودة بـ 64K بكسل — انظر التغييرات الجذرية.

ميزات جديدة

  • nn — وحدة شبكة عصبية جديدة معتمدة على CMSIS-NN: nn.load(path)، Net.forward(img, roi=, softmax=, dry_run=) (تعيد أعداداً عشرية بين 0.0 و1.0)، Net.search() للكشف متعدد المقاييس/المواضع، وNet.test()، بالإضافة إلى مُحوّل نماذج CMSIS-NN (nn_convert.py / nn_quantizer.py)، ونماذج CIFAR-10 / LeNet / smile المُجمّعة، وأمثلة لبرامج NN وNN-search النصية.

  • المستشعرات — دعم MT9V034 ذي الغالق العام (لقطة تُطلق بـ FSIN) على OpenMV 4، ومُشغّل FLIR Lepton مُحدّث مع لقطة Lepton، وأحجام الإطارات الجديدة sensor.WVGA (720x480) / sensor.WVGA2 (752x480).

  • التصوير — اكتسبت image.find_circles() الكلمات المفتاحية r_min / r_max / r_step (تحويل Hough أسرع)، وأصبحت find_keypoints() ودالة Haar find_features() تقبلان صور RGB، وأصبحت image.compress() / ترميز JPEG تدعم الصور الثنائية (الخريطة النقطية).

  • الإقلاع — يعمل boot.py الآن قبل تهيئة USB بحيث يمكنه تجاوز وضع USB (مثل HID).

  • الأمثلة — أُضيفت أمثلة AprilTag صغيرة/عالية الدقة، ومثال I2C LIDAR-Lite V3، وأدوات مجموعات البيانات (augment_images.py / make_patches.py).

تغييرات وتحسينات أخرى

  • تحديث MicroPython المُجمّع إلى 1.9.4 (مع التراجع عن تحليل/تجميع/تنفيذ pyexec وإصلاح PendSV)؛ رسائل خطأ نفاد الذاكرة في fb_alloc / xalloc أكثر وضوحاً؛ كتم ضوضاء printf الخاصة بـ nn أثناء تحميل الشبكة؛ إعادة تنظيم المستودع (الأمثلة ← scripts/، الأدوات ← tools/، مُتتاليات Haar ← ml/). وحدة nn غير متوفرة على OpenMV 2 (ذاكرة فلاش غير كافية).

إصلاحات الأخطاء

التصوير:

  • إصلاح fast_atan2f للقيم x≤0 (كانت سابقاً دائماً 0 — أعد فحص زوايا الكتل / الخطوط / النقاط المفتاحية)، ومعالجة الذاكرة في find_apriltags() (إسقاط المحتويات وعملية realloc سيئة عند نفاد الذاكرة)، ومؤشرات صفوف الثنائي/الخريطة النقطية لكل bpp (نتائج ثنائية تالفة)، وfind_edges(EDGE_CANNY) مع منطقة اهتمام، وماكرو TO_GS_PIXEL (التكامل / المورفولوجيا)، وبث الخريطة النقطية/JPEG لإطارات تدرج الرمادي (bpp==0)، وpop_front لقائمة النقاط المفتاحية/الكتل، ونتائج match_descriptor.

النظام والكاميرا:

  • إصلاح أرقام واجهة/نقطة طرفية USB HID، وتغيير تردد XCLK ديناميكياً وقت التشغيل، وإعادة Net.forward() للعدد الصحيح من المخرجات، وعطل عتادي عند مقاطعة تحليل البرنامج النصي.

دعم العتاد واللوحات

  • OpenMV Cam M7 (STM32F7) — لوحة جديدة.

  • مستشعر MT9V034 ذو الغالق العام (OpenMV 4، يُطلق بـ FSIN).

  • FLIR Lepton — مُشغّل مُحدّث مع دعم اللقطة.

تغييرات API الجذرية

تغييرات API المرئية للمستخدم بين v2.9.0 وv3.0.0. النطاق: وحدات Python بلغة C في modules/ ومكتبات Python في scripts/libraries/.

يُوسم كل تغيير بمدى تأثيره:

  • رئيسي — يؤثر على معظم البرامج النصية التي استخدمت الميزة؛ ستحتاج إلى نقل التعليمات البرمجية.

  • طفيف — واجهة API ضيقة؛ لا يؤثر إلا على البرامج النصية التي استخدمتها.

  • سلوك — نفس واجهة API بنتائج مختلفة؛ أعد فحص البرامج النصية المضبوطة.

تُجمَّع التغييرات حسب التأثير بهذا الترتيب. إذا كنت ترغب فقط في نقل التعليمات البرمجية الخاصة بك، فانتقل إلى قائمة مراجعة الترحيل في النهاية. يرتبط كل تجزئة (hash) للالتزام بالفرق (diff) الخاص به على GitHub.

إزالة image.find_number() / image.classify_object() (رئيسي)

أُزيلت دالتا image.find_number() (LeNet) وimage.classify_object() (CMSIS CNN) المُبرمجتان بشكل صلب لصالح وحدة nn الجديدة. استبدلهما بـ net = nn.load('/model.network'); out = net.forward(img).

الالتزامات: d151f7e38

sensor.sleep() / sensor.reset() تطلقان استثناءً عند الفشل (طفيف)

أصبحت sensor.sleep() وsensor.reset() الآن تطلقان استثناءً عند الفشل بدلاً من إعادة True / False. يجب على التعليمات البرمجية التي فحصت القيمة المنطقية المُعادة من sensor.sleep() أن تغلّف الاستدعاء بـ try / except بدلاً من ذلك.

الالتزامات: 7d16d008f

منافذ WINC تعيد عدد البايتات الحقيقي (سلوك)

كانت دوال منفذ WINC1500 send / recv / sendto / recvfrom تعيد سابقاً 0 دائماً؛ وأصبحت الآن تعيد العدد الفعلي للبايتات المنقولة. يجب على التعليمات البرمجية التي افترضت إعادة 0 (أو كرّرت/تعطّلت بناءً عليها) أن تتعامل مع الأعداد الحقيقية.

الالتزامات: a07fb2f60

image.binary() تعيد صورة جديدة (سلوك)

اكتسبت image.binary() الكلمتين المفتاحيتين to_bitmap / copy وأصبحت الآن تعيد كائن صورة جديد بدلاً من إعادة/تعديل الصورة المصدر في مكانها. يجب على التعليمات البرمجية التي اعتمدت على تعديل binary() للصورة الأصلية أن تستخدم الكائن المُعاد (وتمرر copy=True للسلوك غير المُجرى في المكان).

الالتزامات: 8a44f0cd9

find_apriltags() محدودة بـ 64K بكسل (سلوك)

أصبحت image.find_apriltags() الآن تطلق استثناءً إذا تجاوزت الصورة (أو منطقة الاهتمام) 64K بكسل وتعيد قائمة فارغة للصور الأصغر من 4x4. قلّص الصور الكبيرة (استخدم framesize أصغر أو مرّر roi صريحاً) قبل استدعاء find_apriltags().

الالتزامات: bd77afbc0

قائمة مراجعة الترحيل

من أجل نقل نظيف إلى v3.0.0، العمل المعتاد هو:

  1. استبدل image.find_number() / image.classify_object() بوحدة nn (ترحيل nn).

  2. غلّف sensor.sleep() / sensor.reset() بـ try / except بدلاً من فحص قيمة منطقية مُعادة (تغيير sensor.sleep).

  3. تعامل مع أعداد البايتات الحقيقية من send / recv لمنفذ WINC (تغيير منفذ WINC).

  4. استخدم الصورة المُعادة من image.binary() بدلاً من توقع التعديل في المكان (تغيير binary).

  5. قلّص الصور قبل find_apriltags() للبقاء تحت 64K بكسل (حد find_apriltags).

تعمل جميع البرامج النصية الأخرى دون تغيير.